Skip to content

Commit e53c5bd

Browse files
committed
Add source_channel_id in PaymentForwarded event
1 parent 7671ae5 commit e53c5bd

File tree

8 files changed

+57
-23
lines changed

8 files changed

+57
-23
lines changed

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@ fn test_monitor_update_fail_reestablish() {
11021102
assert!(updates.update_fee.is_none());
11031103
assert_eq!(updates.update_fulfill_htlcs.len(), 1);
11041104
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1105-
expect_payment_forwarded!(nodes[1], Some(1000), false);
1105+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), false);
11061106
check_added_monitors!(nodes[1], 1);
11071107
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
11081108
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
@@ -2087,7 +2087,7 @@ fn test_fail_htlc_on_broadcast_after_claim() {
20872087
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &cs_updates.update_fulfill_htlcs[0]);
20882088
let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
20892089
check_added_monitors!(nodes[1], 1);
2090-
expect_payment_forwarded!(nodes[1], Some(1000), false);
2090+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), false);
20912091

20922092
mine_transaction(&nodes[1], &bs_txn[0]);
20932093
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
@@ -2423,7 +2423,7 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f
24232423
let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
24242424

24252425
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
2426-
let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known()).2;
2426+
let chan_id_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known()).2;
24272427

24282428
let (payment_preimage, payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100_000);
24292429

@@ -2450,7 +2450,7 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f
24502450
}
24512451

24522452
let fulfill_msg = msgs::UpdateFulfillHTLC {
2453-
channel_id: chan_2,
2453+
channel_id: chan_id_2,
24542454
htlc_id: 0,
24552455
payment_preimage,
24562456
};
@@ -2468,7 +2468,7 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f
24682468
assert_eq!(fulfill_msg, cs_updates.update_fulfill_htlcs[0]);
24692469
}
24702470
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &fulfill_msg);
2471-
expect_payment_forwarded!(nodes[1], Some(1000), false);
2471+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), false);
24722472
check_added_monitors!(nodes[1], 1);
24732473

24742474
let mut bs_updates = None;

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4291,7 +4291,10 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
42914291
} else { None };
42924292

42934293
let mut pending_events = self.pending_events.lock().unwrap();
4294+
4295+
let source_channel_id = Some(prev_outpoint.to_channel_id());
42944296
pending_events.push(events::Event::PaymentForwarded {
4297+
source_channel_id,
42954298
fee_earned_msat,
42964299
claim_from_onchain_tx: from_onchain,
42974300
});

lightning/src/ln/functional_test_utils.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,12 +1328,16 @@ macro_rules! expect_payment_path_successful {
13281328
}
13291329

