mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 06:24:24 +01:00
Payout Destination Handling (#2985)
* Payout Destination Handling fixes #2765 This PR: * reactivates the BIP21 support for payouts. * allows LNUrl destinations to be reusable. * allows addresses to be reused in claims as long as the other claims are in a final state * Ensure bolt amount matches the payout amount * fixes * reduce duplicate parsing of bolt * make hash the id of bolt * better bolt11 tostring * use cached payment request from lnurl
This commit is contained in:
@@ -36,6 +36,8 @@ namespace BTCPayServer.Hosting
|
||||
private readonly BTCPayNetworkProvider _NetworkProvider;
|
||||
private readonly SettingsRepository _Settings;
|
||||
private readonly AppService _appService;
|
||||
private readonly IEnumerable<IPayoutHandler> _payoutHandlers;
|
||||
private readonly BTCPayNetworkJsonSerializerSettings _btcPayNetworkJsonSerializerSettings;
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
|
||||
public IOptions<LightningNetworkOptions> LightningOptions { get; }
|
||||
@@ -47,13 +49,17 @@ namespace BTCPayServer.Hosting
|
||||
UserManager<ApplicationUser> userManager,
|
||||
IOptions<LightningNetworkOptions> lightningOptions,
|
||||
SettingsRepository settingsRepository,
|
||||
AppService appService)
|
||||
AppService appService,
|
||||
IEnumerable<IPayoutHandler> payoutHandlers,
|
||||
BTCPayNetworkJsonSerializerSettings btcPayNetworkJsonSerializerSettings)
|
||||
{
|
||||
_DBContextFactory = dbContextFactory;
|
||||
_StoreRepository = storeRepository;
|
||||
_NetworkProvider = networkProvider;
|
||||
_Settings = settingsRepository;
|
||||
_appService = appService;
|
||||
_payoutHandlers = payoutHandlers;
|
||||
_btcPayNetworkJsonSerializerSettings = btcPayNetworkJsonSerializerSettings;
|
||||
_userManager = userManager;
|
||||
LightningOptions = lightningOptions;
|
||||
}
|
||||
@@ -147,6 +153,12 @@ namespace BTCPayServer.Hosting
|
||||
settings.MigrateAppCustomOption = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
if (!settings.MigratePayoutDestinationId)
|
||||
{
|
||||
await MigratePayoutDestinationId();
|
||||
settings.MigratePayoutDestinationId = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -154,6 +166,28 @@ namespace BTCPayServer.Hosting
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task MigratePayoutDestinationId()
|
||||
{
|
||||
await using var ctx = _DBContextFactory.CreateContext();
|
||||
foreach (var payoutData in await ctx.Payouts.AsQueryable().ToArrayAsync())
|
||||
{
|
||||
var pmi = payoutData.GetPaymentMethodId();
|
||||
if (pmi is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var handler = _payoutHandlers
|
||||
.FindPayoutHandler(pmi);
|
||||
if (handler is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var claim = await handler?.ParseClaimDestination(pmi, payoutData.GetBlob(_btcPayNetworkJsonSerializerSettings).Destination, false);
|
||||
payoutData.Destination = claim.destination?.Id;
|
||||
}
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
|
||||
private async Task MigrateAppCustomOption()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user