From 80965fa6cf60632eff0a48724fa14565f6686cf1 Mon Sep 17 00:00:00 2001 From: elnosh Date: Mon, 10 Nov 2025 13:04:47 -0500 Subject: [PATCH 1/5] Replace `commitment_signed_dance` for skip_last_step=false Replace calls to `commitment_signed_dance` macro when skip_last_step=false to instead call `do_commitment_signed_dance`. --- lightning-dns-resolver/src/lib.rs | 6 +- .../src/upgrade_downgrade_tests.rs | 5 +- lightning/src/ln/blinded_payment_tests.rs | 2 +- lightning/src/ln/bolt11_payment_tests.rs | 4 +- lightning/src/ln/chanmon_update_fail_tests.rs | 50 +++++------ lightning/src/ln/channelmanager.rs | 10 +-- lightning/src/ln/functional_test_utils.rs | 48 ++++------ lightning/src/ln/functional_tests.rs | 88 +++++++++++------- lightning/src/ln/htlc_reserve_unit_tests.rs | 13 +-- lightning/src/ln/monitor_tests.rs | 8 +- lightning/src/ln/onion_route_tests.rs | 23 ++--- lightning/src/ln/payment_tests.rs | 89 +++++++++++-------- lightning/src/ln/priv_short_conf_tests.rs | 4 +- lightning/src/ln/quiescence_tests.rs | 6 +- lightning/src/ln/reload_tests.rs | 10 +-- lightning/src/ln/shutdown_tests.rs | 10 +-- lightning/src/ln/splicing_tests.rs | 15 ++-- lightning/src/ln/update_fee_tests.rs | 12 +-- 18 files changed, 216 insertions(+), 187 deletions(-) diff --git a/lightning-dns-resolver/src/lib.rs b/lightning-dns-resolver/src/lib.rs index f5b1d53fc8a..8d470984f42 100644 --- a/lightning-dns-resolver/src/lib.rs +++ b/lightning-dns-resolver/src/lib.rs @@ -180,7 +180,7 @@ mod test { use lightning::types::payment::PaymentHash; use lightning::util::logger::Logger; - use lightning::{commitment_signed_dance, expect_payment_claimed, get_htlc_update_msgs}; + use lightning::{expect_payment_claimed, get_htlc_update_msgs}; use lightning_types::string::UntrustedString; use std::ops::Deref; @@ -418,7 +418,7 @@ mod test { check_added_monitors(&nodes[0], 1); let updates = get_htlc_update_msgs!(nodes[0], payee_id); nodes[1].node.handle_update_add_htlc(payer_id, &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); let claimable_events = nodes[1].node.get_and_clear_pending_events(); @@ -452,7 +452,7 @@ mod test { check_added_monitors(&nodes[1], 1); let mut updates = get_htlc_update_msgs!(nodes[1], payer_id); nodes[0].node.handle_update_fulfill_htlc(payee_id, updates.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_sent(&nodes[0], our_payment_preimage, None, true, true); } diff --git a/lightning-tests/src/upgrade_downgrade_tests.rs b/lightning-tests/src/upgrade_downgrade_tests.rs index d1153b7a8fa..032d61d061d 100644 --- a/lightning-tests/src/upgrade_downgrade_tests.rs +++ b/lightning-tests/src/upgrade_downgrade_tests.rs @@ -477,14 +477,15 @@ fn do_test_0_1_htlc_forward_after_splice(fail_htlc: bool) { let updates = get_htlc_update_msgs(&nodes[1], &node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); let conditions = PaymentFailedConditions::new(); expect_payment_failed_conditions(&nodes[0], pay_hash, false, conditions); } else { check_added_monitors(&nodes[1], 1); let forward_event = SendEvent::from_node(&nodes[1]); nodes[2].node.handle_update_add_htlc(node_b_id, &forward_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], forward_event.commitment_msg, false); + let commitment = &forward_event.commitment_msg; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, false); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(nodes[2], pay_hash, pay_secret, 1_000_000); diff --git a/lightning/src/ln/blinded_payment_tests.rs b/lightning/src/ln/blinded_payment_tests.rs index 8959e347bf7..79db0bf1817 100644 --- a/lightning/src/ln/blinded_payment_tests.rs +++ b/lightning/src/ln/blinded_payment_tests.rs @@ -1452,7 +1452,7 @@ fn fails_receive_tlvs_authentication() { assert!(update_fail.update_fail_htlcs.len() == 1); let fail_msg = &update_fail.update_fail_htlcs[0]; nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_fail.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_fail.commitment_signed, false, false); expect_payment_failed_conditions( &nodes[0], payment_hash, true, PaymentFailedConditions::new().expected_htlc_error_data(LocalHTLCFailureReason::InvalidOnionPayload, &[]), diff --git a/lightning/src/ln/bolt11_payment_tests.rs b/lightning/src/ln/bolt11_payment_tests.rs index c24d5b2714e..63c5576e333 100644 --- a/lightning/src/ln/bolt11_payment_tests.rs +++ b/lightning/src/ln/bolt11_payment_tests.rs @@ -76,7 +76,7 @@ fn payment_metadata_end_to_end_for_invoice_with_amount() { check_added_monitors(&nodes[0], 1); let send_event = SendEvent::from_node(&nodes[0]); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); @@ -144,7 +144,7 @@ fn payment_metadata_end_to_end_for_invoice_with_no_amount() { check_added_monitors(&nodes[0], 1); let send_event = SendEvent::from_node(&nodes[0]); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); diff --git a/lightning/src/ln/chanmon_update_fail_tests.rs b/lightning/src/ln/chanmon_update_fail_tests.rs index 1a9af4f2071..d6dd759464f 100644 --- a/lightning/src/ln/chanmon_update_fail_tests.rs +++ b/lightning/src/ln/chanmon_update_fail_tests.rs @@ -220,7 +220,7 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) { let payment_event = SendEvent::from_event(events_2.pop().unwrap()); assert_eq!(payment_event.node_id, node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); @@ -1021,7 +1021,7 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) { let mut send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors!(nodes[1], 0); @@ -1131,7 +1131,7 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) { // Now deliver the new messages... nodes[0].node.handle_update_fail_htlc(node_b_id, &messages_a.0); - commitment_signed_dance!(nodes[0], nodes[1], messages_a.1, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &messages_a.1, false, false); expect_payment_failed!(nodes[0], payment_hash_1, true); nodes[2].node.handle_update_add_htlc(node_b_id, &send_event_b.msgs[0]); @@ -1244,7 +1244,7 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) { assert_eq!(send_event.node_id, node_a_id); assert_eq!(send_event.msgs.len(), 1); nodes[0].node.handle_update_add_htlc(node_b_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[0], nodes[1], send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[0], false); @@ -1305,7 +1305,7 @@ fn test_monitor_update_fail_reestablish() { expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false); check_added_monitors!(nodes[1], 1); assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty()); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &updates.commitment_signed, false, false); chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress); let init_msg = msgs::Init { @@ -1364,7 +1364,7 @@ fn test_monitor_update_fail_reestablish() { assert!(updates.update_fee.is_none()); assert_eq!(updates.update_fulfill_htlcs.len(), 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_sent!(nodes[0], payment_preimage); } @@ -1900,7 +1900,7 @@ fn test_monitor_update_fail_claim() { let mut bs_fulfill = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fulfill_htlc(node_b_id, bs_fulfill.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], bs_fulfill.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_fulfill.commitment_signed, false, false); expect_payment_sent!(nodes[0], payment_preimage_1); // Get the payment forwards, note that they were batched into one commitment update. @@ -1909,7 +1909,8 @@ fn test_monitor_update_fail_claim() { let bs_forward_update = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_add_htlc(node_b_id, &bs_forward_update.update_add_htlcs[0]); nodes[0].node.handle_update_add_htlc(node_b_id, &bs_forward_update.update_add_htlcs[1]); - commitment_signed_dance!(nodes[0], nodes[1], bs_forward_update.commitment_signed, false); + let commitment = &bs_forward_update.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_and_process_pending_htlcs(&nodes[0], false); let events = nodes[0].node.get_and_clear_pending_events(); @@ -2011,7 +2012,7 @@ fn test_monitor_update_on_pending_forwards() { assert_eq!(events.len(), 1); let payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_c_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &payment_event.commitment_msg, false, false); chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress); expect_and_process_pending_htlcs_and_htlc_handling_failed( @@ -2105,7 +2106,7 @@ fn monitor_update_claim_fail_no_response() { let mut bs_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fulfill_htlc(node_b_id, bs_updates.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_updates.commitment_signed, false, false); expect_payment_sent!(nodes[0], payment_preimage_1); claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2); @@ -2633,7 +2634,8 @@ fn do_update_fee_resend_test(deliver_update: bool, parallel_updates: bool) { nodes[1].node.handle_revoke_and_ack(node_a_id, &as_second_raa); check_added_monitors!(nodes[1], 1); } else { - commitment_signed_dance!(nodes[1], nodes[0], update_msgs.commitment_signed, false); + let commitment = &update_msgs.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); } send_payment(&nodes[0], &[&nodes[1]], 1000); @@ -2947,12 +2949,8 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f ); expect_payment_sent(&nodes[0], payment_preimage, None, false, false); if htlc_status == HTLCStatusAtDupClaim::Cleared { - commitment_signed_dance!( - nodes[0], - nodes[1], - &bs_updates.as_ref().unwrap().commitment_signed, - false - ); + let commitment = &bs_updates.as_ref().unwrap().commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_payment_path_successful!(nodes[0]); } } else { @@ -2990,12 +2988,8 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f expect_payment_sent(&nodes[0], payment_preimage, None, false, false); } if htlc_status != HTLCStatusAtDupClaim::Cleared { - commitment_signed_dance!( - nodes[0], - nodes[1], - &bs_updates.as_ref().unwrap().commitment_signed, - false - ); + let commitment = &bs_updates.as_ref().unwrap().commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_payment_path_successful!(nodes[0]); } } @@ -3212,7 +3206,7 @@ fn double_temp_error() { nodes[0].node.handle_update_fulfill_htlc(node_b_id, update_fulfill_2); check_added_monitors!(nodes[0], 0); assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty()); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed_b2, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &commitment_signed_b2, false, false); expect_payment_sent!(nodes[0], payment_preimage_2); } @@ -4139,7 +4133,8 @@ fn do_test_glacial_peer_cant_hang(hold_chan_a: bool) { let mut bs_updates = get_htlc_update_msgs(&nodes[1], &node_a_id); let mut update_fulfill = bs_updates.update_fulfill_htlcs.remove(0); nodes[0].node.handle_update_fulfill_htlc(node_b_id, update_fulfill); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false); + let commitment = &bs_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_payment_sent!(&nodes[0], payment_preimage); } @@ -4208,7 +4203,8 @@ fn do_test_glacial_peer_cant_hang(hold_chan_a: bool) { let update_fulfill = a_update[0].update_fulfill_htlcs[0].clone(); nodes[0].node.handle_update_fulfill_htlc(node_b_id, update_fulfill); - commitment_signed_dance!(nodes[0], nodes[1], a_update[0].commitment_signed, false); + let commitment = &a_update[0].commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_payment_sent(&nodes[0], payment_preimage, None, true, true); expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false); @@ -4519,7 +4515,7 @@ fn test_claim_to_closed_channel_blocks_forwarded_preimage_removal() { chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress); nodes[1].node.handle_update_fulfill_htlc(node_c_id, updates.update_fulfill_htlcs.remove(0)); check_added_monitors!(nodes[1], 1); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &updates.commitment_signed, false, false); // At this point nodes[1] has the preimage and is waiting for the `ChannelMonitorUpdate` for // channel A to hit disk. Until it does so, it shouldn't ever let the preimage dissapear from diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 644920557d2..58ca37d7f48 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -18553,7 +18553,7 @@ mod tests { let payment_event = SendEvent::from_event(ev); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], true); let events = nodes[1].node.get_and_clear_pending_events(); let fail = HTLCHandlingFailureType::Receive { payment_hash: our_payment_hash }; @@ -18671,7 +18671,7 @@ mod tests { let payment_event = SendEvent::from_event(ev); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); // We have to forward pending HTLCs twice - once tries to forward the payment forward (and // fails), the second will process the resulting failure and fail the HTLC backward expect_and_process_pending_htlcs(&nodes[1], true); @@ -18720,7 +18720,7 @@ mod tests { let payment_event = SendEvent::from_event(ev); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], true); let events = nodes[1].node.get_and_clear_pending_events(); let fail = HTLCHandlingFailureType::Receive { payment_hash }; @@ -18769,7 +18769,7 @@ mod tests { let payment_event = SendEvent::from_event(ev); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], true); let events = nodes[1].node.get_and_clear_pending_events(); let fail = HTLCHandlingFailureType::Receive { payment_hash }; @@ -18829,7 +18829,7 @@ mod tests { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!(nodes[1].node.get_and_clear_pending_events(), &[HTLCHandlingFailureType::Receive { payment_hash: mismatch_payment_hash }]); check_added_monitors(&nodes[1], 1); diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index 271d458bcc8..4d45dc64df5 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -2686,15 +2686,6 @@ macro_rules! commitment_signed_dance { ) .is_none()); }; - ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr) => { - $crate::ln::functional_test_utils::do_commitment_signed_dance( - &$node_a, - &$node_b, - &$commitment_signed, - $fail_backwards, - false, - ); - }; } /// Runs the commitment_signed dance after the initial commitment_signed is delivered through to @@ -3499,7 +3490,8 @@ fn fail_payment_along_path<'a, 'b, 'c>(expected_path: &[&Node<'a, 'b, 'c>]) { let is_first_hop = origin_node_id == prev_node.node.get_our_node_id(); // We do not want to fail backwards on the first hop. All other hops should fail backwards. - commitment_signed_dance!(prev_node, node, updates.commitment_signed, !is_first_hop); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(prev_node, node, commitment, !is_first_hop, false); } } @@ -3609,7 +3601,8 @@ pub fn do_pass_along_path<'a, 'b, 'c>(args: PassAlongPathArgs) -> Option node.node.process_pending_htlc_forwards(); check_added_monitors(node, 1); } else { - commitment_signed_dance!(node, prev_node, payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(node, prev_node, commitment, false, false); node.node.process_pending_htlc_forwards(); } @@ -4003,7 +3996,8 @@ pub fn pass_claimed_payment_along_route(args: ClaimAlongRouteArgs) -> u64 { ); check_added_monitors!($node, 0); assert!($node.node.get_and_clear_pending_msg_events().is_empty()); - commitment_signed_dance!($node, $prev_node, next_msgs.as_ref().unwrap().1, false); + let commitment = &next_msgs.as_ref().unwrap().1; + do_commitment_signed_dance($node, $prev_node, commitment, false, false); }}; } macro_rules! mid_update_fulfill_dance { @@ -4076,7 +4070,8 @@ pub fn pass_claimed_payment_along_route(args: ClaimAlongRouteArgs) -> u64 { assert!($node.node.get_and_clear_pending_msg_events().is_empty()); None }; - commitment_signed_dance!($node, $prev_node, next_msgs.as_ref().unwrap().1, false); + let commitment = &next_msgs.as_ref().unwrap().1; + do_commitment_signed_dance($node, $prev_node, commitment, false, false); next_msgs = new_next_msgs; }}; } @@ -4264,12 +4259,8 @@ pub fn pass_failed_payment_back<'a, 'b, 'c>( prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0, ); - commitment_signed_dance!( - node, - prev_node, - next_msgs.as_ref().unwrap().1, - update_next_node - ); + let commitment = &next_msgs.as_ref().unwrap().1; + do_commitment_signed_dance(node, prev_node, commitment, update_next_node, false); if !update_next_node { expect_and_process_pending_htlcs_and_htlc_handling_failed( &node, @@ -4326,7 +4317,8 @@ pub fn pass_failed_payment_back<'a, 'b, 'c>( ); check_added_monitors!(origin_node, 0); assert!(origin_node.node.get_and_clear_pending_msg_events().is_empty()); - commitment_signed_dance!(origin_node, prev_node, next_msgs.as_ref().unwrap().1, false); + let commitment = &next_msgs.as_ref().unwrap().1; + do_commitment_signed_dance(origin_node, prev_node, commitment, false, false); let events = origin_node.node.get_and_clear_pending_events(); if i == expected_paths.len() - 1 { assert_eq!(events.len(), 2); @@ -5366,12 +5358,8 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) { } if !pending_responding_commitment_signed.0 { - commitment_signed_dance!( - node_a, - node_b, - commitment_update.commitment_signed, - false - ); + let commitment = &commitment_update.commitment_signed; + do_commitment_signed_dance(node_a, node_b, commitment, false, false); } else { node_a.node.handle_commitment_signed_batch_test( node_b_id, @@ -5484,12 +5472,8 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) { } if !pending_responding_commitment_signed.1 { - commitment_signed_dance!( - node_b, - node_a, - commitment_update.commitment_signed, - false - ); + let commitment = &commitment_update.commitment_signed; + do_commitment_signed_dance(node_b, node_a, commitment, false, false); } else { node_b.node.handle_commitment_signed_batch_test( node_a_id, diff --git a/lightning/src/ln/functional_tests.rs b/lightning/src/ln/functional_tests.rs index c161a9664c0..9fd5470ab3d 100644 --- a/lightning/src/ln/functional_tests.rs +++ b/lightning/src/ln/functional_tests.rs @@ -486,7 +486,7 @@ fn do_test_fail_back_before_backwards_timeout(post_fail_back_action: PostFailBac let msgs::CommitmentUpdate { update_fail_htlcs, commitment_signed, .. } = htlc_updates; nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &commitment_signed, false, false); let conditions = PaymentFailedConditions::new().blamed_chan_closed(true); expect_payment_failed_conditions(&nodes[0], payment_hash, false, conditions); @@ -1334,7 +1334,7 @@ pub fn do_test_multiple_package_conflicts(p2a_anchor: bool) { }; assert_eq!(updates.update_fulfill_htlcs.len(), 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_sent!(nodes[0], preimage_2); let mut events = nodes[1].node.get_and_clear_pending_events(); @@ -2379,7 +2379,7 @@ pub fn test_force_close_fail_back() { }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); @@ -3319,7 +3319,8 @@ fn do_test_htlc_timeout(send_partial_mpp: bool) { assert!(htlc_timeout_updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_timeout_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], htlc_timeout_updates.commitment_signed, false); + let commitment = &htlc_timeout_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); // 100_000 msat as u64, followed by the height at which we failed back above let mut expected_failure_data = (100_000 as u64).to_be_bytes().to_vec(); expected_failure_data.extend_from_slice(&(block_count - 1).to_be_bytes()); @@ -3374,7 +3375,8 @@ fn do_test_holding_cell_htlc_add_timeouts(forwarded_htlc: bool) { let payment_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[1], false); } check_added_monitors(&nodes[1], 0); @@ -4130,7 +4132,7 @@ pub fn test_duplicate_payment_hash_one_failure_one_success() { let _cs_updates = get_htlc_update_msgs!(nodes[2], node_b_id); expect_payment_forwarded!(nodes[2], nodes[1], nodes[4], Some(196), false, false); check_added_monitors(&nodes[2], 1); - commitment_signed_dance!(nodes[2], nodes[4], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[2], &nodes[4], &updates.commitment_signed, false, false); // Mine the commitment transaction on node C and get the HTLC success transactions it will // generate (note that the ChannelMonitor doesn't differentiate between HTLCs once it has the @@ -4207,7 +4209,7 @@ pub fn test_duplicate_payment_hash_one_failure_one_success() { check_added_monitors(&nodes[1], 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_sent(&nodes[0], our_payment_preimage, None, true, true); } @@ -4407,7 +4409,7 @@ fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, anno nodes[3].node.handle_update_fail_htlc(node_e_id, &four_removes.update_fail_htlcs[1]); nodes[3].node.handle_update_fail_htlc(node_e_id, &four_removes.update_fail_htlcs[2]); nodes[3].node.handle_update_fail_htlc(node_e_id, &four_removes.update_fail_htlcs[3]); - commitment_signed_dance!(nodes[3], nodes[4], four_removes.commitment_signed, false); + do_commitment_signed_dance(&nodes[3], &nodes[4], &four_removes.commitment_signed, false, false); // Fail 3rd below-dust and 7th above-dust HTLCs nodes[5].node.fail_htlc_backwards(&hash_2); @@ -4424,7 +4426,7 @@ fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, anno let two_removes = get_htlc_update_msgs!(nodes[5], node_d_id); nodes[3].node.handle_update_fail_htlc(node_f_id, &two_removes.update_fail_htlcs[0]); nodes[3].node.handle_update_fail_htlc(node_f_id, &two_removes.update_fail_htlcs[1]); - commitment_signed_dance!(nodes[3], nodes[5], two_removes.commitment_signed, false); + do_commitment_signed_dance(&nodes[3], &nodes[5], &two_removes.commitment_signed, false, false); let ds_prev_commitment_tx = get_local_commitment_txn!(nodes[3], chan_2_3.2); @@ -4447,7 +4449,8 @@ fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, anno nodes[2].node.handle_update_fail_htlc(node_d_id, &six_removes.update_fail_htlcs[4]); nodes[2].node.handle_update_fail_htlc(node_d_id, &six_removes.update_fail_htlcs[5]); if deliver_last_raa { - commitment_signed_dance!(nodes[2], nodes[3], six_removes.commitment_signed, false); + let commitment = &six_removes.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, false); } else { let cs = six_removes.commitment_signed; commitment_signed_dance!(nodes[2], nodes[3], cs, false, true, false, true); @@ -5297,7 +5300,7 @@ pub fn test_free_and_fail_holding_cell_htlcs() { nodes[1].node.handle_revoke_and_ack(node_a_id, &raa); check_added_monitors(&nodes[1], 1); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); nodes[1].node.process_pending_htlc_forwards(); let events = nodes[1].node.get_and_clear_pending_events(); assert_eq!(events.len(), 1); @@ -5385,7 +5388,7 @@ pub fn test_fail_holding_cell_htlc_upon_free_multihop() { }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); chan_stat = get_channel_value_stat!(nodes[1], nodes[2], chan_1_2.2); @@ -5491,7 +5494,7 @@ pub fn test_update_fulfill_htlc_bolt2_after_malformed_htlc_message_must_forward_ }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events(); assert_eq!(events_2.len(), 1); @@ -5602,7 +5605,7 @@ pub fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() { }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors(&nodes[1], 1); payment_event = SendEvent::from_node(&nodes[1]); @@ -5945,7 +5948,7 @@ pub fn test_check_htlc_underpaying() { assert_eq!(events.len(), 1); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); // Note that we first have to wait a random delay before processing the receipt of the HTLC, // and then will wait a second random delay before failing the HTLC back: @@ -6935,7 +6938,7 @@ pub fn test_onion_value_mpp_set_calculation() { node.node.handle_update_add_htlc(prev_node.node.get_our_node_id(), &payment_event.msgs[0]); check_added_monitors(&node, 0); - commitment_signed_dance!(node, prev_node, payment_event.commitment_msg, false); + do_commitment_signed_dance(&node, &prev_node, &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&node, false); if idx == 0 { @@ -7108,7 +7111,8 @@ pub fn test_preimage_storage() { let mut events = nodes[0].node.get_and_clear_pending_msg_events(); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); } // Note that after leaving the above scope we have no knowledge of any arguments or return // values from previous calls. @@ -7153,7 +7157,8 @@ pub fn test_bad_secret_hash() { let mut events = nodes[0].node.get_and_clear_pending_msg_events(); let payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); // We have to forward pending HTLCs once to process the receipt of the HTLC and then // again to process the pending backwards-failure of the HTLC @@ -7172,7 +7177,13 @@ pub fn test_bad_secret_hash() { updates: msgs::CommitmentUpdate { update_fail_htlcs, commitment_signed, .. }, } => { nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false); + do_commitment_signed_dance( + &nodes[0], + &nodes[1], + &commitment_signed, + false, + false, + ); }, _ => panic!("Unexpected event"), } @@ -8167,7 +8178,8 @@ fn do_test_dup_htlc_second_rejected(test_for_second_fail_panic: bool) { assert_eq!(events.len(), 1); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); } expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], our_payment_hash, our_payment_secret, 10_000); @@ -8182,7 +8194,8 @@ fn do_test_dup_htlc_second_rejected(test_for_second_fail_panic: bool) { assert_eq!(events.len(), 1); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); // At this point, nodes[1] would notice it has too much value for the payment. It will // assume the second is a privacy attack (no longer particularly relevant // post-payment_secrets) and fail back the new HTLC. Previously, it'd also have failed back @@ -8212,7 +8225,8 @@ fn do_test_dup_htlc_second_rejected(test_for_second_fail_panic: bool) { nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_updates_1.update_fail_htlcs[0]); nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_updates_1.update_fail_htlcs[1]); - commitment_signed_dance!(nodes[0], nodes[1], fail_updates_1.commitment_signed, false); + let commitment = &fail_updates_1.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let failure_events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(failure_events.len(), 4); @@ -8243,7 +8257,8 @@ fn do_test_dup_htlc_second_rejected(test_for_second_fail_panic: bool) { check_added_monitors(&nodes[1], 1); let fail_updates_1 = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_updates_1.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], fail_updates_1.commitment_signed, false); + let commitment = &fail_updates_1.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let conditions = PaymentFailedConditions::new(); expect_payment_failed_conditions(&nodes[0], our_payment_hash, true, conditions); @@ -8347,7 +8362,8 @@ pub fn test_inconsistent_mpp_params() { let payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[2].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[2], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[2], false); check_added_monitors(&nodes[2], 1); @@ -8374,7 +8390,8 @@ pub fn test_inconsistent_mpp_params() { let fail_updates_1 = get_htlc_update_msgs!(nodes[3], node_c_id); nodes[2].node.handle_update_fail_htlc(node_d_id, &fail_updates_1.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[3], fail_updates_1.commitment_signed, false); + let commitment = &fail_updates_1.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, false); expect_and_process_pending_htlcs_and_htlc_handling_failed( &nodes[2], @@ -8384,7 +8401,8 @@ pub fn test_inconsistent_mpp_params() { let fail_updates_2 = get_htlc_update_msgs!(nodes[2], node_a_id); nodes[0].node.handle_update_fail_htlc(node_c_id, &fail_updates_2.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], fail_updates_2.commitment_signed, false); + let commitment = &fail_updates_2.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[2], commitment, false, false); let conditions = PaymentFailedConditions::new().mpp_parts_remain(); expect_payment_failed_conditions(&nodes[0], hash, true, conditions); @@ -8717,7 +8735,8 @@ fn do_test_max_dust_htlc_exposure( assert_eq!(events.len(), 1); let payment_event = SendEvent::from_event(events.remove(0)); nodes[0].node.handle_update_add_htlc(node_b_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[0], nodes[1], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); expect_and_process_pending_htlcs(&nodes[0], false); expect_htlc_handling_failed_destinations!( nodes[0].node.get_and_clear_pending_events(), @@ -8984,7 +9003,7 @@ pub fn test_nondust_htlc_excess_fees_are_dust() { assert_eq!(events.len(), 1); let payment_event = SendEvent::from_event(events.remove(0)); nodes[0].node.handle_update_add_htlc(node_b_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[0], nodes[1], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[0], false); expect_htlc_handling_failed_destinations!( nodes[0].node.get_and_clear_pending_events(), @@ -9003,7 +9022,7 @@ pub fn test_nondust_htlc_excess_fees_are_dust() { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[1].node.handle_update_fail_htlc(node_a_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_payment_failed!(nodes[1], payment_hash, false); assert_eq!(nodes[0].node.list_channels().len(), 1); @@ -9048,7 +9067,7 @@ pub fn test_nondust_htlc_excess_fees_are_dust() { let fail = get_htlc_update_msgs(&nodes[0], &node_c_id); nodes[2].node.handle_update_fail_htlc(node_a_id, &fail.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[0], fail.commitment_signed, false); + do_commitment_signed_dance(&nodes[2], &nodes[0], &fail.commitment_signed, false, false); let conditions = PaymentFailedConditions::new(); expect_payment_failed_conditions(&nodes[2], payment_hash, false, conditions); } @@ -9160,7 +9179,7 @@ fn do_test_nondust_htlc_fees_dust_exposure_delta(features: ChannelTypeFeatures) assert_eq!(events.len(), 1); let payment_event = SendEvent::from_event(events.remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -9179,7 +9198,7 @@ fn do_test_nondust_htlc_fees_dust_exposure_delta(features: ChannelTypeFeatures) assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_failed!(nodes[0], payment_hash, false); assert_eq!(nodes[0].node.list_channels().len(), 1); @@ -9324,7 +9343,7 @@ fn do_payment_with_custom_min_final_cltv_expiry(valid_delta: bool, use_user_hash assert_eq!(events.len(), 1); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); if valid_delta { expect_and_process_pending_htlcs(&nodes[1], false); @@ -9785,7 +9804,8 @@ fn do_test_multi_post_event_actions(do_reload: bool) { nodes[0] .node .handle_update_fulfill_htlc(dest_node_id, htlc_fulfill.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[*dest], htlc_fulfill.commitment_signed, false); + let commitment = &htlc_fulfill.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[*dest], commitment, false, false); check_added_monitors(&nodes[0], 0); } diff --git a/lightning/src/ln/htlc_reserve_unit_tests.rs b/lightning/src/ln/htlc_reserve_unit_tests.rs index dc5d07c180e..4187a529779 100644 --- a/lightning/src/ln/htlc_reserve_unit_tests.rs +++ b/lightning/src/ln/htlc_reserve_unit_tests.rs @@ -347,7 +347,8 @@ pub fn test_channel_reserve_holding_cell_htlcs() { let ref payment_event_11 = expect_forward!(nodes[1]); nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event_11.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], payment_event_11.commitment_msg, false); + let commitment = &payment_event_11.commitment_msg; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, false); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(nodes[2], our_payment_hash_1, our_payment_secret_1, recv_value_1); @@ -356,7 +357,8 @@ pub fn test_channel_reserve_holding_cell_htlcs() { assert_eq!(commitment_update_2.update_add_htlcs.len(), 2); nodes[1].node.handle_update_add_htlc(node_a_id, &commitment_update_2.update_add_htlcs[0]); nodes[1].node.handle_update_add_htlc(node_a_id, &commitment_update_2.update_add_htlcs[1]); - commitment_signed_dance!(nodes[1], nodes[0], &commitment_update_2.commitment_signed, false); + let commitment = &commitment_update_2.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[1], false); let ref payment_event_3 = expect_forward!(nodes[1]); @@ -364,7 +366,7 @@ pub fn test_channel_reserve_holding_cell_htlcs() { nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event_3.msgs[0]); nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event_3.msgs[1]); - commitment_signed_dance!(nodes[2], nodes[1], &payment_event_3.commitment_msg, false); + do_commitment_signed_dance(&nodes[2], &nodes[1], &payment_event_3.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[2], false); let events = nodes[2].node.get_and_clear_pending_events(); @@ -672,7 +674,7 @@ pub fn holding_cell_htlc_counting() { assert_eq!(payment_event.node_id, node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); // We have to forward pending HTLCs twice - once tries to forward the payment forward (and // fails), the second will process the resulting failure and fail the HTLC backward. expect_and_process_pending_htlcs(&nodes[1], true); @@ -1470,7 +1472,8 @@ pub fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increme }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], our_payment_hash, our_payment_secret, 100000); diff --git a/lightning/src/ln/monitor_tests.rs b/lightning/src/ln/monitor_tests.rs index 5a287585680..959a47d7485 100644 --- a/lightning/src/ln/monitor_tests.rs +++ b/lightning/src/ln/monitor_tests.rs @@ -16,7 +16,7 @@ use crate::chain::Watch; use crate::chain::channelmonitor::{Balance, BalanceSource, ChannelMonitorUpdateStep, HolderCommitmentTransactionBalance, ANTI_REORG_DELAY, ARCHIVAL_DELAY_BLOCKS, COUNTERPARTY_CLAIMABLE_WITHIN_BLOCKS_PINNABLE, LATENCY_GRACE_PERIOD_BLOCKS}; use crate::chain::transaction::OutPoint; use crate::chain::chaininterface::{ConfirmationTarget, LowerBoundedFeeEstimator, compute_feerate_sat_per_1000_weight}; -use crate::events::bump_transaction::{BumpTransactionEvent}; +use crate::events::bump_transaction::BumpTransactionEvent; use crate::events::{Event, ClosureReason, HTLCHandlingFailureType}; use crate::ln::channel; use crate::ln::types::ChannelId; @@ -74,7 +74,7 @@ fn chanmon_fail_from_stale_commitment() { let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id()); @@ -889,7 +889,7 @@ fn do_test_balances_on_local_commitment_htlcs(keyed_anchors: bool, p2a_anchor: b let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], payment_hash, payment_secret, 10_000_000); @@ -901,7 +901,7 @@ fn do_test_balances_on_local_commitment_htlcs(keyed_anchors: bool, p2a_anchor: b let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], payment_hash_2, payment_secret_2, 20_000_000); diff --git a/lightning/src/ln/onion_route_tests.rs b/lightning/src/ln/onion_route_tests.rs index f4cfb9eda00..d7ed1d10f37 100644 --- a/lightning/src/ln/onion_route_tests.rs +++ b/lightning/src/ln/onion_route_tests.rs @@ -219,7 +219,8 @@ fn run_onion_failure_test_with_fail_intercept( // 2 => 1 nodes[1].node.handle_update_fail_htlc(nodes[2].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[1], nodes[2], update_2_1.commitment_signed, true); + let commitment = &update_2_1.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[2], commitment, true, false); // backward fail on 1 let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id()); @@ -2288,7 +2289,7 @@ fn do_test_fail_htlc_backwards_with_reason(failure_code: FailureCode) { let mut events = nodes[0].node.get_and_clear_pending_msg_events(); let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], payment_hash, payment_secret, payment_amount); @@ -2472,7 +2473,7 @@ fn test_phantom_onion_hmac_failure() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let mut fail_conditions = PaymentFailedConditions::new() @@ -2573,7 +2574,7 @@ fn test_phantom_invalid_onion_payload() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let error_data = Vec::new(); @@ -2639,7 +2640,7 @@ fn test_phantom_final_incorrect_cltv_expiry() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let expected_cltv: u32 = 80; @@ -2693,7 +2694,7 @@ fn test_phantom_failure_too_low_cltv() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let mut error_data = recv_value_msat.to_be_bytes().to_vec(); @@ -2747,7 +2748,7 @@ fn test_phantom_failure_modified_cltv() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let mut err_data = Vec::new(); @@ -2800,7 +2801,7 @@ fn test_phantom_failure_expires_too_soon() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let err_data = 0u16.to_be_bytes(); @@ -2853,7 +2854,7 @@ fn test_phantom_failure_too_low_recv_amt() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let mut error_data = bad_recv_amt_msat.to_be_bytes().to_vec(); @@ -2919,7 +2920,7 @@ fn do_test_phantom_dust_exposure_failure(multiplier_dust_limit: bool) { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let err_data = 0u16.to_be_bytes(); @@ -2983,7 +2984,7 @@ fn test_phantom_failure_reject_payment() { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1.commitment_signed, false, false); // Ensure the payment fails with the expected error. let mut error_data = recv_amt_msat.to_be_bytes().to_vec(); diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 9eb85173a83..f83312709f6 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -157,7 +157,7 @@ fn mpp_retry() { let second_msgs = remove_first_msg_event_to_node(&node_c_id, &mut events); let send_event = SendEvent::from_event(second_msgs); nodes[2].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[2], &nodes[0], &send_event.commitment_msg, false, false); // Attempt to forward the payment and complete the 2nd path's failure. expect_and_process_pending_htlcs(&nodes[2], true); @@ -171,7 +171,7 @@ fn mpp_retry() { assert!(htlc_updates.update_fail_malformed_htlcs.is_empty()); check_added_monitors!(nodes[2], 1); nodes[0].node.handle_update_fail_htlc(node_c_id, &htlc_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], htlc_updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[2], &htlc_updates.commitment_signed, false, false); let mut events = nodes[0].node.get_and_clear_pending_events(); let conditions = PaymentFailedConditions::new().mpp_parts_remain(); @@ -275,7 +275,7 @@ fn mpp_retry_overpay() { let fail_path_msgs_1 = remove_first_msg_event_to_node(&node_c_id, &mut events); let send_event = SendEvent::from_event(fail_path_msgs_1); nodes[2].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[2], &nodes[0], &send_event.commitment_msg, false, false); // Attempt to forward the payment and complete the 2nd path's failure. expect_and_process_pending_htlcs(&nodes[2], true); @@ -290,7 +290,7 @@ fn mpp_retry_overpay() { assert!(htlc_updates.update_fail_malformed_htlcs.is_empty()); check_added_monitors!(nodes[2], 1); nodes[0].node.handle_update_fail_htlc(node_c_id, &htlc_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], htlc_updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[2], &htlc_updates.commitment_signed, false, false); let mut events = nodes[0].node.get_and_clear_pending_events(); let fail_conditions = PaymentFailedConditions::new().mpp_parts_remain(); expect_payment_failed_conditions_event(events, hash, false, fail_conditions); @@ -386,7 +386,8 @@ fn do_mpp_receive_timeout(send_partial_mpp: bool) { nodes[1].node.handle_update_fail_htlc(node_d_id, &htlc_fail_updates.update_fail_htlcs[0]); check_added_monitors!(nodes[3], 1); - commitment_signed_dance!(nodes[1], nodes[3], htlc_fail_updates.commitment_signed, false); + let commitment = &htlc_fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[3], commitment, false, false); // Failed HTLC from node 1 -> 0 let fail_type = @@ -397,7 +398,8 @@ fn do_mpp_receive_timeout(send_partial_mpp: bool) { assert_eq!(htlc_fail_updates.update_fail_htlcs.len(), 1); nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_fail_updates.update_fail_htlcs[0]); check_added_monitors!(nodes[1], 1); - commitment_signed_dance!(nodes[0], nodes[1], htlc_fail_updates.commitment_signed, false); + let commitment = &htlc_fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let mut conditions = PaymentFailedConditions::new() .mpp_parts_remain() @@ -713,7 +715,8 @@ fn test_reject_mpp_keysend_htlc_mismatching_secret() { // Fail back along nodes[2] let update_fail_0 = get_htlc_update_msgs!(&nodes[3], &node_c_id); nodes[2].node.handle_update_fail_htlc(node_d_id, &update_fail_0.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[3], update_fail_0.commitment_signed, false); + let commitment = &update_fail_0.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, false); let fail_type = HTLCHandlingFailureType::Forward { node_id: Some(node_d_id), channel_id: chan_4_chan_id }; @@ -722,7 +725,8 @@ fn test_reject_mpp_keysend_htlc_mismatching_secret() { let update_fail_1 = get_htlc_update_msgs!(nodes[2], node_a_id); nodes[0].node.handle_update_fail_htlc(node_c_id, &update_fail_1.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], update_fail_1.commitment_signed, false); + let commitment = &update_fail_1.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[2], commitment, false, false); expect_payment_failed_conditions(&nodes[0], payment_hash, true, PaymentFailedConditions::new()); } @@ -903,7 +907,7 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { let fulfill_msg = htlc_fulfill.update_fulfill_htlcs.remove(0); nodes[1].node.handle_update_fulfill_htlc(node_c_id, fulfill_msg); check_added_monitors!(nodes[1], 1); - commitment_signed_dance!(nodes[1], nodes[2], htlc_fulfill.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &htlc_fulfill.commitment_signed, false, false); expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], None, true, false); if confirm_before_reload { @@ -1114,7 +1118,8 @@ fn do_test_completed_payment_not_retryable_on_reload(use_dust: bool) { let htlc_fulfill_updates = get_htlc_update_msgs!(nodes[2], node_b_id); nodes[1].node.handle_update_fail_htlc(node_c_id, &htlc_fulfill_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[2], htlc_fulfill_updates.commitment_signed, false); + let commitment = &htlc_fulfill_updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[2], commitment, false, false); expect_and_process_pending_htlcs_and_htlc_handling_failed( &nodes[1], &[HTLCHandlingFailureType::Forward { node_id: Some(node_c_id), channel_id: chan_id_2 }], @@ -1464,7 +1469,8 @@ fn test_fulfill_restart_failure() { let htlc_fail_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_fail_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], htlc_fail_updates.commitment_signed, false); + let commitment = &htlc_fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); // nodes[0] shouldn't generate any events here, while it just got a payment failure completion // it had already considered the payment fulfilled, and now they just got free money. assert!(nodes[0].node.get_and_clear_pending_events().is_empty()); @@ -1604,7 +1610,7 @@ fn failed_probe_yields_event() { let probe_event = SendEvent::from_commitment_update(node_b_id, channel_id, updates); nodes[1].node.handle_update_add_htlc(node_a_id, &probe_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], probe_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &probe_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], true); // node[0] <- update_fail_htlcs -- node[1] @@ -1613,7 +1619,7 @@ fn failed_probe_yields_event() { let _events = nodes[1].node.get_and_clear_pending_events(); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); check_added_monitors!(nodes[0], 0); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); let mut events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(events.len(), 1); @@ -1655,7 +1661,7 @@ fn onchain_failed_probe_yields_event() { let probe_event = SendEvent::from_commitment_update(node_b_id, chan_id, updates); nodes[1].node.handle_update_add_htlc(node_a_id, &probe_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], probe_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &probe_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors!(nodes[1], 1); @@ -2306,7 +2312,8 @@ fn do_test_intercepted_payment(test: InterceptTest) { assert!(update_fail.update_fail_htlcs.len() == 1); let fail_msg = update_fail.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_fail.commitment_signed, false); + let commitment = &update_fail.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); // Ensure the payment fails with the expected error. let fail_conditions = PaymentFailedConditions::new() @@ -2394,7 +2401,8 @@ fn do_test_intercepted_payment(test: InterceptTest) { assert!(htlc_fail.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_fail.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], htlc_fail.commitment_signed, false); + let commitment = &htlc_fail.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let reason = LocalHTLCFailureReason::TemporaryNodeFailure; expect_payment_failed!(nodes[0], hash, false, reason, []); @@ -2657,7 +2665,8 @@ fn do_automatic_retries(test: AutoRetry) { assert!(update_1.update_fail_htlcs.len() == 1); let fail_msg = update_1.update_fail_htlcs[0].clone(); nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_msg); - commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false); + let commitment = &update_1.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); // Ensure the attempt fails let mut events = nodes[0].node.get_and_clear_pending_events(); @@ -3197,7 +3206,7 @@ fn fails_paying_after_rejected_by_payee() { let mut payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); check_added_monitors!(nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(&nodes[1], payment_hash, payment_secret, amt_msat); @@ -3577,7 +3586,8 @@ fn no_extra_retries_on_back_to_back_fail() { assert_eq!(bs_fail_update.update_fail_htlcs.len(), 2); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_fail_update.update_fail_htlcs[0]); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_fail_update.update_fail_htlcs[1]); - commitment_signed_dance!(nodes[0], nodes[1], bs_fail_update.commitment_signed, false); + let commitment = &bs_fail_update.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); // At this point A has sent two HTLCs which both failed due to lack of fee. It now has two // pending `PaymentPathFailed` events, one with `all_paths_failed` unset, and the second @@ -3792,7 +3802,8 @@ fn test_simple_partial_retry() { check_added_monitors!(nodes[1], 1); nodes[1].node.handle_update_add_htlc(node_a_id, &second_htlc_updates.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], second_htlc_updates.commitment_msg, false); + let commitment = &second_htlc_updates.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[1], false); let next_hop_failure = @@ -3808,14 +3819,15 @@ fn test_simple_partial_retry() { assert_eq!(msg_events.len(), 2); let mut handle_update_htlcs = |event: MessageSendEvent| { if let MessageSendEvent::UpdateHTLCs { node_id, channel_id: _, updates } = event { + let commitment = &updates.commitment_signed; if node_id == node_a_id { assert_eq!(updates.update_fail_htlcs.len(), 1); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); } else if node_id == node_c_id { assert_eq!(updates.update_add_htlcs.len(), 1); nodes[2].node.handle_update_add_htlc(node_b_id, &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[1], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, false); } else { panic!("Unexpected node_id for UpdateHTLCs send"); } @@ -3853,7 +3865,8 @@ fn test_simple_partial_retry() { let bs_second_forward = get_htlc_update_msgs!(nodes[1], node_c_id); nodes[2].node.handle_update_add_htlc(node_b_id, &bs_second_forward.update_add_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[1], &bs_second_forward.commitment_signed, false); + let commitment = &bs_second_forward.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, false); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(nodes[2], payment_hash, payment_secret, amt_msat); @@ -4116,7 +4129,7 @@ fn do_no_missing_sent_on_reload(persist_manager_with_payment: bool, at_midpoint: } else { let mut fulfill = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fulfill_htlc(node_b_id, fulfill.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], fulfill.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &fulfill.commitment_signed, false, false); // Ignore the PaymentSent event which is now pending on nodes[0] - if we were to handle it we'd // be expected to ignore the eventual conflicting PaymentFailed, but by not looking at it we // expect to get the PaymentSent again later. @@ -4446,7 +4459,7 @@ fn do_test_custom_tlvs(spontaneous: bool, even_tlvs: bool, known_tlvs: bool) { nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); check_added_monitors!(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); let events = nodes[1].node.get_and_clear_pending_events(); @@ -4522,7 +4535,7 @@ fn test_retry_custom_tlvs() { let msgs::CommitmentUpdate { update_add_htlcs, commitment_signed, .. } = htlc_updates; assert_eq!(update_add_htlcs.len(), 1); nodes[1].node.handle_update_add_htlc(node_a_id, &update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &commitment_signed, false, false); // Attempt to forward the payment and complete the path's failure. expect_and_process_pending_htlcs(&nodes[1], true); @@ -4535,7 +4548,7 @@ fn test_retry_custom_tlvs() { let msgs::CommitmentUpdate { update_fail_htlcs, commitment_signed, .. } = htlc_updates; assert_eq!(update_fail_htlcs.len(), 1); nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &commitment_signed, false, false); let mut events = nodes[0].node.get_and_clear_pending_events(); let conditions = PaymentFailedConditions::new().mpp_parts_remain(); @@ -4682,7 +4695,8 @@ fn do_test_custom_tlvs_consistency( let payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[2].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], payment_event.commitment_msg, false); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[2], &nodes[0], commitment, false, false); expect_and_process_pending_htlcs(&nodes[2], false); check_added_monitors!(nodes[2], 1); @@ -4725,7 +4739,8 @@ fn do_test_custom_tlvs_consistency( let fail_updates_1 = get_htlc_update_msgs!(nodes[3], node_c_id); nodes[2].node.handle_update_fail_htlc(node_d_id, &fail_updates_1.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[3], fail_updates_1.commitment_signed, false); + let commitment = &fail_updates_1.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, false); let fail = HTLCHandlingFailureType::Forward { node_id: Some(node_d_id), channel_id: chan_2_3.2 }; @@ -4734,7 +4749,8 @@ fn do_test_custom_tlvs_consistency( let fail_updates_2 = get_htlc_update_msgs!(nodes[2], node_a_id); nodes[0].node.handle_update_fail_htlc(node_c_id, &fail_updates_2.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], fail_updates_2.commitment_signed, false); + let commitment = &fail_updates_2.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[2], commitment, false, false); let conditions = PaymentFailedConditions::new().mpp_parts_remain(); expect_payment_failed_conditions(&nodes[0], hash, true, conditions); @@ -4993,7 +5009,8 @@ fn test_htlc_forward_considers_anchor_outputs_value() { if let MessageSendEvent::UpdateHTLCs { updates, .. } = events.pop().unwrap() { nodes[1].node.handle_update_add_htlc(node_a_id, &updates.update_add_htlcs[0]); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], &updates.commitment_signed, false); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); updates.update_add_htlcs[0].clone() } else { panic!("Unexpected event"); @@ -5011,7 +5028,7 @@ fn test_htlc_forward_considers_anchor_outputs_value() { if let MessageSendEvent::UpdateHTLCs { updates, .. } = events.pop().unwrap() { nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); check_added_monitors(&nodes[0], 0); - commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); } else { panic!("Unexpected event"); } @@ -5149,7 +5166,7 @@ fn test_non_strict_forwarding() { assert_eq!(msg_events.len(), 1); let mut send_event = SendEvent::from_event(msg_events.remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors!(nodes[1], 1); @@ -5163,7 +5180,7 @@ fn test_non_strict_forwarding() { let exp_id = if i < 2 { channel_id_1 } else { channel_id_2 }; assert_eq!(send_event.msgs[0].channel_id, exp_id); nodes[2].node.handle_update_add_htlc(node_b_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[2], &nodes[1], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[2], false); let events = nodes[2].node.get_and_clear_pending_events(); @@ -5189,7 +5206,7 @@ fn test_non_strict_forwarding() { assert_eq!(msg_events.len(), 1); let mut send_event = SendEvent::from_event(msg_events.remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &send_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[1], true); check_added_monitors!(nodes[1], 1); @@ -5207,7 +5224,7 @@ fn test_non_strict_forwarding() { let updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); let events = nodes[0].node.get_and_clear_pending_events(); let conditions = PaymentFailedConditions::new().blamed_scid(routed_scid); expect_payment_failed_conditions_event(events, payment_hash, false, conditions); diff --git a/lightning/src/ln/priv_short_conf_tests.rs b/lightning/src/ln/priv_short_conf_tests.rs index f19ca89097e..685b6286960 100644 --- a/lightning/src/ln/priv_short_conf_tests.rs +++ b/lightning/src/ln/priv_short_conf_tests.rs @@ -623,7 +623,7 @@ fn test_inbound_scid_privacy() { let mut updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false); expect_payment_failed_conditions( &nodes[0], @@ -976,7 +976,7 @@ fn test_0conf_channel_with_async_monitor() { let bs_send = SendEvent::from_node(&nodes[1]); nodes[2].node.handle_update_add_htlc(node_b_id, &bs_send.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], bs_send.commitment_msg, false); + do_commitment_signed_dance(&nodes[2], &nodes[1], &bs_send.commitment_msg, false, false); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(nodes[2], payment_hash, payment_secret, 1_000_000); claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage); diff --git a/lightning/src/ln/quiescence_tests.rs b/lightning/src/ln/quiescence_tests.rs index 7a5d35b12a5..08a007b3108 100644 --- a/lightning/src/ln/quiescence_tests.rs +++ b/lightning/src/ln/quiescence_tests.rs @@ -387,7 +387,7 @@ fn quiescence_updates_go_to_holding_cell(fail_htlc: bool) { let update_add = get_htlc_update_msgs!(&nodes[0], node_id_1); nodes[1].node.handle_update_add_htlc(node_id_0, &update_add.update_add_htlcs[0]); - commitment_signed_dance!(&nodes[1], &nodes[0], update_add.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_add.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_payment_claimable!(nodes[1], payment_hash2, payment_secret2, payment_amount); @@ -422,7 +422,7 @@ fn quiescence_updates_go_to_holding_cell(fail_htlc: bool) { expect_payment_claimed!(nodes[1], payment_hash2, payment_amount); nodes[0].node.handle_update_fulfill_htlc(node_id_1, update.update_fulfill_htlcs.remove(0)); } - commitment_signed_dance!(&nodes[0], &nodes[1], update.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update.commitment_signed, false, false); // The payment from nodes[0] should now be seen as failed/successful. let events = nodes[0].node.get_and_clear_pending_events(); @@ -455,7 +455,7 @@ fn quiescence_updates_go_to_holding_cell(fail_htlc: bool) { expect_payment_claimed!(nodes[0], payment_hash1, payment_amount); nodes[1].node.handle_update_fulfill_htlc(node_id_0, update.update_fulfill_htlcs.remove(0)); } - commitment_signed_dance!(&nodes[1], &nodes[0], update.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update.commitment_signed, false, false); // The payment from nodes[1] should now be seen as failed/successful. if fail_htlc { diff --git a/lightning/src/ln/reload_tests.rs b/lightning/src/ln/reload_tests.rs index 8c9e552fa04..9fe7731bd23 100644 --- a/lightning/src/ln/reload_tests.rs +++ b/lightning/src/ln/reload_tests.rs @@ -955,7 +955,7 @@ fn do_forwarded_payment_no_manager_persistence(use_cs_commitment: bool, claim_ht let payment_event = SendEvent::from_node(&nodes[0]); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, false); // Store the `ChannelManager` before handling the `HTLCIntercepted` events, expecting the event // (and the HTLC itself) to be missing on reload even though its present when we serialized. @@ -1072,7 +1072,7 @@ fn do_forwarded_payment_no_manager_persistence(use_cs_commitment: bool, claim_ht } else { nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &update.update_fail_htlcs[0]); } - commitment_signed_dance!(nodes[0], nodes[1], update.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update.commitment_signed, false, false); if claim_htlc { expect_payment_sent!(nodes[0], payment_preimage); @@ -1130,7 +1130,7 @@ fn removed_payment_no_manager_persistence() { match &events[0] { MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { update_fail_htlcs, commitment_signed, .. }, .. } => { nodes[1].node.handle_update_fail_htlc(nodes[2].node.get_our_node_id(), &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[2], commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &commitment_signed, false, false); }, _ => panic!("Unexpected event"), } @@ -1165,7 +1165,7 @@ fn removed_payment_no_manager_persistence() { match &events[0] { MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { update_fail_htlcs, commitment_signed, .. }, .. } => { nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &commitment_signed, false, false); }, _ => panic!("Unexpected event"), } @@ -1270,7 +1270,7 @@ fn test_htlc_localremoved_persistence() { let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id()); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, false); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!(nodes[1].node.get_and_clear_pending_events(), &[HTLCHandlingFailureType::Receive { payment_hash: mismatch_payment_hash }]); check_added_monitors(&nodes[1], 1); diff --git a/lightning/src/ln/shutdown_tests.rs b/lightning/src/ln/shutdown_tests.rs index 437298afc22..4e22d985489 100644 --- a/lightning/src/ln/shutdown_tests.rs +++ b/lightning/src/ln/shutdown_tests.rs @@ -189,7 +189,7 @@ fn expect_channel_shutdown_state_with_htlc() { expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false); check_added_monitors!(nodes[1], 1); let mut updates_2 = get_htlc_update_msgs!(nodes[1], node_a_id); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &updates.commitment_signed, false, false); // Still in "resolvingHTLCs" on chan1 after htlc removed on chan2 expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ResolvingHTLCs); @@ -465,7 +465,7 @@ fn updates_shutdown_wait() { expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false); check_added_monitors!(nodes[1], 1); let mut updates_2 = get_htlc_update_msgs!(nodes[1], node_a_id); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &updates.commitment_signed, false, false); assert!(updates_2.update_add_htlcs.is_empty()); assert!(updates_2.update_fail_htlcs.is_empty()); @@ -731,7 +731,7 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) { expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false); check_added_monitors!(nodes[1], 1); let mut updates_2 = get_htlc_update_msgs!(nodes[1], node_a_id); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[2], &updates.commitment_signed, false, false); assert!(updates_2.update_add_htlcs.is_empty()); assert!(updates_2.update_fail_htlcs.is_empty()); @@ -1883,7 +1883,7 @@ fn test_pending_htlcs_arent_lost_on_mon_delay() { let as_send = get_htlc_update_msgs(&nodes[0], &node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &as_send.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], as_send.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &as_send.commitment_signed, false, false); // Place the HTLC in the B <-> C channel holding cell for release upon RAA and finally deliver // `cs_last_raa`. Because we're still waiting to handle the `PaymentSent` event, the @@ -1933,6 +1933,6 @@ fn test_pending_htlcs_arent_lost_on_mon_delay() { let failures = get_htlc_update_msgs(&nodes[1], &node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &failures.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], failures.commitment_signed, false); + do_commitment_signed_dance(&nodes[0], &nodes[1], &failures.commitment_signed, false, false); expect_payment_failed!(nodes[0], payment_hash_b, false); } diff --git a/lightning/src/ln/splicing_tests.rs b/lightning/src/ln/splicing_tests.rs index e387ac3bfdd..29243ba8374 100644 --- a/lightning/src/ln/splicing_tests.rs +++ b/lightning/src/ln/splicing_tests.rs @@ -1954,7 +1954,8 @@ fn do_test_splice_with_inflight_htlc_forward_and_resolution(expire_scid_pre_forw // Node 1 should now have a pending HTLC to forward to 2. let update_add_0_1 = get_htlc_update_msgs(&nodes[0], &node_id_1); nodes[1].node.handle_update_add_htlc(node_id_0, &update_add_0_1.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], update_add_0_1.commitment_signed, false); + let commitment = &update_add_0_1.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); assert!(nodes[1].node.needs_pending_htlc_processing()); // Splice both channels, lock them, and connect enough blocks to trigger the legacy SCID pruning @@ -2008,7 +2009,8 @@ fn do_test_splice_with_inflight_htlc_forward_and_resolution(expire_scid_pre_forw check_added_monitors(&nodes[1], 1); let update_fail_1_0 = get_htlc_update_msgs(&nodes[1], &node_id_0); nodes[0].node.handle_update_fail_htlc(node_id_1, &update_fail_1_0.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], update_fail_1_0.commitment_signed, false); + let commitment = &update_fail_1_0.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let conditions = PaymentFailedConditions::new(); expect_payment_failed_conditions(&nodes[0], payment_hash, false, conditions); @@ -2018,7 +2020,8 @@ fn do_test_splice_with_inflight_htlc_forward_and_resolution(expire_scid_pre_forw check_added_monitors(&nodes[1], 1); let update_add_1_2 = get_htlc_update_msgs(&nodes[1], &node_id_2); nodes[2].node.handle_update_add_htlc(node_id_1, &update_add_1_2.update_add_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[1], update_add_1_2.commitment_signed, false); + let commitment = &update_add_1_2.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, false); assert!(nodes[2].node.needs_pending_htlc_processing()); // Node 2 should see the claimable payment. Fail it back to make sure we also handle the SCID @@ -2032,7 +2035,8 @@ fn do_test_splice_with_inflight_htlc_forward_and_resolution(expire_scid_pre_forw let update_fail_1_2 = get_htlc_update_msgs(&nodes[2], &node_id_1); nodes[1].node.handle_update_fail_htlc(node_id_2, &update_fail_1_2.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[2], update_fail_1_2.commitment_signed, false); + let commitment = &update_fail_1_2.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[2], commitment, false, false); let fail_type = HTLCHandlingFailureType::Forward { node_id: Some(node_id_2), channel_id: channel_id_1_2, @@ -2042,7 +2046,8 @@ fn do_test_splice_with_inflight_htlc_forward_and_resolution(expire_scid_pre_forw let update_fail_0_1 = get_htlc_update_msgs(&nodes[1], &node_id_0); nodes[0].node.handle_update_fail_htlc(node_id_1, &update_fail_0_1.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], update_fail_0_1.commitment_signed, false); + let commitment = &update_fail_0_1.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, false); let conditions = PaymentFailedConditions::new(); expect_payment_failed_conditions(&nodes[0], payment_hash, true, conditions); diff --git a/lightning/src/ln/update_fee_tests.rs b/lightning/src/ln/update_fee_tests.rs index acb913294ab..2147af05afa 100644 --- a/lightning/src/ln/update_fee_tests.rs +++ b/lightning/src/ln/update_fee_tests.rs @@ -443,7 +443,7 @@ pub fn do_test_update_fee_that_funder_cannot_afford(channel_type_features: Chann nodes[1].node.handle_update_fee(node_a_id, &update_msg.update_fee.unwrap()); - commitment_signed_dance!(nodes[1], nodes[0], update_msg.commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_msg.commitment_signed, false, false); // Confirm that the new fee based on the last local commitment txn is what we expected based on the feerate set above. { @@ -947,7 +947,7 @@ pub fn accept_busted_but_better_fee() { .. } => { nodes[1].node.handle_update_fee(node_a_id, update_fee.as_ref().unwrap()); - commitment_signed_dance!(nodes[1], nodes[0], commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &commitment_signed, false, false); }, _ => panic!("Unexpected event"), }; @@ -969,7 +969,7 @@ pub fn accept_busted_but_better_fee() { .. } => { nodes[1].node.handle_update_fee(node_a_id, update_fee.as_ref().unwrap()); - commitment_signed_dance!(nodes[1], nodes[0], commitment_signed, false); + do_commitment_signed_dance(&nodes[1], &nodes[0], &commitment_signed, false, false); }, _ => panic!("Unexpected event"), }; @@ -1150,7 +1150,8 @@ pub fn do_cannot_afford_on_holding_cell_release( assert_eq!(update_fee.feerate_per_kw, target_feerate); nodes[1].node.handle_update_fee(node_a_id, &update_fee); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); // Confirm the feerate on node 0's commitment transaction { @@ -1310,7 +1311,8 @@ pub fn do_can_afford_given_trimmed_htlcs(inequality_regions: core::cmp::Ordering assert_eq!(update_fee.feerate_per_kw, target_feerate); nodes[1].node.handle_update_fee(node_a_id, &update_fee); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, false); // Confirm the feerate on node 0's commitment transaction { From c1097fdb552a0ec7637e6952f6490e72e29c9c96 Mon Sep 17 00:00:00 2001 From: elnosh Date: Mon, 10 Nov 2025 13:55:13 -0500 Subject: [PATCH 2/5] Replace `commitment_signed_dance` for skip_last_step=true Replace calls to `commitment_signed_dance` macro when skip_last_step=true to instead call `do_commitment_signed_dance`. --- lightning/src/ln/async_payments_tests.rs | 7 +- lightning/src/ln/blinded_payment_tests.rs | 4 +- lightning/src/ln/chanmon_update_fail_tests.rs | 12 +-- lightning/src/ln/channelmanager.rs | 8 +- lightning/src/ln/functional_test_utils.rs | 11 +-- lightning/src/ln/functional_tests.rs | 36 +++++---- lightning/src/ln/htlc_reserve_unit_tests.rs | 5 +- lightning/src/ln/invoice_utils.rs | 3 +- lightning/src/ln/monitor_tests.rs | 4 +- lightning/src/ln/onion_route_tests.rs | 31 ++++---- lightning/src/ln/payment_tests.rs | 77 ++++++++++--------- lightning/src/ln/priv_short_conf_tests.rs | 15 ++-- lightning/src/ln/reload_tests.rs | 4 +- lightning/src/ln/reorg_tests.rs | 2 +- lightning/src/ln/shutdown_tests.rs | 8 +- 15 files changed, 117 insertions(+), 110 deletions(-) diff --git a/lightning/src/ln/async_payments_tests.rs b/lightning/src/ln/async_payments_tests.rs index d56670f4d67..2de00d0af49 100644 --- a/lightning/src/ln/async_payments_tests.rs +++ b/lightning/src/ln/async_payments_tests.rs @@ -587,7 +587,8 @@ fn lock_in_htlc_for_static_invoice( let payment_hash = update_add.payment_hash; assert!(update_add.hold_htlc.is_some()); sender_lsp.node.handle_update_add_htlc(sender.node.get_our_node_id(), &update_add); - commitment_signed_dance!(sender_lsp, sender, &commitment_update.commitment_signed, false, true); + let commitment = &commitment_update.commitment_signed; + do_commitment_signed_dance(sender_lsp, sender, commitment, false, true); payment_hash } @@ -3240,7 +3241,7 @@ fn async_payment_mpp() { let payment_hash = update_add.payment_hash; assert!(update_add.hold_htlc.is_some()); lsp_a.node.handle_update_add_htlc(sender.node.get_our_node_id(), &update_add); - commitment_signed_dance!(lsp_a, sender, &commitment_update.commitment_signed, false, true); + do_commitment_signed_dance(lsp_a, sender, &commitment_update.commitment_signed, false, true); lsp_a.node.process_pending_htlc_forwards(); // HTLC 2 @@ -3252,7 +3253,7 @@ fn async_payment_mpp() { let update_add = commitment_update.update_add_htlcs[0].clone(); assert!(update_add.hold_htlc.is_some()); lsp_b.node.handle_update_add_htlc(sender.node.get_our_node_id(), &update_add); - commitment_signed_dance!(lsp_b, sender, &commitment_update.commitment_signed, false, true); + do_commitment_signed_dance(lsp_b, sender, &commitment_update.commitment_signed, false, true); lsp_b.node.process_pending_htlc_forwards(); // held htlc <> release_htlc dance diff --git a/lightning/src/ln/blinded_payment_tests.rs b/lightning/src/ln/blinded_payment_tests.rs index 79db0bf1817..b92b9589100 100644 --- a/lightning/src/ln/blinded_payment_tests.rs +++ b/lightning/src/ln/blinded_payment_tests.rs @@ -721,7 +721,7 @@ fn do_blinded_intercept_payment(intercept_node_fails: bool) { SendEvent::from_event(events.remove(0)) }; nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); let events = nodes[1].node.get_and_clear_pending_events(); @@ -761,7 +761,7 @@ fn do_blinded_intercept_payment(intercept_node_fails: bool) { SendEvent::from_event(events.remove(0)) }; nodes[2].node.handle_update_add_htlc(nodes[1].node.get_our_node_id(), &payment_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], &payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[1], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(&nodes[2], payment_hash, payment_secret, amt_msat, None, nodes[2].node.get_our_node_id()); diff --git a/lightning/src/ln/chanmon_update_fail_tests.rs b/lightning/src/ln/chanmon_update_fail_tests.rs index d6dd759464f..4f7a2859b40 100644 --- a/lightning/src/ln/chanmon_update_fail_tests.rs +++ b/lightning/src/ln/chanmon_update_fail_tests.rs @@ -1047,7 +1047,7 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) { chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::Completed); // We succeed in updating the monitor for the first channel send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, true); check_added_monitors!(nodes[1], 0); // Call forward_pending_htlcs and check that the new HTLC was simply added to the holding cell @@ -1874,7 +1874,7 @@ fn test_monitor_update_fail_claim() { nodes[1].node.handle_update_add_htlc(node_c_id, &payment_event.msgs[0]); let events = nodes[1].node.get_and_clear_pending_msg_events(); assert_eq!(events.len(), 0); - commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[2], &payment_event.commitment_msg, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); let (_, payment_hash_3, payment_secret_3) = get_payment_preimage_hash!(nodes[0]); @@ -1889,7 +1889,7 @@ fn test_monitor_update_fail_claim() { nodes[1].node.handle_update_add_htlc(node_c_id, &payment_event.msgs[0]); let events = nodes[1].node.get_and_clear_pending_msg_events(); assert_eq!(events.len(), 0); - commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[2], &payment_event.commitment_msg, false, true); // Now restore monitor updating on the 0<->1 channel and claim the funds on B. let channel_id = chan_1.2; @@ -1998,7 +1998,7 @@ fn test_monitor_update_on_pending_forwards() { let cs_fail_update = get_htlc_update_msgs!(nodes[2], node_b_id); nodes[1].node.handle_update_fail_htlc(node_c_id, &cs_fail_update.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[2], cs_fail_update.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[1], &nodes[2], &cs_fail_update.commitment_signed, true, true); assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty()); let (route, payment_hash_2, payment_preimage_2, payment_secret_2) = @@ -2029,7 +2029,7 @@ fn test_monitor_update_on_pending_forwards() { let bs_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_updates.update_fail_htlcs[0]); nodes[0].node.handle_update_add_htlc(node_b_id, &bs_updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_updates.commitment_signed, false, true); let events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(events.len(), 2); @@ -2525,7 +2525,7 @@ fn test_fail_htlc_on_broadcast_after_claim() { nodes[0].node.handle_update_fulfill_htlc(node_b_id, bs_updates.update_fulfill_htlcs.remove(0)); expect_payment_sent(&nodes[0], payment_preimage, None, false, false); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_updates.commitment_signed, true, true); expect_payment_path_successful!(nodes[0]); } diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 58ca37d7f48..efeb5df2619 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -18566,7 +18566,7 @@ mod tests { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, true, true); expect_payment_failed!(nodes[0], our_payment_hash, true); // Send the second half of the original MPP payment. @@ -18686,7 +18686,7 @@ mod tests { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, true, true); expect_payment_failed!(nodes[0], payment_hash, true); // Finally, claim the original payment. @@ -18733,7 +18733,7 @@ mod tests { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, true, true); expect_payment_failed!(nodes[0], payment_hash, true); // Finally, succeed the keysend payment. @@ -18782,7 +18782,7 @@ mod tests { assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, true, true); expect_payment_failed!(nodes[0], payment_hash, true); // Finally, claim the original payment. diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index 4d45dc64df5..be62a007e9a 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -2644,15 +2644,6 @@ pub fn expect_htlc_forwarding_fails( /// Performs the "commitment signed dance" - the series of message exchanges which occur after a /// commitment update. macro_rules! commitment_signed_dance { - ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr, true /* skip last step */) => { - $crate::ln::functional_test_utils::do_commitment_signed_dance( - &$node_a, - &$node_b, - &$commitment_signed, - $fail_backwards, - true, - ); - }; ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, true /* return extra message */, true /* return last RAA */) => { $crate::ln::functional_test_utils::do_main_commitment_signed_dance( &$node_a, @@ -3597,7 +3588,7 @@ pub fn do_pass_along_path<'a, 'b, 'c>(args: PassAlongPathArgs) -> Option check_added_monitors!(node, 0); if is_last_hop && is_probe { - commitment_signed_dance!(node, prev_node, payment_event.commitment_msg, true, true); + do_commitment_signed_dance(node, prev_node, &payment_event.commitment_msg, true, true); node.node.process_pending_htlc_forwards(); check_added_monitors(node, 1); } else { diff --git a/lightning/src/ln/functional_tests.rs b/lightning/src/ln/functional_tests.rs index 9fd5470ab3d..cd47c0c6f50 100644 --- a/lightning/src/ln/functional_tests.rs +++ b/lightning/src/ln/functional_tests.rs @@ -1857,7 +1857,7 @@ pub fn test_simple_commitment_revoked_fail_backward() { assert_eq!(node_a_id, *node_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment_signed, false, true); let scid = chan_2.0.contents.short_channel_id; expect_payment_failed_with_update!(nodes[0], payment_hash, false, scid, true); }, @@ -2105,7 +2105,7 @@ fn do_test_commitment_revoked_fail_backward_exhaustive( nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[1]); nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[2]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment_signed, false, true); let events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(events.len(), 6); @@ -3399,7 +3399,7 @@ fn do_test_holding_cell_htlc_add_timeouts(forwarded_htlc: bool) { .. } => { nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment_signed, true, true); }, _ => unreachable!(), } @@ -4192,7 +4192,7 @@ pub fn test_duplicate_payment_hash_one_failure_one_success() { nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_updates.update_fail_htlcs[0]); assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty()); - commitment_signed_dance!(nodes[0], nodes[1], &htlc_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &htlc_updates.commitment_signed, false, true); let failing_scid = chan_2.0.contents.short_channel_id; expect_payment_failed_with_update!(nodes[0], dup_payment_hash, false, failing_scid, true); @@ -4582,7 +4582,8 @@ fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, anno .handle_update_fail_htlc(node_c_id, &updates.update_fail_htlcs[4]); } } - commitment_signed_dance!(target, nodes[2], updates.commitment_signed, false, true); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(target, &nodes[2], commitment, false, true); }, _ => panic!("Unexpected event"), } @@ -5314,7 +5315,7 @@ pub fn test_free_and_fail_holding_cell_htlcs() { let mut update_msgs = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fulfill_htlc(node_b_id, update_msgs.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], update_msgs.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_msgs.commitment_signed, false, true); expect_payment_sent!(nodes[0], payment_preimage_1); } @@ -5506,7 +5507,7 @@ pub fn test_update_fulfill_htlc_bolt2_after_malformed_htlc_message_must_forward_ payment_event.msgs[0].onion_routing_packet.version = 1; //Produce a malformed HTLC message nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event.msgs[0]); check_added_monitors(&nodes[2], 0); - commitment_signed_dance!(nodes[2], nodes[1], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[1], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[2], false); expect_htlc_handling_failed_destinations!( nodes[2].node.get_and_clear_pending_events(), @@ -5544,7 +5545,7 @@ pub fn test_update_fulfill_htlc_bolt2_after_malformed_htlc_message_must_forward_ nodes[1].node.handle_update_fail_malformed_htlc(node_c_id, &update_msg.0); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[2], update_msg.1, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[2], &update_msg.1, false, true); expect_and_process_pending_htlcs_and_htlc_handling_failed( &nodes[1], &[HTLCHandlingFailureType::Forward { node_id: Some(node_c_id), channel_id: chan_2.2 }], @@ -5615,7 +5616,7 @@ pub fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() { payment_event.msgs[0].onion_routing_packet.version = 1; // Trigger an invalid_onion_version error nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event.msgs[0]); check_added_monitors(&nodes[2], 0); - commitment_signed_dance!(nodes[2], nodes[1], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[1], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[2], false); expect_htlc_handling_failed_destinations!( nodes[2].node.get_and_clear_pending_events(), @@ -5632,7 +5633,8 @@ pub fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() { update_msg.failure_code |= 0x2000; nodes[1].node.handle_update_fail_malformed_htlc(node_c_id, &update_msg); - commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[2], commitment, false, true); }, _ => panic!("Unexpected event"), } @@ -5648,7 +5650,8 @@ pub fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() { match events_4[0] { MessageSendEvent::UpdateHTLCs { ref updates, .. } => { nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, true); }, _ => panic!("Unexpected event"), } @@ -5988,7 +5991,7 @@ pub fn test_check_htlc_underpaying() { check_added_monitors(&nodes[1], 1); nodes[0].node.handle_update_fail_htlc(node_b_id, &update_fail_htlc); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment_signed, false, true); // 10_000 msat as u64, followed by a height of CHAN_CONFIRM_DEPTH as u32 let mut expected_failure_data = (10_000 as u64).to_be_bytes().to_vec(); @@ -8120,7 +8123,7 @@ fn do_test_tx_confirmed_skipping_blocks_immediate_broadcast(test_height_before_t assert!(updates.update_fail_malformed_htlcs.is_empty()); assert!(updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, true, true); let failed_scid = chan_announce.contents.short_channel_id; expect_payment_failed_with_update!(nodes[0], payment_hash, false, failed_scid, true); @@ -8374,7 +8377,7 @@ pub fn test_inconsistent_mpp_params() { nodes[3].node.handle_update_add_htlc(node_c_id, &payment_event.msgs[0]); check_added_monitors(&nodes[3], 0); - commitment_signed_dance!(nodes[3], nodes[2], payment_event.commitment_msg, true, true); + do_commitment_signed_dance(&nodes[3], &nodes[2], &payment_event.commitment_msg, true, true); // At this point, nodes[3] should notice the two HTLCs don't contain the same total payment // amount. It will assume the second is a privacy attack (no longer particularly relevant @@ -9055,7 +9058,7 @@ pub fn test_nondust_htlc_excess_fees_are_dust() { let send = SendEvent::from_node(&nodes[2]); nodes[0].node.handle_update_add_htlc(node_c_id, &send.msgs[0]); - commitment_signed_dance!(nodes[0], nodes[2], send.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[2], &send.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[0], true); check_added_monitors(&nodes[0], 1); @@ -9361,7 +9364,8 @@ fn do_payment_with_custom_min_final_cltv_expiry(valid_delta: bool, use_user_hash let fail_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &fail_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], fail_updates.commitment_signed, false, true); + let commitment = &fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, true); expect_payment_failed!(nodes[0], hash, true); } diff --git a/lightning/src/ln/htlc_reserve_unit_tests.rs b/lightning/src/ln/htlc_reserve_unit_tests.rs index 4187a529779..01c9e46f81e 100644 --- a/lightning/src/ln/htlc_reserve_unit_tests.rs +++ b/lightning/src/ln/htlc_reserve_unit_tests.rs @@ -685,7 +685,8 @@ pub fn holding_cell_htlc_counting() { let bs_fail_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_fail_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], bs_fail_updates.commitment_signed, false, true); + let commitment = &bs_fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, true); let failing_scid = chan_2.0.contents.short_channel_id; expect_payment_failed_with_update!(nodes[0], payment_hash_2, false, failing_scid, false); @@ -2072,7 +2073,7 @@ pub fn test_update_fulfill_htlc_bolt2_missing_badonion_bit_for_malformed_htlc_me nodes[1].node.handle_update_add_htlc(node_a_id, &updates.update_add_htlcs[0]); check_added_monitors(&nodes[1], 0); - commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &updates.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), diff --git a/lightning/src/ln/invoice_utils.rs b/lightning/src/ln/invoice_utils.rs index 7c0190a23a9..9af676b88af 100644 --- a/lightning/src/ln/invoice_utils.rs +++ b/lightning/src/ln/invoice_utils.rs @@ -1324,7 +1324,8 @@ mod test { nodes[fwd_idx] .node .handle_update_add_htlc(nodes[0].node.get_our_node_id(), &send_event.msgs[0]); - commitment_signed_dance!(nodes[fwd_idx], nodes[0], &send_event.commitment_msg, false, true); + let commitment = &send_event.commitment_msg; + do_commitment_signed_dance(&nodes[fwd_idx], &nodes[0], commitment, false, true); // Note that we have to "forward pending HTLCs" twice before we see the PaymentClaimable as // this "emulates" the payment taking two hops, providing some privacy to make phantom node diff --git a/lightning/src/ln/monitor_tests.rs b/lightning/src/ln/monitor_tests.rs index 959a47d7485..346ef1a95c8 100644 --- a/lightning/src/ln/monitor_tests.rs +++ b/lightning/src/ln/monitor_tests.rs @@ -94,7 +94,7 @@ fn chanmon_fail_from_stale_commitment() { let fail_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id()); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], fail_updates.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &fail_updates.commitment_signed, true, true); expect_payment_failed_with_update!(nodes[0], payment_hash, false, update_a.contents.short_channel_id, true); } @@ -3811,7 +3811,7 @@ fn do_test_lost_timeout_monitor_events(confirm_tx: CommitmentType, dust_htlcs: b check_added_monitors(&nodes[1], 1); let bs_fail = get_htlc_update_msgs(&nodes[1], &node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_fail.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], bs_fail.commitment_signed, true, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_fail.commitment_signed, true, true); expect_payment_failed!(nodes[0], hash_a, false); } diff --git a/lightning/src/ln/onion_route_tests.rs b/lightning/src/ln/onion_route_tests.rs index d7ed1d10f37..0581e4de3a6 100644 --- a/lightning/src/ln/onion_route_tests.rs +++ b/lightning/src/ln/onion_route_tests.rs @@ -143,7 +143,7 @@ fn run_onion_failure_test_with_fail_intercept( } // 0 => 1 update_add & CS nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add_0); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); let update_1_0 = match test_case { 0 | 100 => { @@ -180,7 +180,8 @@ fn run_onion_failure_test_with_fail_intercept( // 1 => 2 nodes[2].node.handle_update_add_htlc(nodes[1].node.get_our_node_id(), &update_add_1); - commitment_signed_dance!(nodes[2], nodes[1], update_1.commitment_signed, false, true); + let commitment = &update_1.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, true); match test_case { 2 | 200 | 201 => { @@ -244,7 +245,7 @@ fn run_onion_failure_test_with_fail_intercept( ); }; - commitment_signed_dance!(nodes[0], nodes[1], update_1_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &update_1_0.commitment_signed, false, true); let events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(events.len(), 2); @@ -1551,7 +1552,7 @@ fn test_overshoot_final_cltv() { let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id()); let mut update_add_0 = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add_0); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty()); for (_, pending_forwards) in nodes[1].node.forward_htlcs.lock().unwrap().iter_mut() { @@ -1570,7 +1571,7 @@ fn test_overshoot_final_cltv() { let update_1 = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id()); let mut update_add_1 = update_1.update_add_htlcs[0].clone(); nodes[2].node.handle_update_add_htlc(nodes[1].node.get_our_node_id(), &update_add_1); - commitment_signed_dance!(nodes[2], nodes[1], update_1.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[1], &update_1.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[2], false); expect_payment_claimable!(nodes[2], payment_hash, payment_secret, 40_000); @@ -2328,7 +2329,7 @@ fn do_test_fail_htlc_backwards_with_reason(failure_code: FailureCode) { }; nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &update_fail_htlc); - commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment_signed, false, true); let failure_data = match failure_code { FailureCode::TemporaryNodeFailure => vec![], @@ -2439,7 +2440,7 @@ fn test_phantom_onion_hmac_failure() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_update_add_htlcs(); @@ -2512,7 +2513,7 @@ fn test_phantom_invalid_onion_payload() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_update_add_htlcs(); @@ -2611,7 +2612,7 @@ fn test_phantom_final_incorrect_cltv_expiry() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_update_add_htlcs(); @@ -2680,7 +2681,7 @@ fn test_phantom_failure_too_low_cltv() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_htlc_forwards(); @@ -2736,7 +2737,7 @@ fn test_phantom_failure_modified_cltv() { update_add.cltv_expiry -= 10; nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -2789,7 +2790,7 @@ fn test_phantom_failure_expires_too_soon() { connect_blocks(&nodes[1], CLTV_FAR_FAR_AWAY); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -2838,7 +2839,7 @@ fn test_phantom_failure_too_low_recv_amt() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_htlc_forwards(); @@ -2908,7 +2909,7 @@ fn do_test_phantom_dust_exposure_failure(multiplier_dust_limit: bool) { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -2958,7 +2959,7 @@ fn test_phantom_failure_reject_payment() { let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(nodes[0].node.get_our_node_id(), &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_htlc_forwards(); diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index f83312709f6..9c0f0bbf1bc 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -626,14 +626,14 @@ fn test_reject_mpp_keysend_htlc_mismatching_secret() { let update_0 = get_htlc_update_msgs!(nodes[0], node_b_id); let update_add_0 = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(node_a_id, &update_add_0); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &update_0.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors!(&nodes[1], 1); let update_1 = get_htlc_update_msgs!(nodes[1], node_d_id); let update_add_1 = update_1.update_add_htlcs[0].clone(); nodes[3].node.handle_update_add_htlc(node_b_id, &update_add_1); - commitment_signed_dance!(nodes[3], nodes[1], update_1.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[3], &nodes[1], &update_1.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[3].node.get_and_clear_pending_events(), &[]); nodes[3].node.process_pending_update_add_htlcs(); @@ -675,14 +675,14 @@ fn test_reject_mpp_keysend_htlc_mismatching_secret() { let update_2 = get_htlc_update_msgs!(nodes[0], node_c_id); let update_add_2 = update_2.update_add_htlcs[0].clone(); nodes[2].node.handle_update_add_htlc(node_a_id, &update_add_2); - commitment_signed_dance!(nodes[2], nodes[0], &update_2.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[0], &update_2.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[2], false); check_added_monitors!(&nodes[2], 1); let update_3 = get_htlc_update_msgs!(nodes[2], node_d_id); let update_add_3 = update_3.update_add_htlcs[0].clone(); nodes[3].node.handle_update_add_htlc(node_c_id, &update_add_3); - commitment_signed_dance!(nodes[3], nodes[2], update_3.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[3], &nodes[2], &update_3.commitment_signed, false, true); expect_htlc_failure_conditions(nodes[3].node.get_and_clear_pending_events(), &[]); nodes[3].node.process_pending_update_add_htlcs(); @@ -820,7 +820,7 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { nodes[2].node.peer_disconnected(node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( @@ -2267,7 +2267,7 @@ fn do_test_intercepted_payment(test: InterceptTest) { SendEvent::from_event(events.remove(0)) }; nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); // Check that we generate the PaymentIntercepted event when an intercept forward is detected. @@ -2354,7 +2354,8 @@ fn do_test_intercepted_payment(test: InterceptTest) { SendEvent::from_event(events.remove(0)) }; nodes[2].node.handle_update_add_htlc(node_b_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[1], &payment_event.commitment_msg, false, true); + let commitment = &payment_event.commitment_msg; + do_commitment_signed_dance(&nodes[2], &nodes[1], commitment, false, true); expect_and_process_pending_htlcs(&nodes[2], false); let preimage = Some(nodes[2].node.get_payment_preimage(hash, payment_secret).unwrap()); @@ -2649,7 +2650,8 @@ fn do_automatic_retries(test: AutoRetry) { let update_0 = get_htlc_update_msgs!(nodes[0], node_b_id); let mut update_add = update_0.update_add_htlcs[0].clone(); nodes[1].node.handle_update_add_htlc(node_a_id, &update_add); - commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true); + let commitment = &update_0.commitment_signed; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, true); expect_htlc_failure_conditions(nodes[1].node.get_and_clear_pending_events(), &[]); nodes[1].node.process_pending_htlc_forwards(); expect_htlc_failure_conditions( @@ -3631,7 +3633,8 @@ fn no_extra_retries_on_back_to_back_fail() { check_added_monitors!(nodes[0], 1); nodes[1].node.handle_update_add_htlc(node_a_id, &retry_htlc_updates.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &retry_htlc_updates.commitment_msg, false, true); + let commitment = &retry_htlc_updates.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -3641,7 +3644,8 @@ fn no_extra_retries_on_back_to_back_fail() { let bs_fail_update = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_fail_update.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], &bs_fail_update.commitment_signed, false, true); + let commitment = &bs_fail_update.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, true); let mut events = nodes[0].node.get_and_clear_pending_events(); assert_eq!(events.len(), 2); @@ -3858,7 +3862,8 @@ fn test_simple_partial_retry() { check_added_monitors!(nodes[0], 1); nodes[1].node.handle_update_add_htlc(node_a_id, &retry_htlc_updates.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &retry_htlc_updates.commitment_msg, false, true); + let commitment = &retry_htlc_updates.commitment_msg; + do_commitment_signed_dance(&nodes[1], &nodes[0], commitment, false, true); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors!(nodes[1], 1); @@ -4029,7 +4034,7 @@ fn test_threaded_payment_retries() { assert_eq!(send_event.msgs.len(), 1); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &send_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); nodes[1].node.process_pending_htlc_forwards(); expect_htlc_handling_failed_destinations!( @@ -4364,7 +4369,8 @@ fn do_claim_from_closed_chan(fail_payment: bool) { if let MessageSendEvent::UpdateHTLCs { mut updates, .. } = bs_claims.remove(0) { let fulfill = updates.update_fulfill_htlcs.remove(0); nodes[0].node.handle_update_fulfill_htlc(node_b_id, fulfill); - commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, false, true); } else { panic!(); } @@ -4373,25 +4379,26 @@ fn do_claim_from_closed_chan(fail_payment: bool) { let mut ds_claim_msgs = nodes[3].node.get_and_clear_pending_msg_events(); assert_eq!(ds_claim_msgs.len(), 1); - let mut cs_claim_msgs = if let MessageSendEvent::UpdateHTLCs { mut updates, .. } = - ds_claim_msgs.remove(0) - { - let fulfill = updates.update_fulfill_htlcs.remove(0); - nodes[2].node.handle_update_fulfill_htlc(node_d_id, fulfill); - let cs_claim_msgs = nodes[2].node.get_and_clear_pending_msg_events(); - check_added_monitors(&nodes[2], 1); - commitment_signed_dance!(nodes[2], nodes[3], updates.commitment_signed, false, true); - expect_payment_forwarded!(nodes[2], nodes[0], nodes[3], Some(1000), false, false); - cs_claim_msgs - } else { - panic!(); - }; + let mut cs_claim_msgs = + if let MessageSendEvent::UpdateHTLCs { mut updates, .. } = ds_claim_msgs.remove(0) { + let fulfill = updates.update_fulfill_htlcs.remove(0); + nodes[2].node.handle_update_fulfill_htlc(node_d_id, fulfill); + let cs_claim_msgs = nodes[2].node.get_and_clear_pending_msg_events(); + check_added_monitors(&nodes[2], 1); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, true); + expect_payment_forwarded!(nodes[2], nodes[0], nodes[3], Some(1000), false, false); + cs_claim_msgs + } else { + panic!(); + }; assert_eq!(cs_claim_msgs.len(), 1); if let MessageSendEvent::UpdateHTLCs { mut updates, .. } = cs_claim_msgs.remove(0) { let fulfill = updates.update_fulfill_htlcs.remove(0); nodes[0].node.handle_update_fulfill_htlc(node_c_id, fulfill); - commitment_signed_dance!(nodes[0], nodes[2], updates.commitment_signed, false, true); + let commitment = &updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[2], commitment, false, true); } else { panic!(); } @@ -4707,7 +4714,7 @@ fn do_test_custom_tlvs_consistency( nodes[3].node.handle_update_add_htlc(node_c_id, &payment_event.msgs[0]); check_added_monitors!(nodes[3], 0); - commitment_signed_dance!(nodes[3], nodes[2], payment_event.commitment_msg, true, true); + do_commitment_signed_dance(&nodes[3], &nodes[2], &payment_event.commitment_msg, true, true); } expect_htlc_failure_conditions(nodes[3].node.get_and_clear_pending_events(), &[]); nodes[3].node.process_pending_htlc_forwards(); @@ -4820,13 +4827,13 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) { (&second_send, &first_send) }; nodes[1].node.handle_update_add_htlc(node_a_id, &b_recv_ev.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], b_recv_ev.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &b_recv_ev.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); check_added_monitors(&nodes[1], 1); let b_forward_ev = SendEvent::from_node(&nodes[1]); nodes[3].node.handle_update_add_htlc(node_b_id, &b_forward_ev.msgs[0]); - commitment_signed_dance!(nodes[3], nodes[1], b_forward_ev.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[3], &nodes[1], &b_forward_ev.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[3], false); @@ -4836,7 +4843,7 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) { nodes[3].node.peer_disconnected(node_c_id); nodes[2].node.handle_update_add_htlc(node_a_id, &c_recv_ev.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], c_recv_ev.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[0], &c_recv_ev.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[2], false); expect_htlc_handling_failed_destinations!( nodes[2].node.get_and_clear_pending_events(), @@ -4846,7 +4853,7 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) { let cs_fail = get_htlc_update_msgs(&nodes[2], &node_a_id); nodes[0].node.handle_update_fail_htlc(node_c_id, &cs_fail.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[2], cs_fail.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[2], &cs_fail.commitment_signed, false, true); let payment_fail_retryable_evs = nodes[0].node.get_and_clear_pending_events(); assert_eq!(payment_fail_retryable_evs.len(), 1); @@ -4886,14 +4893,14 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) { check_added_monitors(&nodes[0], 1); let as_resend = SendEvent::from_node(&nodes[0]); nodes[2].node.handle_update_add_htlc(node_a_id, &as_resend.msgs[0]); - commitment_signed_dance!(nodes[2], nodes[0], as_resend.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[0], &as_resend.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[2], false); check_added_monitors(&nodes[2], 1); let cs_forward = SendEvent::from_node(&nodes[2]); let cd_chan_id = cs_forward.msgs[0].channel_id; nodes[3].node.handle_update_add_htlc(node_c_id, &cs_forward.msgs[0]); - commitment_signed_dance!(nodes[3], nodes[2], cs_forward.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[3], &nodes[2], &cs_forward.commitment_msg, false, true); // Finally, check that nodes[3] does the correct thing - either accepting the payment or, if // the payment metadata was modified, failing only the one modified HTLC and retaining the @@ -4911,7 +4918,7 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) { let ds_fail = get_htlc_update_msgs(&nodes[3], &node_c_id); nodes[2].node.handle_update_fail_htlc(node_d_id, &ds_fail.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[2], nodes[3], ds_fail.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[3], &ds_fail.commitment_signed, false, true); let events = nodes[2].node.get_and_clear_pending_events(); let fail_type = HTLCHandlingFailureType::Forward { node_id: Some(node_d_id), channel_id: cd_chan_id }; diff --git a/lightning/src/ln/priv_short_conf_tests.rs b/lightning/src/ln/priv_short_conf_tests.rs index 685b6286960..1f34e59ec62 100644 --- a/lightning/src/ln/priv_short_conf_tests.rs +++ b/lightning/src/ln/priv_short_conf_tests.rs @@ -86,7 +86,7 @@ fn test_priv_forwarding_rejection() { let payment_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -101,7 +101,8 @@ fn test_priv_forwarding_rejection() { assert!(htlc_fail_updates.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &htlc_fail_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], htlc_fail_updates.commitment_signed, true, true); + let commitment = &htlc_fail_updates.commitment_signed; + do_commitment_signed_dance(&nodes[0], &nodes[1], commitment, true, true); let chan_2_scid = nodes[2].node.list_channels()[0].short_channel_id.unwrap(); expect_payment_failed_with_update!(nodes[0], our_payment_hash, false, chan_2_scid, true); @@ -604,7 +605,7 @@ fn test_inbound_scid_privacy() { let payment_event = SendEvent::from_node(&nodes[0]); assert_eq!(node_b_id, payment_event.node_id); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); - commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, true, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &payment_event.commitment_msg, true, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), @@ -699,7 +700,7 @@ fn test_scid_alias_returned() { check_added_monitors!(nodes[0], 1); let as_updates = get_htlc_update_msgs!(nodes[0], node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &as_updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &as_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &as_updates.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], true); let events = nodes[1].node.get_and_clear_pending_events(); @@ -712,7 +713,7 @@ fn test_scid_alias_returned() { let bs_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_updates.commitment_signed, false, true); let err_data = 0u16.to_be_bytes(); expect_payment_failed_conditions( @@ -736,7 +737,7 @@ fn test_scid_alias_returned() { check_added_monitors!(nodes[0], 1); let as_updates = get_htlc_update_msgs!(nodes[0], node_b_id); nodes[1].node.handle_update_add_htlc(node_a_id, &as_updates.update_add_htlcs[0]); - commitment_signed_dance!(nodes[1], nodes[0], &as_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[1], &nodes[0], &as_updates.commitment_signed, false, true); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( @@ -750,7 +751,7 @@ fn test_scid_alias_returned() { let bs_updates = get_htlc_update_msgs!(nodes[1], node_a_id); nodes[0].node.handle_update_fail_htlc(node_b_id, &bs_updates.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &bs_updates.commitment_signed, false, true); let mut err_data = Vec::new(); err_data.extend_from_slice(&10_000u64.to_be_bytes()); diff --git a/lightning/src/ln/reload_tests.rs b/lightning/src/ln/reload_tests.rs index 9fe7731bd23..c1e46fdc50c 100644 --- a/lightning/src/ln/reload_tests.rs +++ b/lightning/src/ln/reload_tests.rs @@ -892,7 +892,7 @@ fn do_test_partial_claim_before_restart(persist_both_monitors: bool, double_rest check_added_monitors!(nodes[2], 1); let cs_updates = get_htlc_update_msgs!(nodes[2], nodes[0].node.get_our_node_id()); expect_payment_forwarded!(nodes[2], nodes[0], nodes[3], Some(1000), false, false); - commitment_signed_dance!(nodes[2], nodes[3], updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[2], &nodes[3], &updates.commitment_signed, false, true); cs_updates } _ => panic!(), @@ -900,7 +900,7 @@ fn do_test_partial_claim_before_restart(persist_both_monitors: bool, double_rest let fulfill = cs_updates.update_fulfill_htlcs.remove(0); nodes[0].node.handle_update_fulfill_htlc(nodes[2].node.get_our_node_id(), fulfill); - commitment_signed_dance!(nodes[0], nodes[2], cs_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[2], &cs_updates.commitment_signed, false, true); expect_payment_sent!(nodes[0], payment_preimage); // Ensure that the remaining channel is fully operation and not blocked (and that after a diff --git a/lightning/src/ln/reorg_tests.rs b/lightning/src/ln/reorg_tests.rs index ede6acfb639..ef0ced83630 100644 --- a/lightning/src/ln/reorg_tests.rs +++ b/lightning/src/ln/reorg_tests.rs @@ -149,7 +149,7 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) { assert_eq!(htlc_updates.update_fail_htlcs.len(), 1); nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &htlc_updates.update_fail_htlcs[0]); } - commitment_signed_dance!(nodes[0], nodes[1], htlc_updates.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &htlc_updates.commitment_signed, false, true); if claim { expect_payment_sent!(nodes[0], our_payment_preimage); } else { diff --git a/lightning/src/ln/shutdown_tests.rs b/lightning/src/ln/shutdown_tests.rs index 4e22d985489..3df6c373d32 100644 --- a/lightning/src/ln/shutdown_tests.rs +++ b/lightning/src/ln/shutdown_tests.rs @@ -201,7 +201,7 @@ fn expect_channel_shutdown_state_with_htlc() { assert!(updates_2.update_fee.is_none()); assert_eq!(updates_2.update_fulfill_htlcs.len(), 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates_2.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates_2.commitment_signed, false, true); expect_payment_sent!(nodes[0], payment_preimage_0); // all htlcs removed, chan1 advances to NegotiatingClosingFee @@ -473,7 +473,7 @@ fn updates_shutdown_wait() { assert!(updates_2.update_fee.is_none()); assert_eq!(updates_2.update_fulfill_htlcs.len(), 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates_2.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates_2.commitment_signed, false, true); expect_payment_sent!(nodes[0], payment_preimage_0); let node_0_closing_signed = @@ -582,7 +582,7 @@ fn do_htlc_fail_async_shutdown(blinded_recipient: bool) { assert!(updates_2.update_fee.is_none()); nodes[0].node.handle_update_fail_htlc(node_b_id, &updates_2.update_fail_htlcs[0]); - commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates_2.commitment_signed, false, true); if blinded_recipient { expect_payment_failed_conditions( @@ -739,7 +739,7 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) { assert!(updates_2.update_fee.is_none()); assert_eq!(updates_2.update_fulfill_htlcs.len(), 1); nodes[0].node.handle_update_fulfill_htlc(node_b_id, updates_2.update_fulfill_htlcs.remove(0)); - commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true); + do_commitment_signed_dance(&nodes[0], &nodes[1], &updates_2.commitment_signed, false, true); expect_payment_sent!(nodes[0], payment_preimage); let node_0_closing_signed = From b675324a6a49988ab48a234c4fdd341603c7d5d3 Mon Sep 17 00:00:00 2001 From: elnosh Date: Mon, 10 Nov 2025 14:01:33 -0500 Subject: [PATCH 3/5] Remove `do_main_commitment_signed_dance` call in macro --- lightning/src/ln/functional_test_utils.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index be62a007e9a..8c786ded574 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -2644,13 +2644,6 @@ pub fn expect_htlc_forwarding_fails( /// Performs the "commitment signed dance" - the series of message exchanges which occur after a /// commitment update. macro_rules! commitment_signed_dance { - ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, true /* return extra message */, true /* return last RAA */) => { - $crate::ln::functional_test_utils::do_main_commitment_signed_dance( - &$node_a, - &$node_b, - $fail_backwards, - ) - }; ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr, true /* skip last step */, false /* return extra message */, true /* return last RAA */) => {{ $crate::ln::functional_test_utils::check_added_monitors(&$node_a, 0); assert!($node_a.node.get_and_clear_pending_msg_events().is_empty()); From 021d503d84b11ccc8ec6b44e8fb9e85e5f28ce57 Mon Sep 17 00:00:00 2001 From: elnosh Date: Mon, 10 Nov 2025 14:15:14 -0500 Subject: [PATCH 4/5] Use `commitment_signed_dance_through_cp_raa` instead of macro Replace calls to `commitment_signed_dance` macro to instead call `commitment_signed_dance_through_cp_raa`. --- lightning/src/ln/blinded_payment_tests.rs | 2 +- lightning/src/ln/chanmon_update_fail_tests.rs | 3 +-- lightning/src/ln/functional_test_utils.rs | 13 +++---------- lightning/src/ln/shutdown_tests.rs | 2 +- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/lightning/src/ln/blinded_payment_tests.rs b/lightning/src/ln/blinded_payment_tests.rs index b92b9589100..cfb2878845f 100644 --- a/lightning/src/ln/blinded_payment_tests.rs +++ b/lightning/src/ln/blinded_payment_tests.rs @@ -1027,7 +1027,7 @@ fn do_multi_hop_receiver_fail(check: ReceiveCheckFail) { check_added_monitors!(nodes[2], 1); nodes[2].node.handle_shutdown(nodes[1].node.get_our_node_id(), &node_1_shutdown); - commitment_signed_dance!(nodes[2], nodes[1], (), false, true, false, false); + assert!(commitment_signed_dance_through_cp_raa(&nodes[2], &nodes[1], false, false).is_none()); expect_and_process_pending_htlcs(&nodes[2], false); expect_htlc_handling_failed_destinations!(nodes[2].node.get_and_clear_pending_events(), &[HTLCHandlingFailureType::Receive { payment_hash }]); check_added_monitors(&nodes[2], 1); diff --git a/lightning/src/ln/chanmon_update_fail_tests.rs b/lightning/src/ln/chanmon_update_fail_tests.rs index 4f7a2859b40..0e6568d491c 100644 --- a/lightning/src/ln/chanmon_update_fail_tests.rs +++ b/lightning/src/ln/chanmon_update_fail_tests.rs @@ -2826,8 +2826,7 @@ fn do_channel_holding_cell_serialize(disconnect: bool, reload_a: bool) { expect_payment_claimable!(nodes[1], payment_hash_1, payment_secret_1, 100000); check_added_monitors!(nodes[1], 1); - commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false, false); - + assert!(commitment_signed_dance_through_cp_raa(&nodes[1], &nodes[0], false, false).is_none()); let events = nodes[1].node.get_and_clear_pending_events(); assert_eq!(events.len(), 1); match events[0] { diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index 8c786ded574..90cb43dcac7 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -2661,15 +2661,6 @@ macro_rules! commitment_signed_dance { assert!(extra_msg_option.is_none()); bs_revoke_and_ack }}; - ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, false /* no extra message */, $incl_claim: expr) => { - assert!($crate::ln::functional_test_utils::commitment_signed_dance_through_cp_raa( - &$node_a, - &$node_b, - $fail_backwards, - $incl_claim - ) - .is_none()); - }; } /// Runs the commitment_signed dance after the initial commitment_signed is delivered through to @@ -2755,7 +2746,9 @@ pub fn do_commitment_signed_dance( if fail_backwards { assert!(!got_claim); } - commitment_signed_dance!(node_a, node_b, (), fail_backwards, true, false, got_claim); + assert!( + commitment_signed_dance_through_cp_raa(node_a, node_b, fail_backwards, got_claim).is_none() + ); if skip_last_step { return; diff --git a/lightning/src/ln/shutdown_tests.rs b/lightning/src/ln/shutdown_tests.rs index 3df6c373d32..03f0702a78d 100644 --- a/lightning/src/ln/shutdown_tests.rs +++ b/lightning/src/ln/shutdown_tests.rs @@ -566,7 +566,7 @@ fn do_htlc_fail_async_shutdown(blinded_recipient: bool) { nodes[1].node.handle_commitment_signed_batch_test(node_a_id, &updates.commitment_signed); check_added_monitors!(nodes[1], 1); nodes[1].node.handle_shutdown(node_a_id, &node_0_shutdown); - commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false, false); + assert!(commitment_signed_dance_through_cp_raa(&nodes[1], &nodes[0], false, false).is_none()); expect_and_process_pending_htlcs(&nodes[1], false); expect_htlc_handling_failed_destinations!( nodes[1].node.get_and_clear_pending_events(), From 1bbc692844be86d36e9f410743c99a3ef0c3629a Mon Sep 17 00:00:00 2001 From: elnosh Date: Mon, 10 Nov 2025 15:17:45 -0500 Subject: [PATCH 5/5] Remove `commitment_signed_dance` macro Replace last `commitment_signed_dance` calls with `commitment_signed_dance_return_raa`. --- lightning/src/ln/chanmon_update_fail_tests.rs | 6 +-- lightning/src/ln/functional_test_utils.rs | 39 ++++++++----------- lightning/src/ln/functional_tests.rs | 4 +- lightning/src/ln/payment_tests.rs | 2 +- lightning/src/ln/reorg_tests.rs | 3 +- 5 files changed, 24 insertions(+), 30 deletions(-) diff --git a/lightning/src/ln/chanmon_update_fail_tests.rs b/lightning/src/ln/chanmon_update_fail_tests.rs index 0e6568d491c..18caa1b6167 100644 --- a/lightning/src/ln/chanmon_update_fail_tests.rs +++ b/lightning/src/ln/chanmon_update_fail_tests.rs @@ -857,7 +857,7 @@ fn test_monitor_update_fail_no_rebroadcast() { SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0)); nodes[1].node.handle_update_add_htlc(node_a_id, &send_event.msgs[0]); let commitment = send_event.commitment_msg; - let bs_raa = commitment_signed_dance!(nodes[1], nodes[0], commitment, false, true, false, true); + let bs_raa = commitment_signed_dance_return_raa(&nodes[1], &nodes[0], &commitment, false); chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress); nodes[1].node.handle_revoke_and_ack(node_a_id, &bs_raa); @@ -1006,7 +1006,7 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) { let commitment = updates.commitment_signed; let bs_revoke_and_ack = - commitment_signed_dance!(nodes[1], nodes[2], commitment, false, true, false, true); + commitment_signed_dance_return_raa(&nodes[1], &nodes[2], &commitment, false); check_added_monitors!(nodes[0], 0); // While the second channel is AwaitingRAA, forward a second payment to get it into the @@ -2084,7 +2084,7 @@ fn monitor_update_claim_fail_no_response() { let payment_event = SendEvent::from_event(events.pop().unwrap()); nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]); let commitment = payment_event.commitment_msg; - let as_raa = commitment_signed_dance!(nodes[1], nodes[0], commitment, false, true, false, true); + let as_raa = commitment_signed_dance_return_raa(&nodes[1], &nodes[0], &commitment, false); chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress); nodes[1].node.claim_funds(payment_preimage_1); diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index 90cb43dcac7..7c00bcb9bdd 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -2640,29 +2640,6 @@ pub fn expect_htlc_forwarding_fails( expect_htlc_failure_conditions(events, expected_failure); } -#[macro_export] -/// Performs the "commitment signed dance" - the series of message exchanges which occur after a -/// commitment update. -macro_rules! commitment_signed_dance { - ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr, true /* skip last step */, false /* return extra message */, true /* return last RAA */) => {{ - $crate::ln::functional_test_utils::check_added_monitors(&$node_a, 0); - assert!($node_a.node.get_and_clear_pending_msg_events().is_empty()); - $node_a.node.handle_commitment_signed_batch_test( - $node_b.node.get_our_node_id(), - &$commitment_signed, - ); - check_added_monitors(&$node_a, 1); - let (extra_msg_option, bs_revoke_and_ack) = - $crate::ln::functional_test_utils::do_main_commitment_signed_dance( - &$node_a, - &$node_b, - $fail_backwards, - ); - assert!(extra_msg_option.is_none()); - bs_revoke_and_ack - }}; -} - /// Runs the commitment_signed dance after the initial commitment_signed is delivered through to /// the initiator's `revoke_and_ack` response. i.e. [`do_main_commitment_signed_dance`] plus the /// `revoke_and_ack` response to it. @@ -2724,6 +2701,22 @@ pub fn do_main_commitment_signed_dance( (extra_msg_option, bs_revoke_and_ack) } +pub fn commitment_signed_dance_return_raa( + node_a: &Node<'_, '_, '_>, node_b: &Node<'_, '_, '_>, + commitment_signed: &Vec, fail_backwards: bool, +) -> msgs::RevokeAndACK { + check_added_monitors(&node_a, 0); + assert!(node_a.node.get_and_clear_pending_msg_events().is_empty()); + node_a + .node + .handle_commitment_signed_batch_test(node_b.node.get_our_node_id(), commitment_signed); + check_added_monitors(&node_a, 1); + let (extra_msg_option, bs_revoke_and_ack) = + do_main_commitment_signed_dance(&node_a, &node_b, fail_backwards); + assert!(extra_msg_option.is_none()); + bs_revoke_and_ack +} + /// Runs a full commitment_signed dance, delivering a commitment_signed, the responding /// `revoke_and_ack` and `commitment_signed`, and then the final `revoke_and_ack` response. /// diff --git a/lightning/src/ln/functional_tests.rs b/lightning/src/ln/functional_tests.rs index cd47c0c6f50..0d3de52f625 100644 --- a/lightning/src/ln/functional_tests.rs +++ b/lightning/src/ln/functional_tests.rs @@ -1935,7 +1935,7 @@ fn do_test_commitment_revoked_fail_backward_exhaustive( assert!(updates.update_fee.is_none()); nodes[1].node.handle_update_fail_htlc(node_c_id, &updates.update_fail_htlcs[0]); let cs = updates.commitment_signed; - let bs_raa = commitment_signed_dance!(nodes[1], nodes[2], cs, false, true, false, true); + let bs_raa = commitment_signed_dance_return_raa(&nodes[1], &nodes[2], &cs, false); // Drop the last RAA from 3 -> 2 nodes[2].node.fail_htlc_backwards(&second_payment_hash); @@ -4453,7 +4453,7 @@ fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, anno do_commitment_signed_dance(&nodes[2], &nodes[3], commitment, false, false); } else { let cs = six_removes.commitment_signed; - commitment_signed_dance!(nodes[2], nodes[3], cs, false, true, false, true); + commitment_signed_dance_return_raa(&nodes[2], &nodes[3], &cs, false); } // D's latest commitment transaction now contains 1st + 2nd + 9th HTLCs (implicitly, they're diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 9c0f0bbf1bc..bfdc1bd108d 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -4066,7 +4066,7 @@ fn test_threaded_payment_retries() { // `process_pending_htlc_forwards`. Instead, we defer the monitor update check until after // *we've* called `process_pending_htlc_forwards` when its guaranteed to have two updates. let cs = bs_fail_updates.commitment_signed; - let last_raa = commitment_signed_dance!(nodes[0], nodes[1], cs, false, true, false, true); + let last_raa = commitment_signed_dance_return_raa(&nodes[0], &nodes[1], &cs, false); nodes[0].node.handle_revoke_and_ack(node_b_id, &last_raa); let cur_time = Instant::now(); diff --git a/lightning/src/ln/reorg_tests.rs b/lightning/src/ln/reorg_tests.rs index ef0ced83630..8d7b3f5546d 100644 --- a/lightning/src/ln/reorg_tests.rs +++ b/lightning/src/ln/reorg_tests.rs @@ -772,7 +772,8 @@ fn test_htlc_preimage_claim_prev_counterparty_commitment_after_current_counterpa // Handle the fee update on the other side, but don't send the last RAA such that the previous // commitment is still valid (unrevoked). nodes[1].node().handle_update_fee(nodes[0].node.get_our_node_id(), &update_fee); - let _last_revoke_and_ack = commitment_signed_dance!(nodes[1], nodes[0], commit_sig, false, true, false, true); + let _last_revoke_and_ack = commitment_signed_dance_return_raa(&nodes[1], &nodes[0], &commit_sig, false); + let message = "Channel force-closed".to_owned(); // Force close with the latest commitment, confirm it, and reorg it with the previous commitment.