mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 06:24:24 +01:00
Remove additional cryptoCode from events (#6277)
This commit is contained in:
@@ -3776,7 +3776,7 @@ namespace BTCPayServer.Tests
|
|||||||
{
|
{
|
||||||
|
|
||||||
await tester.ExplorerNode.GenerateAsync(1);
|
await tester.ExplorerNode.GenerateAsync(1);
|
||||||
}, bevent => bevent.CryptoCode.Equals("BTC", StringComparison.Ordinal));
|
}, bevent => bevent.PaymentMethodId == PaymentTypes.CHAIN.GetPaymentMethodId("BTC"));
|
||||||
|
|
||||||
Assert.Contains(
|
Assert.Contains(
|
||||||
await client.ShowOnChainWalletTransactions(walletId.StoreId, walletId.CryptoCode,
|
await client.ShowOnChainWalletTransactions(walletId.StoreId, walletId.CryptoCode,
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ using StoreData = BTCPayServer.Data.StoreData;
|
|||||||
public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
||||||
{
|
{
|
||||||
public string Currency { get; }
|
public string Currency { get; }
|
||||||
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
|
|
||||||
private readonly PaymentMethodHandlerDictionary _paymentHandlers;
|
private readonly PaymentMethodHandlerDictionary _paymentHandlers;
|
||||||
private readonly ExplorerClientProvider _explorerClientProvider;
|
private readonly ExplorerClientProvider _explorerClientProvider;
|
||||||
private readonly BTCPayNetworkJsonSerializerSettings _jsonSerializerSettings;
|
private readonly BTCPayNetworkJsonSerializerSettings _jsonSerializerSettings;
|
||||||
@@ -65,7 +64,6 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||||||
EventAggregator eventAggregator,
|
EventAggregator eventAggregator,
|
||||||
TransactionLinkProviders transactionLinkProviders)
|
TransactionLinkProviders transactionLinkProviders)
|
||||||
{
|
{
|
||||||
_btcPayNetworkProvider = btcPayNetworkProvider;
|
|
||||||
PayoutMethodId = payoutMethodId;
|
PayoutMethodId = payoutMethodId;
|
||||||
PaymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
PaymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
||||||
Network = network;
|
Network = network;
|
||||||
@@ -174,12 +172,14 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||||||
|
|
||||||
public async Task BackgroundCheck(object o)
|
public async Task BackgroundCheck(object o)
|
||||||
{
|
{
|
||||||
if (o is NewOnChainTransactionEvent newTransaction && newTransaction.NewTransactionEvent.TrackedSource is AddressTrackedSource addressTrackedSource)
|
if (o is NewOnChainTransactionEvent newTransaction && newTransaction.NewTransactionEvent.TrackedSource is AddressTrackedSource addressTrackedSource
|
||||||
|
&& newTransaction.PaymentMethodId == PaymentMethodId)
|
||||||
{
|
{
|
||||||
await UpdatePayoutsAwaitingForPayment(newTransaction, addressTrackedSource);
|
await UpdatePayoutsAwaitingForPayment(newTransaction, addressTrackedSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o is NewBlockEvent || o is NewOnChainTransactionEvent)
|
if ((o is NewBlockEvent nbe && nbe.PaymentMethodId == PaymentMethodId) ||
|
||||||
|
(o is NewOnChainTransactionEvent nct && nct.PaymentMethodId == PaymentMethodId))
|
||||||
{
|
{
|
||||||
await UpdatePayoutsInProgress();
|
await UpdatePayoutsInProgress();
|
||||||
}
|
}
|
||||||
@@ -416,18 +416,17 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var network = _btcPayNetworkProvider.GetNetwork<BTCPayNetwork>(newTransaction.CryptoCode);
|
|
||||||
var destinationSum =
|
var destinationSum =
|
||||||
newTransaction.NewTransactionEvent.Outputs.Sum(output => output.Value.GetValue(network));
|
newTransaction.NewTransactionEvent.Outputs.Sum(output => output.Value.GetValue(Network));
|
||||||
var destination = addressTrackedSource.Address.ToString();
|
var destination = addressTrackedSource.Address.ToString();
|
||||||
var paymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(newTransaction.CryptoCode);
|
|
||||||
|
|
||||||
await using var ctx = _dbContextFactory.CreateContext();
|
await using var ctx = _dbContextFactory.CreateContext();
|
||||||
var payout = await ctx.Payouts
|
var payout = await ctx.Payouts
|
||||||
.Include(o => o.StoreData)
|
.Include(o => o.StoreData)
|
||||||
.Include(o => o.PullPaymentData)
|
.Include(o => o.PullPaymentData)
|
||||||
.Where(p => p.State == PayoutState.AwaitingPayment)
|
.Where(p => p.State == PayoutState.AwaitingPayment)
|
||||||
.Where(p => p.PayoutMethodId == paymentMethodId.ToString())
|
.Where(p => p.PayoutMethodId == PaymentMethodId.ToString())
|
||||||
#pragma warning disable CA1307 // Specify StringComparison
|
#pragma warning disable CA1307 // Specify StringComparison
|
||||||
.Where(p => destination.Equals(p.DedupId))
|
.Where(p => destination.Equals(p.DedupId))
|
||||||
#pragma warning restore CA1307 // Specify StringComparison
|
#pragma warning restore CA1307 // Specify StringComparison
|
||||||
@@ -440,15 +439,15 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||||||
// The round up here is not strictly necessary, this is temporary to fix existing payout before we
|
// The round up here is not strictly necessary, this is temporary to fix existing payout before we
|
||||||
// were properly roundup the crypto amount
|
// were properly roundup the crypto amount
|
||||||
destinationSum !=
|
destinationSum !=
|
||||||
BTCPayServer.Extensions.RoundUp(payout.Amount.Value, network.Divisibility))
|
BTCPayServer.Extensions.RoundUp(payout.Amount.Value, Network.Divisibility))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var derivationSchemeSettings = payout.StoreData
|
var derivationSchemeSettings = payout.StoreData
|
||||||
.GetDerivationSchemeSettings(_paymentHandlers, newTransaction.CryptoCode)?.AccountDerivation;
|
.GetDerivationSchemeSettings(_paymentHandlers, Network.CryptoCode)?.AccountDerivation;
|
||||||
if (derivationSchemeSettings is null)
|
if (derivationSchemeSettings is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var storeWalletMatched = (await _explorerClientProvider.GetExplorerClient(newTransaction.CryptoCode)
|
var storeWalletMatched = (await _explorerClientProvider.GetExplorerClient(Network.CryptoCode)
|
||||||
.GetTransactionAsync(derivationSchemeSettings,
|
.GetTransactionAsync(derivationSchemeSettings,
|
||||||
newTransaction.NewTransactionEvent.TransactionData.TransactionHash));
|
newTransaction.NewTransactionEvent.TransactionData.TransactionHash));
|
||||||
//if the wallet related to the store of the payout does not have the tx: it has been paid externally
|
//if the wallet related to the store of the payout does not have the tx: it has been paid externally
|
||||||
@@ -463,7 +462,7 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||||||
{
|
{
|
||||||
payout.State = PayoutState.InProgress;
|
payout.State = PayoutState.InProgress;
|
||||||
await WalletRepository.AddWalletTransactionAttachment(
|
await WalletRepository.AddWalletTransactionAttachment(
|
||||||
new WalletId(payout.StoreDataId, newTransaction.CryptoCode),
|
new WalletId(payout.StoreDataId, Network.CryptoCode),
|
||||||
newTransaction.NewTransactionEvent.TransactionData.TransactionHash,
|
newTransaction.NewTransactionEvent.TransactionData.TransactionHash,
|
||||||
Attachment.Payout(payout.PullPaymentDataId, payout.Id));
|
Attachment.Payout(payout.PullPaymentDataId, payout.Id));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
|
using BTCPayServer.Payments;
|
||||||
|
|
||||||
namespace BTCPayServer.Events
|
namespace BTCPayServer.Events
|
||||||
{
|
{
|
||||||
public class NewBlockEvent
|
public class NewBlockEvent
|
||||||
{
|
{
|
||||||
public string CryptoCode { get; set; }
|
public PaymentMethodId PaymentMethodId { get; set; }
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return $"{CryptoCode}: New block";
|
return $"{PaymentMethodId}: New block";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using BTCPayServer.Payments;
|
||||||
using NBXplorer.Models;
|
using NBXplorer.Models;
|
||||||
|
|
||||||
namespace BTCPayServer.Events
|
namespace BTCPayServer.Events
|
||||||
@@ -5,12 +6,12 @@ namespace BTCPayServer.Events
|
|||||||
public class NewOnChainTransactionEvent
|
public class NewOnChainTransactionEvent
|
||||||
{
|
{
|
||||||
public NewTransactionEvent NewTransactionEvent { get; set; }
|
public NewTransactionEvent NewTransactionEvent { get; set; }
|
||||||
public string CryptoCode { get; set; }
|
public PaymentMethodId PaymentMethodId { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var state = NewTransactionEvent.BlockId == null ? "Unconfirmed" : "Confirmed";
|
var state = NewTransactionEvent.BlockId == null ? "Unconfirmed" : "Confirmed";
|
||||||
return $"{CryptoCode}: New transaction {NewTransactionEvent.TransactionData.TransactionHash} ({state})";
|
return $"{PaymentMethodId}: New transaction {NewTransactionEvent.TransactionData.TransactionHash} ({state})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -410,20 +410,17 @@ namespace BTCPayServer
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static BitcoinLikePaymentHandler? TryGetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, BTCPayNetwork network)
|
public static BitcoinLikePaymentHandler? TryGetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, BTCPayNetwork network)
|
||||||
{
|
=> handlers.TryGetBitcoinHandler(network.CryptoCode);
|
||||||
return handlers.TryGetBitcoinHandler(network.CryptoCode);
|
|
||||||
}
|
|
||||||
public static BitcoinLikePaymentHandler? TryGetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, string cryptoCode)
|
public static BitcoinLikePaymentHandler? TryGetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, string cryptoCode)
|
||||||
|
=> handlers.TryGetBitcoinHandler(PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode));
|
||||||
|
public static BitcoinLikePaymentHandler? TryGetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, PaymentMethodId paymentMethodId)
|
||||||
{
|
{
|
||||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode);
|
if (handlers.TryGetValue(paymentMethodId, out var h) && h is BitcoinLikePaymentHandler b)
|
||||||
if (handlers.TryGetValue(pmi, out var h) && h is BitcoinLikePaymentHandler b)
|
|
||||||
return b;
|
return b;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public static BitcoinLikePaymentHandler GetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, BTCPayNetwork network)
|
public static BitcoinLikePaymentHandler GetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, BTCPayNetwork network)
|
||||||
{
|
=> handlers.GetBitcoinHandler(network.CryptoCode);
|
||||||
return handlers.GetBitcoinHandler(network.CryptoCode);
|
|
||||||
}
|
|
||||||
public static BitcoinLikePaymentHandler GetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, string cryptoCode)
|
public static BitcoinLikePaymentHandler GetBitcoinHandler(this PaymentMethodHandlerDictionary handlers, string cryptoCode)
|
||||||
{
|
{
|
||||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode);
|
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode);
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace BTCPayServer.HostedServices
|
|||||||
// If we find, then we create a link between them and the tx object.
|
// If we find, then we create a link between them and the tx object.
|
||||||
case NewOnChainTransactionEvent transactionEvent:
|
case NewOnChainTransactionEvent transactionEvent:
|
||||||
{
|
{
|
||||||
var handler = _handlers.TryGetBitcoinHandler(transactionEvent.CryptoCode);
|
var handler = _handlers.TryGetBitcoinHandler(transactionEvent.PaymentMethodId);
|
||||||
var derivation = transactionEvent.NewTransactionEvent.DerivationStrategy;
|
var derivation = transactionEvent.NewTransactionEvent.DerivationStrategy;
|
||||||
if (handler is null || derivation is null)
|
if (handler is null || derivation is null)
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||||||
{
|
{
|
||||||
case NBXplorer.Models.NewBlockEvent evt:
|
case NBXplorer.Models.NewBlockEvent evt:
|
||||||
await UpdatePaymentStates(wallet);
|
await UpdatePaymentStates(wallet);
|
||||||
_Aggregator.Publish(new Events.NewBlockEvent() { CryptoCode = evt.CryptoCode });
|
_Aggregator.Publish(new Events.NewBlockEvent() { PaymentMethodId = pmi });
|
||||||
break;
|
break;
|
||||||
case NBXplorer.Models.NewTransactionEvent evt:
|
case NBXplorer.Models.NewTransactionEvent evt:
|
||||||
if (evt.DerivationStrategy != null)
|
if (evt.DerivationStrategy != null)
|
||||||
@@ -202,7 +202,7 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||||||
|
|
||||||
_Aggregator.Publish(new NewOnChainTransactionEvent()
|
_Aggregator.Publish(new NewOnChainTransactionEvent()
|
||||||
{
|
{
|
||||||
CryptoCode = wallet.Network.CryptoCode,
|
PaymentMethodId = pmi,
|
||||||
NewTransactionEvent = evt
|
NewTransactionEvent = evt
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ namespace BTCPayServer.Services.Altcoins.Monero.Services
|
|||||||
private async Task OnNewBlock(string cryptoCode)
|
private async Task OnNewBlock(string cryptoCode)
|
||||||
{
|
{
|
||||||
await UpdateAnyPendingMoneroLikePayment(cryptoCode);
|
await UpdateAnyPendingMoneroLikePayment(cryptoCode);
|
||||||
_eventAggregator.Publish(new NewBlockEvent() { CryptoCode = cryptoCode });
|
_eventAggregator.Publish(new NewBlockEvent() { PaymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode) });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnTransactionUpdated(string cryptoCode, string transactionHash)
|
private async Task OnTransactionUpdated(string cryptoCode, string transactionHash)
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ namespace BTCPayServer.Services.Altcoins.Zcash.Services
|
|||||||
private async Task OnNewBlock(string cryptoCode)
|
private async Task OnNewBlock(string cryptoCode)
|
||||||
{
|
{
|
||||||
await UpdateAnyPendingZcashLikePayment(cryptoCode);
|
await UpdateAnyPendingZcashLikePayment(cryptoCode);
|
||||||
_eventAggregator.Publish(new NewBlockEvent() { CryptoCode = cryptoCode });
|
_eventAggregator.Publish(new NewBlockEvent() { PaymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(cryptoCode) });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnTransactionUpdated(string cryptoCode, string transactionHash)
|
private async Task OnTransactionUpdated(string cryptoCode, string transactionHash)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Events;
|
using BTCPayServer.Events;
|
||||||
|
using BTCPayServer.Payments;
|
||||||
using BTCPayServer.Services.Invoices;
|
using BTCPayServer.Services.Invoices;
|
||||||
using BTCPayServer.Services.Stores;
|
using BTCPayServer.Services.Stores;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
@@ -102,11 +103,11 @@ namespace BTCPayServer.Services.Wallets
|
|||||||
_walletReceiveState.AddOrReplace(walletId, information);
|
_walletReceiveState.AddOrReplace(walletId, information);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<KeyValuePair<WalletId, KeyPathInformation>> GetByDerivation(string cryptoCode,
|
public IEnumerable<KeyValuePair<WalletId, KeyPathInformation>> GetByDerivation(PaymentMethodId paymentMethodId,
|
||||||
DerivationStrategyBase derivationStrategyBase)
|
DerivationStrategyBase derivationStrategyBase)
|
||||||
{
|
{
|
||||||
return _walletReceiveState.Where(pair =>
|
return _walletReceiveState.Where(pair =>
|
||||||
pair.Key.CryptoCode.Equals(cryptoCode, StringComparison.InvariantCulture) &&
|
pair.Key.PaymentMethodId == paymentMethodId &&
|
||||||
pair.Value.DerivationStrategy == derivationStrategyBase);
|
pair.Value.DerivationStrategy == derivationStrategyBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ namespace BTCPayServer.Services.Wallets
|
|||||||
|
|
||||||
_leases.Add(_eventAggregator.Subscribe<NewOnChainTransactionEvent>(evt =>
|
_leases.Add(_eventAggregator.Subscribe<NewOnChainTransactionEvent>(evt =>
|
||||||
{
|
{
|
||||||
var matching = GetByDerivation(evt.CryptoCode, evt.NewTransactionEvent.DerivationStrategy).Where(pair =>
|
var matching = GetByDerivation(evt.PaymentMethodId, evt.NewTransactionEvent.DerivationStrategy).Where(pair =>
|
||||||
evt.NewTransactionEvent.Outputs.Any(output => output.ScriptPubKey == pair.Value.ScriptPubKey));
|
evt.NewTransactionEvent.Outputs.Any(output => output.ScriptPubKey == pair.Value.ScriptPubKey));
|
||||||
|
|
||||||
foreach (var keyValuePair in matching)
|
foreach (var keyValuePair in matching)
|
||||||
|
|||||||
@@ -27,14 +27,11 @@ namespace BTCPayServer
|
|||||||
ArgumentNullException.ThrowIfNull(cryptoCode);
|
ArgumentNullException.ThrowIfNull(cryptoCode);
|
||||||
StoreId = storeId;
|
StoreId = storeId;
|
||||||
CryptoCode = cryptoCode;
|
CryptoCode = cryptoCode;
|
||||||
|
PaymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(CryptoCode);
|
||||||
}
|
}
|
||||||
public string StoreId { get; }
|
public string StoreId { get; }
|
||||||
public string CryptoCode { get; }
|
public string CryptoCode { get; }
|
||||||
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
public PaymentMethodId GetPaymentMethodId()
|
|
||||||
{
|
|
||||||
return PaymentTypes.CHAIN.GetPaymentMethodId(CryptoCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WalletId Parse(string id)
|
public static WalletId Parse(string id)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user