Skip to content

Commit 3b706a1

Browse files
committed
Add a relatively simple test of the legacy closing fee negotiation
This doesn't exhaustively test closing fee negotiation at all, but ensures that it is at least basically able to come to consensus and sign cooperative closing transactions.
1 parent 8fce48c commit 3b706a1

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

lightning/src/ln/shutdown_tests.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,3 +834,48 @@ fn test_closing_signed_reinit_timeout() {
834834
do_test_closing_signed_reinit_timeout(TimeoutStep::AfterClosingSigned);
835835
do_test_closing_signed_reinit_timeout(TimeoutStep::NoTimeout);
836836
}
837+
838+
fn do_simple_legacy_shutdown_test(high_initiator_fee: bool) {
839+
// A simpe test of the legacy shutdown fee negotiation logic.
840+
let chanmon_cfgs = create_chanmon_cfgs(2);
841+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
842+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
843+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
844+
845+
let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
846+
847+
if high_initiator_fee {
848+
// If high_initiator_fee is set, set nodes[0]'s feerate significantly higher. This
849+
// shouldn't impact the flow at all given nodes[1] will happily accept the higher fee.
850+
let mut feerate_lock = chanmon_cfgs[0].fee_estimator.sat_per_kw.lock().unwrap();
851+
*feerate_lock *= 10;
852+
}
853+
854+
nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
855+
let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
856+
nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
857+
let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
858+
nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
859+
860+
let mut node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
861+
node_0_closing_signed.fee_range = None;
862+
if high_initiator_fee {
863+
assert!(node_0_closing_signed.fee_satoshis > 500);
864+
} else {
865+
assert!(node_0_closing_signed.fee_satoshis < 500);
866+
}
867+
868+
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
869+
let (_, mut node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
870+
node_1_closing_signed.as_mut().unwrap().fee_range = None;
871+
872+
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
873+
let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
874+
assert!(node_0_none.is_none());
875+
}
876+
877+
#[test]
878+
fn simple_legacy_shutdown_test() {
879+
do_simple_legacy_shutdown_test(false);
880+
do_simple_legacy_shutdown_test(true);
881+
}

0 commit comments

Comments
 (0)