13301330
macro_rules! expect_payment_forwarded {
1331-
($node: expr, $expected_fee: expr, $upstream_force_closed: expr) => {
1331+
($node: expr, $source_node: expr, $expected_fee: expr, $upstream_force_closed: expr) => {
13321332
let events = $node.node.get_and_clear_pending_events();
13331333
assert_eq!(events.len(), 1);
13341334
match events[0] {
1335-
Event::PaymentForwarded { fee_earned_msat, claim_from_onchain_tx } => {
1335+
Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx } => {
13361336
assert_eq!(fee_earned_msat, $expected_fee);
1337+
if fee_earned_msat.is_some() {
1338+
// Is the event channel_id in one of the channels between the two nodes?
1339+
assert!($node.node.list_channels().iter().any(|x| x.counterparty.node_id == $source_node.node.get_our_node_id() && x.channel_id == source_channel_id.unwrap()));
1340+
}
13371341
assert_eq!(claim_from_onchain_tx, $upstream_force_closed);
13381342
},
13391343
_ => panic!("Unexpected event"),
@@ -1572,11 +1576,11 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
15721576
}
15731577
}
15741578
macro_rules! mid_update_fulfill_dance {
1575-
($node: expr, $prev_node: expr, $new_msgs: expr) => {
1579+
($node: expr, $prev_node: expr, $next_node: expr, $new_msgs: expr) => {
15761580
{
15771581
$node.node.handle_update_fulfill_htlc(&$prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0);
15781582
let fee = $node.node.channel_state.lock().unwrap().by_id.get(&next_msgs.as_ref().unwrap().0.channel_id).unwrap().config.forwarding_fee_base_msat;
1579-
expect_payment_forwarded!($node, Some(fee as u64), false);
1583+
expect_payment_forwarded!($node, $next_node, Some(fee as u64), false);
15801584
expected_total_fee_msat += fee as u64;
15811585
check_added_monitors!($node, 1);
15821586
let new_next_msgs = if $new_msgs {
@@ -1600,7 +1604,14 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
16001604
assert_eq!(expected_next_node, node.node.get_our_node_id());
16011605
let update_next_msgs = !skip_last || idx != expected_route.len() - 1;
16021606
if next_msgs.is_some() {
1603-
mid_update_fulfill_dance!(node, prev_node, update_next_msgs);
1607+
// Since we are traversing in reverse, next_node is actually the previous node
1608+
let next_node: &Node;
1609+
if idx == expected_route.len() - 1 {
1610+
next_node = origin_node;
1611+
} else {
1612+
next_node = expected_route[expected_route.len() - 1 - idx - 1];
1613+
}
1614+
mid_update_fulfill_dance!(node, prev_node, next_node, update_next_msgs);
16041615
} else {
16051616
assert!(!update_next_msgs);
16061617
assert!(node.node.get_and_clear_pending_msg_events().is_empty());

lightning/src/ln/functional_tests.rs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2684,10 +2684,23 @@ fn test_htlc_on_chain_success() {
26842684
Event::ChannelClosed { reason: ClosureReason::CommitmentTxConfirmed, .. } => {}
26852685
_ => panic!("Unexpected event"),
26862686
}
2687-
if let Event::PaymentForwarded { fee_earned_msat: Some(1000), claim_from_onchain_tx: true } = forwarded_events[1] {
2688-
} else { panic!(); }
2689-
if let Event::PaymentForwarded { fee_earned_msat: Some(1000), claim_from_onchain_tx: true } = forwarded_events[2] {
2690-
} else { panic!(); }
2687+
let chan_id = Some(chan_1.2);
2688+
match forwarded_events[1] {
2689+
Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx } => {
2690+
assert_eq!(fee_earned_msat, Some(1000));
2691+
assert_eq!(source_channel_id, chan_id);
2692+
assert_eq!(claim_from_onchain_tx, true);
2693+
},
2694+
_ => panic!()
2695+
}
2696+
match forwarded_events[2] {
2697+
Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx } => {
2698+
assert_eq!(fee_earned_msat, Some(1000));
2699+
assert_eq!(source_channel_id, chan_id);
2700+
assert_eq!(claim_from_onchain_tx, true);
2701+
},
2702+
_ => panic!()
2703+
}
26912704
let events = nodes[1].node.get_and_clear_pending_msg_events();
26922705
{
26932706
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
@@ -5104,8 +5117,9 @@ fn test_onchain_to_onchain_claim() {
51045117
_ => panic!("Unexpected event"),
51055118
}
51065119
match events[1] {
5107-
Event::PaymentForwarded { fee_earned_msat, claim_from_onchain_tx } => {
5120+
Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx } => {
51085121
assert_eq!(fee_earned_msat, Some(1000));
5122+
assert_eq!(source_channel_id, Some(chan_1.2));
51095123
assert_eq!(claim_from_onchain_tx, true);
51105124
},
51115125
_ => panic!("Unexpected event"),
@@ -5271,7 +5285,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
52715285
// Note that the fee paid is effectively double as the HTLC value (including the nodes[1] fee
52725286
// and nodes[2] fee) is rounded down and then claimed in full.
52735287
mine_transaction(&nodes[1], &htlc_success_txn[0]);
5274-
expect_payment_forwarded!(nodes[1], Some(196*2), true);
5288+
expect_payment_forwarded!(nodes[1], nodes[0], Some(196*2), true);
52755289
let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
52765290
assert!(updates.update_add_htlcs.is_empty());
52775291
assert!(updates.update_fail_htlcs.is_empty());
@@ -8849,7 +8863,7 @@ fn do_test_onchain_htlc_settlement_after_close(broadcast_alice: bool, go_onchain
88498863
assert_eq!(carol_updates.update_fulfill_htlcs.len(), 1);
88508864

88518865
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &carol_updates.update_fulfill_htlcs[0]);
8852-
expect_payment_forwarded!(nodes[1], if go_onchain_before_fulfill || force_closing_node == 1 { None } else { Some(1000) }, false);
8866+
expect_payment_forwarded!(nodes[1], nodes[0], if go_onchain_before_fulfill || force_closing_node == 1 { None } else { Some(1000) }, false);
88538867
// If Alice broadcasted but Bob doesn't know yet, here he prepares to tell her about the preimage.
88548868
if !go_onchain_before_fulfill && broadcast_alice {
88558869
let events = nodes[1].node.get_and_clear_pending_msg_events();

lightning/src/ln/payment_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) {
495495
let bs_htlc_claim_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
496496
assert_eq!(bs_htlc_claim_txn.len(), 1);
497497
check_spends!(bs_htlc_claim_txn[0], as_commitment_tx);
498-
expect_payment_forwarded!(nodes[1], None, false);
498+
expect_payment_forwarded!(nodes[1], nodes[0], None, false);
499499

500500
if !confirm_before_reload {
501501
mine_transaction(&nodes[0], &as_commitment_tx);

lightning/src/ln/reorg_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) {
138138
// ChannelManager only polls chain::Watch::release_pending_monitor_events when we
139139
// probe it for events, so we probe non-message events here (which should just be the
140140
// PaymentForwarded event).
141-
expect_payment_forwarded!(nodes[1], Some(1000), true);
141+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), true);
142142
} else {
143143
// Confirm the timeout tx and check that we fail the HTLC backwards
144144
let block = Block {

lightning/src/ln/shutdown_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ fn updates_shutdown_wait() {
110110
assert!(updates.update_fee.is_none());
111111
assert_eq!(updates.update_fulfill_htlcs.len(), 1);
112112
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
113-
expect_payment_forwarded!(nodes[1], Some(1000), false);
113+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), false);
114114
check_added_monitors!(nodes[1], 1);
115115
let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
116116
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
@@ -279,7 +279,7 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
279279
assert!(updates.update_fee.is_none());
280280
assert_eq!(updates.update_fulfill_htlcs.len(), 1);
281281
nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
282-
expect_payment_forwarded!(nodes[1], Some(1000), false);
282+
expect_payment_forwarded!(nodes[1], nodes[0], Some(1000), false);
283283
check_added_monitors!(nodes[1], 1);
284284
let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
285285
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);

lightning/src/util/events.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,9 @@ pub enum Event {
343343
/// This event is generated when a payment has been successfully forwarded through us and a
344344
/// forwarding fee earned.
345345
PaymentForwarded {
346+
/// The channel between the source node and us. Optional because versions prior to 0.0.107
347+
/// do not serialize this field.
348+
source_channel_id: Option<[u8; 32]>,
346349
/// The fee, in milli-satoshis, which was earned as a result of the payment.
347350
///
348351
/// Note that if we force-closed the channel over which we forwarded an HTLC while the HTLC
@@ -520,10 +523,11 @@ impl Writeable for Event {
520523
(0, VecWriteWrapper(outputs), required),
521524
});
522525
},
523-
&Event::PaymentForwarded { fee_earned_msat, claim_from_onchain_tx } => {
526+
&Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx } => {
524527
7u8.write(writer)?;
525528
write_tlv_fields!(writer, {
526529
(0, fee_earned_msat, option),
530+
(1, source_channel_id, option),
527531
(2, claim_from_onchain_tx, required),
528532
});
529533
},
@@ -684,12 +688,14 @@ impl MaybeReadable for Event {
684688
7u8 => {
685689
let f = || {
686690
let mut fee_earned_msat = None;
691+
let mut source_channel_id = None;
687692
let mut claim_from_onchain_tx = false;
688693
read_tlv_fields!(reader, {
689694
(0, fee_earned_msat, option),
695+
(1, source_channel_id, option),
690696
(2, claim_from_onchain_tx, required),
691697
});
692-
Ok(Some(Event::PaymentForwarded { fee_earned_msat, claim_from_onchain_tx }))
698+
Ok(Some(Event::PaymentForwarded { fee_earned_msat, source_channel_id, claim_from_onchain_tx }))
693699
};
694700
f()
695701
},

0 commit comments

Comments
 (0)