Skip to content

Commit de75b4f

Browse files
TheBlueMattandozw
authored andcommitted
Provide users the payment metadata via Event::PaymentReceived
1 parent cb90699 commit de75b4f

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
@@ -3179,6 +3179,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
31793179
payment_hash,
31803180
purpose: events::PaymentPurpose::InvoicePayment {
31813181
payment_preimage: $payment_preimage,
3182+
payment_metadata: $payment_data.payment_metadata,
31823183
payment_secret: $payment_data.payment_secret,
31833184
},
31843185
amt: total_value,

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8456,10 +8456,11 @@ fn test_secret_timeout() {
84568456
expect_pending_htlcs_forwardable!(nodes[1]);
84578457
let events = nodes[1].node.get_and_clear_pending_events();
84588458
assert_eq!(events.len(), 1);
8459-
match events[0] {
8460-
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret }, .. } => {
8459+
match &events[0] {
8460+
Event::PaymentReceived { purpose: PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, payment_metadata }, .. } => {
84618461
assert!(payment_preimage.is_none());
8462-
assert_eq!(payment_secret, our_payment_secret);
8462+
assert!(payment_metadata.is_none());
8463+
assert_eq!(*payment_secret, our_payment_secret);
84638464
// We don't actually have the payment preimage with which to claim this payment!
84648465
},
84658466
_ => 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.
@@ -462,17 +464,20 @@ impl Writeable for Event {
462464
1u8.write(writer)?;
463465
let mut payment_secret = None;
464466
let payment_preimage;
467+
let mut payment_metadata = None;
465468
match &purpose {
466-
PaymentPurpose::InvoicePayment { payment_preimage: preimage, payment_secret: secret } => {
469+
PaymentPurpose::InvoicePayment { payment_preimage: preimage, payment_secret: secret, payment_metadata: metadata } => {
467470
payment_secret = Some(secret);
468471
payment_preimage = *preimage;
472+
payment_metadata = metadata.as_ref();
469473
},
470474
PaymentPurpose::SpontaneousPayment(preimage) => {
471475
payment_preimage = Some(*preimage);
472476
}
473477
}
474478
write_tlv_fields!(writer, {
475479
(0, payment_hash, required),
480+
(1, payment_metadata, option),
476481
(2, payment_secret, option),
477482
(4, amt, required),
478483
(6, 0u64, required), // user_payment_id required for compatibility with 0.0.103 and earlier
@@ -584,10 +589,12 @@ impl MaybeReadable for Event {
584589
let mut payment_hash = PaymentHash([0; 32]);
585590
let mut payment_preimage = None;
586591
let mut payment_secret = None;
592+
let mut payment_metadata = None;
587593
let mut amt = 0;
588594
let mut _user_payment_id = None::<u64>; // For compatibility with 0.0.103 and earlier
589595
read_tlv_fields!(reader, {
590596
(0, payment_hash, required),
597+
(1, payment_metadata, option),
591598
(2, payment_secret, option),
592599
(4, amt, required),
593600
(6, _user_payment_id, option),
@@ -596,8 +603,10 @@ impl MaybeReadable for Event {
596603
let purpose = match payment_secret {
597604
Some(secret) => PaymentPurpose::InvoicePayment {
598605
payment_preimage,
606+
payment_metadata,
599607
payment_secret: secret
600608
},
609+
None if payment_metadata.is_some() => return Err(msgs::DecodeError::InvalidValue),
601610
None if payment_preimage.is_some() => PaymentPurpose::SpontaneousPayment(payment_preimage.unwrap()),
602611
None => return Err(msgs::DecodeError::InvalidValue),
603612
};

0 commit comments

Comments
 (0)