Skip to content

Commit 9fa0987

Browse files
committed
Provide users the payment metadata via Event::PaymentReceived
1 parent 828f546 commit 9fa0987

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
@@ -3256,6 +3256,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
32563256
payment_hash,
32573257
purpose: events::PaymentPurpose::InvoicePayment {
32583258
payment_preimage: $payment_preimage,
3259+
payment_metadata: $payment_data.payment_metadata,
32593260
payment_secret: $payment_data.payment_secret,
32603261
},
32613262
amt: total_value,

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8278,10 +8278,11 @@ fn test_secret_timeout() {
82788278
expect_pending_htlcs_forwardable!(nodes[1]);
82798279
let events = nodes[1].node.get_and_clear_pending_events();
82808280
assert_eq!(events.len(), 1);
8281-
match events[0] {
8282-
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret }, .. } => {
8281+
match &events[0] {
8282+
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, payment_metadata }, .. } => {
82838283
assert!(payment_preimage.is_none());
8284-
assert_eq!(payment_secret, our_payment_secret);
8284+
assert!(payment_metadata.is_none());
8285+
assert_eq!(*payment_secret, our_payment_secret);
82858286
// We don't actually have the payment preimage with which to claim this payment!
82868287
},
82878288
_ => 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)