From 5b7e6db0634d4d812b573009905ac7a21e512916 Mon Sep 17 00:00:00 2001 From: t-bast Date: Tue, 12 Aug 2025 09:30:58 +0200 Subject: [PATCH] Add recent invoice spec test vectors Add test vectors from https://github.com/lightning/bolts/pull/1276 and https://github.com/lightning/bolts/pull/1264 --- eclair-core/src/test/resources/offers-test.json | 7 ++++++- .../fr/acinq/eclair/payment/Bolt11InvoiceSpec.scala | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/eclair-core/src/test/resources/offers-test.json b/eclair-core/src/test/resources/offers-test.json index 891ed5673f..1096a1a66b 100644 --- a/eclair-core/src/test/resources/offers-test.json +++ b/eclair-core/src/test/resources/offers-test.json @@ -489,10 +489,15 @@ "bolt12": "lno1qcqcqzs9g9xyjs69zcssyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqsz" }, { - "description": "Malformed: invalid currency UTF-8", + "description": "Malformed: invalid currency UTF-8 (2-letter code)", "valid": false, "bolt12": "lno1qcpgqsg2q4q5cj2rg5tzzqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqg" }, + { + "description": "Malformed: invalid currency UTF-8 (3-letter code)", + "valid": false, + "bolt12": "lno1qcplllhapqpq86q2q4qkc6trv5tzzq6muh550qsfva9fdes0ruph7ctk2s8aqq06r4jxj3msc448wzwy9s" + }, { "description": "Malformed: truncated description UTF-8", "valid": false, diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/payment/Bolt11InvoiceSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/payment/Bolt11InvoiceSpec.scala index 6e9133701b..dad1d246c4 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/payment/Bolt11InvoiceSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/payment/Bolt11InvoiceSpec.scala @@ -386,6 +386,16 @@ class Bolt11InvoiceSpec extends AnyFunSuite { assert(invoice.sign(priv).toString == ref) } + test("On mainnet, with fallback (P2TR) address bc1pptdvg0d2nj99568qn6ssdy4cygnwuxgw2ukmnwgwz7jpqjz2kszse2s3lm") { + val ref = "lnbc20m1pvjluezsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygspp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqsfp4pptdvg0d2nj99568qn6ssdy4cygnwuxgw2ukmnwgwz7jpqjz2kszs9qrsgqy606dznq28exnydt2r4c29y56xjtn3sk4mhgjtl4pg2y4ar3249rq4ajlmj9jy8zvlzw7cr8mggqzm842xfr0v72rswzq9xvr4hknfsqwmn6xd" + val Success(invoice) = Bolt11Invoice.fromString(ref) + assert(invoice.prefix == "lnbc") + assert(invoice.amount_opt.contains(2000000000 msat)) + assert(invoice.nodeId == PublicKey(hex"03e7156ae33b0a208d0744199163177e909e80176e55d97a2f221ede0f934dd9ad")) + assert(invoice.fallbackAddress().contains("bc1pptdvg0d2nj99568qn6ssdy4cygnwuxgw2ukmnwgwz7jpqjz2kszse2s3lm")) + assert(invoice.sign(priv).toString == ref) + } + test("reject invalid invoices") { val refs = Seq( // Bech32 checksum is invalid.