@using System.Globalization @using BTCPayServer.Payments @using BTCPayServer.Payments.Bitcoin @using BTCPayServer.Services @using BTCPayServer.Services.Invoices @using NBitcoin @inject DisplayFormatter DisplayFormatter @inject TransactionLinkProviders TransactionLinkProviders @inject PaymentMethodHandlerDictionary handlers @model IEnumerable @{ PayjoinInformation payjoinInformation = null; var payments = Model .Select(payment => { if (!handlers.TryGetValue(payment.PaymentMethodId, out var h) || h is not BitcoinLikePaymentHandler handler) return null; var network = handler.Network; var m = new OnchainPaymentViewModel(); var onChainPaymentData = handler.ParsePaymentDetails(payment.Details); m.Crypto = network.CryptoCode; m.DepositAddress = BitcoinAddress.Create(payment.Destination, network.NBitcoinNetwork); var confirmationCount = onChainPaymentData.ConfirmationCount; if (confirmationCount >= network.MaxTrackedConfirmation) { m.Confirmations = "At least " + (network.MaxTrackedConfirmation); } else { m.Confirmations = confirmationCount.ToString(CultureInfo.InvariantCulture); } if (onChainPaymentData.PayjoinInformation is PayjoinInformation pj) { payjoinInformation = pj; m.AdditionalInformation = "Original transaction"; } if (payjoinInformation is PayjoinInformation && payjoinInformation.CoinjoinTransactionHash == onChainPaymentData?.Outpoint.Hash) { m.AdditionalInformation = "Payjoin transaction"; } m.TransactionId = onChainPaymentData.Outpoint.Hash.ToString(); m.ReceivedTime = payment.ReceivedTime; m.TransactionLink = TransactionLinkProviders.GetTransactionLink(network.CryptoCode, onChainPaymentData.Outpoint.ToString()); m.Replaced = !payment.Accounted; m.CryptoPaymentData = onChainPaymentData; m.Value = payment.Value; m.NetworkFee = payment.PaymentMethodFee; m.PaymentProof = onChainPaymentData.Outpoint.ToString(); return m; }) .Where(model => model != null) .ToList(); } @if (payments.Any()) { var hasNetworkFee = payments.Sum(a => a.NetworkFee) > 0;
On-Chain Payments
@if (hasNetworkFee) { } @foreach (var payment in payments) { @if (hasNetworkFee) { } }
Crypto Index Destination Payment Proof Network Fee Confirmations Paid
@payment.Crypto @(payment.CryptoPaymentData.KeyPath?.ToString()?? "Unknown") @payment.NetworkFee@payment.Confirmations @DisplayFormatter.Currency(payment.Value, payment.Crypto) @if (!string.IsNullOrEmpty(payment.AdditionalInformation)) {
(@payment.AdditionalInformation)
}
}