Skip to content

Commit 6f16453

Browse files
authored
Merge pull request #1011 from TheBlueMatt/2021-07-new-closing-fee
Clean up existing and add range-based closing_signed negotiation
2 parents 64159b3 + 82e7df1 commit 6f16453

13 files changed

+1517
-858
lines changed

fuzz/src/msg_targets/gen_target.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ echo "mod utils;" > mod.rs
1414
GEN_TEST AcceptChannel test_msg ""
1515
GEN_TEST AnnouncementSignatures test_msg ""
1616
GEN_TEST ChannelReestablish test_msg ""
17-
GEN_TEST ClosingSigned test_msg ""
1817
GEN_TEST CommitmentSigned test_msg ""
1918
GEN_TEST DecodedOnionErrorPacket test_msg ""
2019
GEN_TEST FundingCreated test_msg ""
@@ -40,6 +39,7 @@ GEN_TEST UpdateAddHTLC test_msg_hole ", 85, 33"
4039
GEN_TEST ErrorMessage test_msg_hole ", 32, 2"
4140
GEN_TEST ChannelUpdate test_msg_hole ", 108, 1"
4241

42+
GEN_TEST ClosingSigned test_msg_simple ""
4343
GEN_TEST Init test_msg_simple ""
4444
GEN_TEST OnionHopData test_msg_simple ""
4545
GEN_TEST Ping test_msg_simple ""

fuzz/src/msg_targets/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ mod utils;
22
pub mod msg_accept_channel;
33
pub mod msg_announcement_signatures;
44
pub mod msg_channel_reestablish;
5-
pub mod msg_closing_signed;
65
pub mod msg_commitment_signed;
76
pub mod msg_decoded_onion_error_packet;
87
pub mod msg_funding_created;
@@ -25,6 +24,7 @@ pub mod msg_gossip_timestamp_filter;
2524
pub mod msg_update_add_htlc;
2625
pub mod msg_error_message;
2726
pub mod msg_channel_update;
27+
pub mod msg_closing_signed;
2828
pub mod msg_init;
2929
pub mod msg_onion_hop_data;
3030
pub mod msg_ping;

fuzz/src/msg_targets/msg_closing_signed.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_closing_signed_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::ClosingSigned, data);
20+
test_msg_simple!(msgs::ClosingSigned, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_closing_signed_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::ClosingSigned, data);
26+
test_msg_simple!(msgs::ClosingSigned, data);
2727
}

lightning/src/ln/chanmon_update_fail_tests.rs

+37-5
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ fn test_monitor_and_persister_update_fail() {
142142
assert_eq!(updates.update_fulfill_htlcs.len(), 1);
143143
nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
144144
if let Some(ref mut channel) = nodes[0].node.channel_state.lock().unwrap().by_id.get_mut(&chan.2) {
145-
if let Ok((_, _, _, update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].fee_estimator, &node_cfgs[0].logger) {
145+
if let Ok((_, _, update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].logger) {
146146
// Check that even though the persister is returning a TemporaryFailure,
147147
// because the update is bogus, ultimately the error that's returned
148148
// should be a PermanentFailure.
@@ -2561,8 +2561,8 @@ fn test_reconnect_dup_htlc_claims() {
25612561

25622562
#[test]
25632563
fn test_temporary_error_during_shutdown() {
2564-
// Test that temporary failures when updating the monitor's shutdown script do not prevent
2565-
// cooperative close.
2564+
// Test that temporary failures when updating the monitor's shutdown script delay cooperative
2565+
// close.
25662566
let mut config = test_default_channel_config();
25672567
config.channel_options.commit_upfront_shutdown_pubkey = false;
25682568

@@ -2575,9 +2575,41 @@ fn test_temporary_error_during_shutdown() {
25752575

25762576
*nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
25772577
*nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
2578-
close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, false);
2579-
check_added_monitors!(nodes[0], 1);
2578+
2579+
nodes[0].node.close_channel(&channel_id).unwrap();
2580+
nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id()));
25802581
check_added_monitors!(nodes[1], 1);
2582+
2583+
nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id()));
2584+
check_added_monitors!(nodes[0], 1);
2585+
2586+
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2587+
2588+
*nodes[0].chain_monitor.update_ret.lock().unwrap() = None;
2589+
*nodes[1].chain_monitor.update_ret.lock().unwrap() = None;
2590+
2591+
let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
2592+
nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
2593+
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id()));
2594+
2595+
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2596+
2597+
*nodes[1].chain_monitor.update_ret.lock().unwrap() = None;
2598+
let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
2599+
nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
2600+
2601+
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id()));
2602+
let (_, closing_signed_a) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
2603+
let txn_a = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
2604+
2605+
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &closing_signed_a.unwrap());
2606+
let (_, none_b) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
2607+
assert!(none_b.is_none());
2608+
let txn_b = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
2609+
2610+
assert_eq!(txn_a, txn_b);
2611+
assert_eq!(txn_a.len(), 1);
2612+
check_spends!(txn_a[0], funding_tx);
25812613
}
25822614

25832615
#[test]

0 commit comments

Comments
 (0)