From f8427eb801d04dc68aa5adcaecc00788bd764b32 Mon Sep 17 00:00:00 2001 From: HugoDoyon Date: Wed, 31 Jul 2019 16:39:25 -0400 Subject: [PATCH] Fix "Do not propose lightning payment if value of the invoice is above..." take care of the GAP edge case where OnChainMinValue > LightningMaxValue --- .../Lightning/LightningLikePaymentHandler.cs | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs index daff1816f..770d3da2c 100644 --- a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs +++ b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs @@ -163,16 +163,29 @@ namespace BTCPayServer.Payments.Lightning limitValue = storeBlob.LightningMaxValue; errorMessage = "The amount of the invoice is too high to be paid with lightning"; } - else if (storeBlob.LightningMaxValue == null && - storeBlob.OnChainMinValue != null) - { - //TODO: Case of LightningMaxValue not set and OnChainMinValue set - } else if (storeBlob.LightningMaxValue != null && storeBlob.OnChainMinValue != null) { - //TODO: Case of LightningMaxValue set and OnChainMinValue set - } + if (storeBlob.LightningMaxValue.Currency == storeBlob.OnChainMinValue.Currency && + storeBlob.LightningMaxValue.Value >= storeBlob.OnChainMinValue.Value) + { + //Case where both fields are set but LightningMaxValue is greater + // --> then use LightningMaxValue as limit + compare = (value, limit) => value >= limit; + limitValue = storeBlob.LightningMaxValue; + errorMessage = "The amount of the invoice is too high to be paid with lightning"; + } + else if (storeBlob.LightningMaxValue.Currency == storeBlob.OnChainMinValue.Currency && + storeBlob.LightningMaxValue.Value < storeBlob.OnChainMinValue.Value) + { + //Case where both fields are set but OnChainMinValue is greater + // --> then use OnChainMinValue as limit + // (Otherwise a gap of price value with no payment method is possible) + compare = (value, limit) => value >= limit; + limitValue = storeBlob.OnChainMinValue; + errorMessage = "The amount of the invoice is too high to be paid with lightning"; + } + } }