Skip to content

Commit 9744e8b

Browse files
committed
Provide users the payment metadata via Event::PaymentReceived
1 parent d029c65 commit 9744e8b

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3260,6 +3260,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
32603260
payment_hash,
32613261
purpose: events::PaymentPurpose::InvoicePayment {
32623262
payment_preimage: $payment_preimage,
3263+
payment_metadata: $payment_data.payment_metadata,
32633264
payment_secret: $payment_data.payment_secret,
32643265
},
32653266
amt: total_value,

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8295,10 +8295,11 @@ fn test_secret_timeout() {
82958295
expect_pending_htlcs_forwardable!(nodes[1]);
82968296
let events = nodes[1].node.get_and_clear_pending_events();
82978297
assert_eq!(events.len(), 1);
8298-
match events[0] {
8299-
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret }, .. } => {
8298+
match &events[0] {
8299+
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, payment_metadata }, .. } => {
83008300
assert!(payment_preimage.is_none());
8301-
assert_eq!(payment_secret, our_payment_secret);
8301+
assert!(payment_metadata.is_none());
8302+
assert_eq!(*payment_secret, our_payment_secret);
83028303
// We don't actually have the payment preimage with which to claim this payment!
83038304
},
83048305
_ => panic!("Unexpected event"),

lightning/src/util/events.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ pub enum PaymentPurpose {
6060
/// [`ChannelManager::create_inbound_payment`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment
6161
/// [`ChannelManager::create_inbound_payment_for_hash`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
6262
payment_secret: PaymentSecret,
63+
///XXX
64+
payment_metadata: Option<Vec<u8>>,
6365
},
6466
/// Because this is a spontaneous payment, the payer generated their own preimage rather than us
6567
/// (the payee) providing a preimage.
@@ -417,17 +419,20 @@ impl Writeable for Event {
417419
1u8.write(writer)?;
418420
let mut payment_secret = None;
419421
let payment_preimage;
422+
let mut payment_metadata = None;
420423
match &purpose {
421-
PaymentPurpose::InvoicePayment { payment_preimage: preimage, payment_secret: secret } => {
424+
PaymentPurpose::InvoicePayment { payment_preimage: preimage, payment_secret: secret, payment_metadata: metadata } => {
422425
payment_secret = Some(secret);
423426
payment_preimage = *preimage;
427+
payment_metadata = metadata.as_ref();
424428
},
425429
PaymentPurpose::SpontaneousPayment(preimage) => {
426430
payment_preimage = Some(*preimage);
427431
}
428432
}
429433
write_tlv_fields!(writer, {
430434
(0, payment_hash, required),
435+
(1, payment_metadata, option),
431436
(2, payment_secret, option),
432437
(4, amt, required),
433438
(6, 0u64, required), // user_payment_id required for compatibility with 0.0.103 and earlier
@@ -533,10 +538,12 @@ impl MaybeReadable for Event {
533538
let mut payment_hash = PaymentHash([0; 32]);
534539
let mut payment_preimage = None;
535540
let mut payment_secret = None;
541+
let mut payment_metadata = None;
536542
let mut amt = 0;
537543
let mut _user_payment_id = None::<u64>; // For compatibility with 0.0.103 and earlier
538544
read_tlv_fields!(reader, {
539545
(0, payment_hash, required),
546+
(1, payment_metadata, option),
540547
(2, payment_secret, option),
541548
(4, amt, required),
542549
(6, _user_payment_id, option),
@@ -545,8 +552,10 @@ impl MaybeReadable for Event {
545552
let purpose = match payment_secret {
546553
Some(secret) => PaymentPurpose::InvoicePayment {
547554
payment_preimage,
555+
payment_metadata,
548556
payment_secret: secret
549557
},
558+
None if payment_metadata.is_some() => return Err(msgs::DecodeError::InvalidValue),
550559
None if payment_preimage.is_some() => PaymentPurpose::SpontaneousPayment(payment_preimage.unwrap()),
551560
None => return Err(msgs::DecodeError::InvalidValue),
552561
};

0 commit comments

Comments
 (0)