@@ -63,6 +63,15 @@ class OfferManagerTestsCommon : LightningTestSuite() {
63
63
return offer
64
64
}
65
65
66
+ private fun decryptPathId (invoice : Bolt12Invoice , trampolineKey : PrivateKey ): OfferPaymentMetadata .V1 {
67
+ val blindedRoute = invoice.blindedPaths.first().route.route
68
+ assertEquals(2 , blindedRoute.encryptedPayloads.size)
69
+ val (_, nextBlinding) = RouteBlinding .decryptPayload(trampolineKey, blindedRoute.blindingKey, blindedRoute.encryptedPayloads.first()).right!!
70
+ val (lastPayload, _) = RouteBlinding .decryptPayload(TestConstants .Alice .nodeParams.nodePrivateKey, nextBlinding, blindedRoute.encryptedPayloads.last()).right!!
71
+ val pathId = RouteBlindingEncryptedData .read(lastPayload.toByteArray()).right!! .pathId!!
72
+ return OfferPaymentMetadata .fromPathId(TestConstants .Alice .nodeParams.nodeId, pathId) as OfferPaymentMetadata .V1
73
+ }
74
+
66
75
@Test
67
76
fun `pay offer through the same trampoline node` () = runSuspendTest {
68
77
// Alice and Bob use the same trampoline node.
@@ -276,17 +285,8 @@ class OfferManagerTestsCommon : LightningTestSuite() {
276
285
assertEquals(OfferInvoiceReceived (payOffer, payInvoice.invoice), bobOfferManager.eventsFlow.first())
277
286
assertEquals(payOffer, payInvoice.payOffer)
278
287
279
- val blindedRoute = payInvoice.invoice.blindedPaths.first().route.route
280
- val (firstPayload, secondBlinding) = RouteBlinding .decryptPayload(aliceTrampolineKey, blindedRoute.blindingKey, blindedRoute.encryptedPayloads.first()).right!!
281
- var blinding = secondBlinding
282
- var lastPayload = firstPayload
283
- for (encryptedPayload in blindedRoute.encryptedPayloads.drop(1 )) {
284
- val (payload, nextBlinding) = RouteBlinding .decryptPayload(TestConstants .Alice .nodeParams.nodePrivateKey, blinding, encryptedPayload).right!!
285
- blinding = nextBlinding
286
- lastPayload = payload
287
- }
288
- val pathId = RouteBlindingEncryptedData .read(lastPayload.toByteArray()).right!! .pathId!!
289
- val metadata = OfferPaymentMetadata .fromPathId(TestConstants .Alice .nodeParams.nodeId, pathId) as OfferPaymentMetadata .V1
288
+ // The payer note is correctly included in the payment metadata.
289
+ val metadata = decryptPathId(payInvoice.invoice, aliceTrampolineKey)
290
290
assertEquals(payerNote, metadata.payerNote)
291
291
}
292
292
@@ -314,18 +314,10 @@ class OfferManagerTestsCommon : LightningTestSuite() {
314
314
assertEquals(OfferInvoiceReceived (payOffer, payInvoice.invoice), bobOfferManager.eventsFlow.first())
315
315
assertEquals(payOffer, payInvoice.payOffer)
316
316
317
- val blindedRoute = payInvoice.invoice.blindedPaths.first().route.route
318
- val (firstPayload, secondBlinding) = RouteBlinding .decryptPayload(aliceTrampolineKey, blindedRoute.blindingKey, blindedRoute.encryptedPayloads.first()).right!!
319
- var blinding = secondBlinding
320
- var lastPayload = firstPayload
321
- for (encryptedPayload in blindedRoute.encryptedPayloads.drop(1 )) {
322
- val (payload, nextBlinding) = RouteBlinding .decryptPayload(TestConstants .Alice .nodeParams.nodePrivateKey, blinding, encryptedPayload).right!!
323
- blinding = nextBlinding
324
- lastPayload = payload
325
- }
326
- val pathId = RouteBlindingEncryptedData .read(lastPayload.toByteArray()).right!! .pathId!!
327
- val metadata = OfferPaymentMetadata .fromPathId(TestConstants .Alice .nodeParams.nodeId, pathId) as OfferPaymentMetadata .V1
317
+ // The payer note is truncated in the payment metadata.
318
+ val metadata = decryptPathId(payInvoice.invoice, aliceTrampolineKey)
328
319
assertEquals(64 , metadata.payerNote!! .length)
329
320
assertEquals(payerNote.take(63 ), metadata.payerNote!! .take(63 ))
330
321
}
322
+
331
323
}
0 commit comments