Skip to content

Commit c529c40

Browse files
committed
Make payment_id a required field in Events
The switch to tracking payments by ID happend with LDK Node v0.3.0, which is >1.5 years old by now. We can be pretty certain that nobody is upgrading from an older version to the upcoming v0.8. Here we hence make the `payment_id` fields in `Event` required which is a nice API simplification that will also be utilized in the next commit.
1 parent fbc7f94 commit c529c40

4 files changed

Lines changed: 30 additions & 37 deletions

File tree

bindings/ldk_node.udl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,9 @@ enum VssHeaderProviderError {
413413

414414
[Enum]
415415
interface Event {
416-
PaymentSuccessful(PaymentId? payment_id, PaymentHash payment_hash, PaymentPreimage? payment_preimage, u64? fee_paid_msat);
417-
PaymentFailed(PaymentId? payment_id, PaymentHash? payment_hash, PaymentFailureReason? reason);
418-
PaymentReceived(PaymentId? payment_id, PaymentHash payment_hash, u64 amount_msat, sequence<CustomTlvRecord> custom_records);
416+
PaymentSuccessful(PaymentId payment_id, PaymentHash payment_hash, PaymentPreimage? payment_preimage, u64? fee_paid_msat);
417+
PaymentFailed(PaymentId payment_id, PaymentHash? payment_hash, PaymentFailureReason? reason);
418+
PaymentReceived(PaymentId payment_id, PaymentHash payment_hash, u64 amount_msat, sequence<CustomTlvRecord> custom_records);
419419
PaymentClaimable(PaymentId payment_id, PaymentHash payment_hash, u64 claimable_amount_msat, u32? claim_deadline, sequence<CustomTlvRecord> custom_records);
420420
PaymentForwarded(ChannelId prev_channel_id, ChannelId next_channel_id, UserChannelId?
421421
prev_user_channel_id, UserChannelId? next_user_channel_id, PublicKey? prev_node_id, PublicKey? next_node_id, u64? total_fee_earned_msat, u64? skimmed_fee_msat, boolean claim_from_onchain_tx, u64? outbound_amount_forwarded_msat);

src/event.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ pub enum Event {
6262
/// A sent payment was successful.
6363
PaymentSuccessful {
6464
/// A local identifier used to track the payment.
65-
///
66-
/// Will only be `None` for events serialized with LDK Node v0.2.1 or prior.
67-
payment_id: Option<PaymentId>,
65+
payment_id: PaymentId,
6866
/// The hash of the payment.
6967
payment_hash: PaymentHash,
7068
/// The preimage to the `payment_hash`.
@@ -79,9 +77,7 @@ pub enum Event {
7977
/// A sent payment has failed.
8078
PaymentFailed {
8179
/// A local identifier used to track the payment.
82-
///
83-
/// Will only be `None` for events serialized with LDK Node v0.2.1 or prior.
84-
payment_id: Option<PaymentId>,
80+
payment_id: PaymentId,
8581
/// The hash of the payment.
8682
///
8783
/// This will be `None` if the payment failed before receiving an invoice when paying a
@@ -97,9 +93,7 @@ pub enum Event {
9793
/// A payment has been received.
9894
PaymentReceived {
9995
/// A local identifier used to track the payment.
100-
///
101-
/// Will only be `None` for events serialized with LDK Node v0.2.1 or prior.
102-
payment_id: Option<PaymentId>,
96+
payment_id: PaymentId,
10397
/// The hash of the payment.
10498
payment_hash: PaymentHash,
10599
/// The value, in thousandths of a satoshi, that has been received.
@@ -262,17 +256,17 @@ impl_writeable_tlv_based_enum!(Event,
262256
(0, PaymentSuccessful) => {
263257
(0, payment_hash, required),
264258
(1, fee_paid_msat, option),
265-
(3, payment_id, option),
259+
(3, payment_id, required),
266260
(5, payment_preimage, option),
267261
},
268262
(1, PaymentFailed) => {
269263
(0, payment_hash, option),
270264
(1, reason, upgradable_option),
271-
(3, payment_id, option),
265+
(3, payment_id, required),
272266
},
273267
(2, PaymentReceived) => {
274268
(0, payment_hash, required),
275-
(1, payment_id, option),
269+
(1, payment_id, required),
276270
(2, amount_msat, required),
277271
(3, custom_records, optional_vec),
278272
},
@@ -1002,7 +996,7 @@ where
1002996
}
1003997

1004998
let event = Event::PaymentReceived {
1005-
payment_id: Some(payment_id),
999+
payment_id,
10061000
payment_hash,
10071001
amount_msat,
10081002
custom_records: onion_fields
@@ -1063,7 +1057,7 @@ where
10631057
);
10641058
});
10651059
let event = Event::PaymentSuccessful {
1066-
payment_id: Some(payment_id),
1060+
payment_id,
10671061
payment_hash,
10681062
payment_preimage: Some(payment_preimage),
10691063
fee_paid_msat,
@@ -1098,8 +1092,7 @@ where
10981092
},
10991093
};
11001094

1101-
let event =
1102-
Event::PaymentFailed { payment_id: Some(payment_id), payment_hash, reason };
1095+
let event = Event::PaymentFailed { payment_id, payment_hash, reason };
11031096
match self.event_queue.add_event(event).await {
11041097
Ok(_) => return Ok(()),
11051098
Err(e) => {

tests/common/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ macro_rules! expect_payment_received_event {
122122
ref e @ Event::PaymentReceived { payment_id, amount_msat, .. } => {
123123
println!("{} got event {:?}", $node.node_id(), e);
124124
assert_eq!(amount_msat, $amount_msat);
125-
let payment = $node.payment(&payment_id.unwrap()).unwrap();
125+
let payment = $node.payment(&payment_id).unwrap();
126126
if !matches!(payment.kind, PaymentKind::Onchain { .. }) {
127127
assert_eq!(payment.fee_paid_msat, None);
128128
}
@@ -171,7 +171,7 @@ macro_rules! expect_payment_successful_event {
171171
if let Some(fee_msat) = $fee_paid_msat {
172172
assert_eq!(fee_paid_msat, fee_msat);
173173
}
174-
let payment = $node.payment(&$payment_id.unwrap()).unwrap();
174+
let payment = $node.payment(&$payment_id).unwrap();
175175
assert_eq!(payment.fee_paid_msat, fee_paid_msat);
176176
assert_eq!(payment_id, $payment_id);
177177
$node.event_handled().unwrap();
@@ -973,7 +973,7 @@ pub(crate) async fn do_channel_full_cycle<E: ElectrumApi>(
973973
.claim_for_hash(manual_payment_hash, claimable_amount_msat, manual_preimage)
974974
.unwrap();
975975
expect_payment_received_event!(node_b, claimable_amount_msat);
976-
expect_payment_successful_event!(node_a, Some(manual_payment_id), None);
976+
expect_payment_successful_event!(node_a, manual_payment_id, None);
977977
assert_eq!(node_a.payment(&manual_payment_id).unwrap().status, PaymentStatus::Succeeded);
978978
assert_eq!(node_a.payment(&manual_payment_id).unwrap().direction, PaymentDirection::Outbound);
979979
assert_eq!(

tests/integration_tests_rust.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ async fn run_splice_channel_test(bitcoind_chain_source: bool) {
10281028
let payment_id =
10291029
node_b.spontaneous_payment().send(amount_msat, node_a.node_id(), None).unwrap();
10301030

1031-
expect_payment_successful_event!(node_b, Some(payment_id), None);
1031+
expect_payment_successful_event!(node_b, payment_id, None);
10321032
expect_payment_received_event!(node_a, amount_msat);
10331033

10341034
// Mine a block to give time for the HTLC to resolve
@@ -1123,7 +1123,7 @@ async fn simple_bolt12_send_receive() {
11231123
.send(&offer, expected_quantity, expected_payer_note.clone(), None)
11241124
.unwrap();
11251125

1126-
expect_payment_successful_event!(node_a, Some(payment_id), None);
1126+
expect_payment_successful_event!(node_a, payment_id, None);
11271127
let node_a_payments =
11281128
node_a.list_payments_with_filter(|p| matches!(p.kind, PaymentKind::Bolt12Offer { .. }));
11291129
assert_eq!(node_a_payments.len(), 1);
@@ -1189,7 +1189,7 @@ async fn simple_bolt12_send_receive() {
11891189
)
11901190
.unwrap();
11911191

1192-
expect_payment_successful_event!(node_a, Some(payment_id), None);
1192+
expect_payment_successful_event!(node_a, payment_id, None);
11931193
let node_a_payments = node_a.list_payments_with_filter(|p| {
11941194
matches!(p.kind, PaymentKind::Bolt12Offer { .. }) && p.id == payment_id
11951195
});
@@ -1262,7 +1262,7 @@ async fn simple_bolt12_send_receive() {
12621262
.first()
12631263
.unwrap()
12641264
.id;
1265-
expect_payment_successful_event!(node_b, Some(node_b_payment_id), None);
1265+
expect_payment_successful_event!(node_b, node_b_payment_id, None);
12661266

12671267
let node_b_payments = node_b.list_payments_with_filter(|p| {
12681268
matches!(p.kind, PaymentKind::Bolt12Refund { .. }) && p.id == node_b_payment_id
@@ -1439,7 +1439,7 @@ async fn async_payment() {
14391439

14401440
node_receiver.start().unwrap();
14411441

1442-
expect_payment_successful_event!(node_sender, Some(payment_id), None);
1442+
expect_payment_successful_event!(node_sender, payment_id, None);
14431443
}
14441444

14451445
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
@@ -1647,7 +1647,7 @@ async fn unified_send_receive_bip21_uri() {
16471647
},
16481648
};
16491649

1650-
expect_payment_successful_event!(node_a, Some(offer_payment_id), None);
1650+
expect_payment_successful_event!(node_a, offer_payment_id, None);
16511651

16521652
// Cut off the BOLT12 part to fallback to BOLT11.
16531653
let uri_str_without_offer = uri_str.split("&lno=").next().unwrap();
@@ -1667,7 +1667,7 @@ async fn unified_send_receive_bip21_uri() {
16671667
panic!("Expected Bolt11 payment but got error: {:?}", e);
16681668
},
16691669
};
1670-
expect_payment_successful_event!(node_a, Some(invoice_payment_id), None);
1670+
expect_payment_successful_event!(node_a, invoice_payment_id, None);
16711671

16721672
let expect_onchain_amount_sats = 800_000;
16731673
let onchain_uni_payment =
@@ -1801,9 +1801,9 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) {
18011801

18021802
let service_fee_msat = (jit_amount_msat * channel_opening_fee_ppm as u64) / 1_000_000;
18031803
let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1804-
expect_payment_successful_event!(payer_node, Some(payment_id), None);
1804+
expect_payment_successful_event!(payer_node, payment_id, None);
18051805
let client_payment_id =
1806-
expect_payment_received_event!(client_node, expected_received_amount_msat).unwrap();
1806+
expect_payment_received_event!(client_node, expected_received_amount_msat);
18071807
let client_payment = client_node.payment(&client_payment_id).unwrap();
18081808
match client_payment.kind {
18091809
PaymentKind::Bolt11Jit { counterparty_skimmed_fee_msat, .. } => {
@@ -1830,7 +1830,7 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) {
18301830
// are working as expected.
18311831
println!("Paying regular invoice!");
18321832
let payment_id = payer_node.bolt11_payment().send(&invoice, None).unwrap();
1833-
expect_payment_successful_event!(payer_node, Some(payment_id), None);
1833+
expect_payment_successful_event!(payer_node, payment_id, None);
18341834
expect_event!(service_node, PaymentForwarded);
18351835
expect_payment_received_event!(client_node, amount_msat);
18361836

@@ -1876,9 +1876,9 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) {
18761876
.unwrap();
18771877

18781878
expect_event!(service_node, PaymentForwarded);
1879-
expect_payment_successful_event!(payer_node, Some(payment_id), None);
1879+
expect_payment_successful_event!(payer_node, payment_id, None);
18801880
let client_payment_id =
1881-
expect_payment_received_event!(client_node, expected_received_amount_msat).unwrap();
1881+
expect_payment_received_event!(client_node, expected_received_amount_msat);
18821882
let client_payment = client_node.payment(&client_payment_id).unwrap();
18831883
match client_payment.kind {
18841884
PaymentKind::Bolt11Jit { counterparty_skimmed_fee_msat, .. } => {
@@ -1983,7 +1983,7 @@ async fn spontaneous_send_with_custom_preimage() {
19831983
.unwrap();
19841984

19851985
// check payment status and verify stored preimage
1986-
expect_payment_successful_event!(node_a, Some(payment_id), None);
1986+
expect_payment_successful_event!(node_a, payment_id, None);
19871987
let details: PaymentDetails =
19881988
node_a.list_payments_with_filter(|p| p.id == payment_id).first().unwrap().clone();
19891989
assert_eq!(details.status, PaymentStatus::Succeeded);
@@ -2168,9 +2168,9 @@ async fn lsps2_client_trusts_lsp() {
21682168
.claim_for_hash(manual_payment_hash, jit_amount_msat, manual_preimage)
21692169
.unwrap();
21702170

2171-
expect_payment_successful_event!(payer_node, Some(payment_id), None);
2171+
expect_payment_successful_event!(payer_node, payment_id, None);
21722172

2173-
let _ = expect_payment_received_event!(client_node, expected_received_amount_msat).unwrap();
2173+
let _ = expect_payment_received_event!(client_node, expected_received_amount_msat);
21742174

21752175
// Check the nodes pick up on the confirmed funding tx now.
21762176
wait_for_tx(&electrsd.client, funding_txo.txid).await;

0 commit comments

Comments
 (0)