From 53aafcf86b83096080ccd63087f98d77073bec11 Mon Sep 17 00:00:00 2001 From: Nicolas Dorier Date: Fri, 23 Jun 2023 19:12:11 +0900 Subject: [PATCH] Fix: The current preimage of a invoice's lightning payment method should be available via API (#5111) --- BTCPayServer.Tests/GreenfieldAPITests.cs | 2 +- .../Payments/Lightning/LightningLikePaymentMethodDetails.cs | 3 +++ BTCPayServer/Services/Invoices/InvoiceEntity.cs | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/BTCPayServer.Tests/GreenfieldAPITests.cs b/BTCPayServer.Tests/GreenfieldAPITests.cs index 2452e2309..608c7716b 100644 --- a/BTCPayServer.Tests/GreenfieldAPITests.cs +++ b/BTCPayServer.Tests/GreenfieldAPITests.cs @@ -2631,7 +2631,7 @@ namespace BTCPayServer.Tests for (int i = 0; i < invoices.Length; i++) { pm[i] = Assert.Single(await client.GetInvoicePaymentMethods(user.StoreId, (await invoices[i]).Id)); - Assert.False(pm[i].AdditionalData.HasValues); + Assert.True(pm[i].AdditionalData.HasValues); } // Pay them all at once diff --git a/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs b/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs index 920ebceb3..004d4cee2 100644 --- a/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs +++ b/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs @@ -3,6 +3,7 @@ using System.Linq; using BTCPayServer.Lightning; using BTCPayServer.Services.Invoices; using NBitcoin; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace BTCPayServer.Payments.Lightning @@ -10,7 +11,9 @@ namespace BTCPayServer.Payments.Lightning public class LightningLikePaymentMethodDetails : IPaymentMethodDetails { public string BOLT11 { get; set; } + [JsonConverter(typeof(NBitcoin.JsonConverters.UInt256JsonConverter))] public uint256 PaymentHash { get; set; } + [JsonConverter(typeof(NBitcoin.JsonConverters.UInt256JsonConverter))] public uint256 Preimage { get; set; } public string InvoiceId { get; set; } public string NodeInfo { get; set; } diff --git a/BTCPayServer/Services/Invoices/InvoiceEntity.cs b/BTCPayServer/Services/Invoices/InvoiceEntity.cs index 36d3d7e19..1a32a52f1 100644 --- a/BTCPayServer/Services/Invoices/InvoiceEntity.cs +++ b/BTCPayServer/Services/Invoices/InvoiceEntity.cs @@ -1007,6 +1007,11 @@ namespace BTCPayServer.Services.Invoices }; } + // A bug in previous version of BTCPay Server wasn't properly serializing those fields + if (PaymentMethodDetails["PaymentHash"] is JObject) + PaymentMethodDetails["PaymentHash"] = null; + if (PaymentMethodDetails["Preimage"] is JObject) + PaymentMethodDetails["Preimage"] = null; IPaymentMethodDetails details = GetId().PaymentType.DeserializePaymentMethodDetails(Network, PaymentMethodDetails.ToString()); switch (details) {