make sure networks are abstracted properly

This commit is contained in:
Kukks
2019-09-21 16:39:44 +02:00
parent fa18bd9a69
commit 59839a3332
9 changed files with 22 additions and 17 deletions

View File

@@ -54,7 +54,8 @@ namespace BTCPayServer
public KeyPath CoinType { get; internal set; }
public Dictionary<uint, DerivationType> ElectrumMapping = new Dictionary<uint, DerivationType>();
public int MaxTrackedConfirmation { get; internal set; } = 6;
public string UriScheme { get; internal set; }
public KeyPath GetRootKeyPath(DerivationType type)
{
KeyPath baseKey;
@@ -105,7 +106,6 @@ namespace BTCPayServer
public string CryptoCode { get; internal set; }
public string BlockExplorerLink { get; internal set; }
public string UriScheme { get; internal set; }
public string DisplayName { get; set; }
[Obsolete("Should not be needed")]
@@ -118,8 +118,6 @@ namespace BTCPayServer
}
public string CryptoImagePath { get; set; }
public int MaxTrackedConfirmation { get; internal set; } = 6;
public string[] DefaultRateRules { get; internal set; } = Array.Empty<string>();
public override string ToString()
{

View File

@@ -108,7 +108,7 @@ namespace BTCPayServer.Data
foreach (var strat in strategies.Properties())
{
var paymentMethodId = PaymentMethodId.Parse(strat.Name);
var network = networks.GetNetwork<BTCPayNetwork>(paymentMethodId.CryptoCode);
var network = networks.GetNetwork<BTCPayNetworkBase>(paymentMethodId.CryptoCode);
if (network != null)
{
if (network == networks.BTC && paymentMethodId.PaymentType == PaymentTypes.BTCLike && btcReturned)

View File

@@ -315,8 +315,9 @@ namespace BTCPayServer.HostedServices
var paymentData = payment.GetCryptoPaymentData();
if (paymentData is Payments.Bitcoin.BitcoinLikePaymentData onChainPaymentData)
{
var network = payment.Network as BTCPayNetwork;
// Do update if confirmation count in the paymentData is not up to date
if ((onChainPaymentData.ConfirmationCount < payment.Network.MaxTrackedConfirmation && payment.Accounted)
if ((onChainPaymentData.ConfirmationCount < network.MaxTrackedConfirmation && payment.Accounted)
&& (onChainPaymentData.Legacy || invoice.MonitoringExpiration < DateTimeOffset.UtcNow))
{
var transactionResult = await _ExplorerClientProvider.GetExplorerClient(payment.GetCryptoCode())?.GetTransactionAsync(onChainPaymentData.Outpoint.Hash);
@@ -325,7 +326,7 @@ namespace BTCPayServer.HostedServices
payment.SetCryptoPaymentData(onChainPaymentData);
// we want to extend invoice monitoring until we reach max confirmations on all onchain payment methods
if (confirmationCount < payment.Network.MaxTrackedConfirmation)
if (confirmationCount < network.MaxTrackedConfirmation)
extendInvoiceMonitoring = true;
return payment;

View File

@@ -59,7 +59,7 @@ namespace BTCPayServer.Payments.Bitcoin
public bool PaymentCompleted(PaymentEntity entity)
{
return ConfirmationCount >= Network.MaxTrackedConfirmation;
return ConfirmationCount >= ((BTCPayNetwork)Network).MaxTrackedConfirmation;
}
public bool PaymentConfirmed(PaymentEntity entity, SpeedPolicy speedPolicy)

View File

@@ -87,7 +87,9 @@ namespace BTCPayServer.Payments.Bitcoin
public override IEnumerable<PaymentMethodId> GetSupportedPaymentMethods()
{
return _networkProvider.GetAll()
return _networkProvider
.GetAll()
.OfType<BTCPayNetwork>()
.Select(network => new PaymentMethodId(network.CryptoCode, PaymentTypes.BTCLike));
}

View File

@@ -67,7 +67,7 @@ namespace BTCPayServer.Payments.Lightning
}
catch (OperationCanceledException) when (cts.IsCancellationRequested)
{
throw new PaymentMethodUnavailableException($"The lightning node did not reply in a timely maner");
throw new PaymentMethodUnavailableException($"The lightning node did not reply in a timely manner");
}
catch (Exception ex)
{
@@ -139,7 +139,10 @@ namespace BTCPayServer.Payments.Lightning
public override IEnumerable<PaymentMethodId> GetSupportedPaymentMethods()
{
return _networkProvider.GetAll()
return _networkProvider
.GetAll()
.OfType<BTCPayNetwork>()
.Where(network => network.NBitcoinNetwork.Consensus.SupportSegwit)
.Select(network => new PaymentMethodId(network.CryptoCode, PaymentTypes.LightningLike));
}

View File

@@ -461,7 +461,7 @@ namespace BTCPayServer.Services.Invoices
}
else if (paymentId.PaymentType == PaymentTypes.BTCLike)
{
var scheme = info.Network.UriScheme;
var scheme = ((BTCPayNetwork)info.Network).UriScheme;
var minerInfo = new MinerFeeInfo();
minerInfo.TotalFee = accounting.NetworkFee.Satoshi;
@@ -911,7 +911,7 @@ namespace BTCPayServer.Services.Invoices
{
[NotMapped]
[JsonIgnore]
public BTCPayNetwork Network { get; set; }
public BTCPayNetworkBase Network { get; set; }
public int Version { get; set; }
public DateTimeOffset ReceivedTime
{

View File

@@ -441,7 +441,7 @@ retry:
entity.Payments = invoice.Payments.Select(p =>
{
var paymentEntity = ToObject<PaymentEntity>(p.Blob, null);
paymentEntity.Network = _Networks.GetNetwork<BTCPayNetwork>(paymentEntity.CryptoCode);
paymentEntity.Network = _Networks.GetNetwork<BTCPayNetworkBase>(paymentEntity.CryptoCode);
paymentEntity.Accounted = p.Accounted;
// PaymentEntity on version 0 does not have their own fee, because it was assumed that the payment method have fixed fee.
// We want to hide this legacy detail in InvoiceRepository, so we fetch the fee from the PaymentMethod and assign it to the PaymentEntity.
@@ -663,7 +663,7 @@ retry:
ReceivedTime = date.UtcDateTime,
Accounted = accounted,
NetworkFee = paymentMethodDetails.GetNextNetworkFee(),
Network = network as BTCPayNetwork
Network = network
};
entity.SetCryptoPaymentData(paymentData);

View File

@@ -12,9 +12,10 @@
m.DepositAddress = onChainPaymentData.GetDestination();
int confirmationCount = onChainPaymentData.ConfirmationCount;
if (confirmationCount >= payment.Network.MaxTrackedConfirmation)
var network = payment.Network as BTCPayNetwork;
if (confirmationCount >= network.MaxTrackedConfirmation)
{
m.Confirmations = "At least " + (payment.Network.MaxTrackedConfirmation);
m.Confirmations = "At least " + (network.MaxTrackedConfirmation);
}
else
{