From 6b45eb0d3d1e6e0700a0d49cc279a0b494d4d5ab Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Fri, 22 Mar 2024 10:06:38 +0100 Subject: [PATCH] Do not throw when local node is not synced and using external ln node (#5859) * Do not throw when local node is not synced and using external ln node * Fix additional bug when ln conn strings without server would crash --- .../Lightning/LightningLikePaymentHandler.cs | 13 ++++++++----- .../Payments/Lightning/LightningListener.cs | 9 ++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs index be542bdf7..a7866d414 100644 --- a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs +++ b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs @@ -132,7 +132,7 @@ namespace BTCPayServer.Payments.Lightning // LNDhub-compatible implementations might not offer all of GetInfo data. // Skip checks in those cases, see https://github.com/lnbits/lnbits/issues/1182 var isLndHub = client is LndHubLightningClient; - + LightningNodeInformation info; try { @@ -163,11 +163,14 @@ namespace BTCPayServer.Payments.Lightning ? info.NodeInfoList.Where(i => i.IsTor == preferOnion.Value).ToArray() : info.NodeInfoList.Select(i => i).ToArray(); - var blocksGap = summary.Status.ChainHeight - info.BlockHeight; - if (blocksGap > 10 && !(isLndHub && info.BlockHeight == 0)) + if (summary.Status is not null) { - throw new PaymentMethodUnavailableException( - $"The lightning node is not synched ({blocksGap} blocks left)"); + var blocksGap = summary.Status.ChainHeight - info.BlockHeight; + if (blocksGap > 10 && !(isLndHub && info.BlockHeight == 0)) + { + throw new PaymentMethodUnavailableException( + $"The lightning node is not synched ({blocksGap} blocks left)"); + } } return nodeInfo; } diff --git a/BTCPayServer/Payments/Lightning/LightningListener.cs b/BTCPayServer/Payments/Lightning/LightningListener.cs index 7cca99b0e..d74e20752 100644 --- a/BTCPayServer/Payments/Lightning/LightningListener.cs +++ b/BTCPayServer/Payments/Lightning/LightningListener.cs @@ -508,8 +508,15 @@ namespace BTCPayServer.Payments.Lightning try { var lightningClient = _lightningClientFactory.Create(ConnectionString, _network); + if(lightningClient is null) + return; uri = lightningClient.GetServerUri(); - logUrl = string.IsNullOrEmpty(uri.UserInfo) ? uri.ToString() : uri.ToString().Replace(uri.UserInfo, "***"); + logUrl = uri switch + { + null when LightningConnectionStringHelper.ExtractValues(ConnectionString, out var type) is not null => type, + null => string.Empty, + _ => string.IsNullOrEmpty(uri.UserInfo) ? uri.ToString() : uri.ToString().Replace(uri.UserInfo, "***") + }; Logs.PayServer.LogInformation("{CryptoCode} (Lightning): Start listening {Uri}", _network.CryptoCode, logUrl); using var session = await lightningClient.Listen(cancellation); // Just in case the payment arrived after our last poll but before we listened.