Correctly fail back blinded inbound fwd HTLCs when adding to a Channel
[rust-lightning] / lightning / src / ln / shutdown_tests.rs
1 // This file is Copyright its original authors, visible in version control
2 // history.
3 //
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
8 // licenses.
9
10 //! Tests of our shutdown and closing_signed negotiation logic.
11
12 use crate::sign::{EntropySource, SignerProvider};
13 use crate::chain::ChannelMonitorUpdateStatus;
14 use crate::chain::transaction::OutPoint;
15 use crate::events::{MessageSendEvent, HTLCDestination, MessageSendEventsProvider, ClosureReason};
16 use crate::ln::channelmanager::{self, PaymentSendFailure, PaymentId, RecipientOnionFields, Retry, ChannelShutdownState, ChannelDetails};
17 use crate::routing::router::{PaymentParameters, get_route, RouteParameters};
18 use crate::ln::msgs;
19 use crate::ln::msgs::{ChannelMessageHandler, ErrorAction};
20 use crate::ln::onion_utils::INVALID_ONION_BLINDING;
21 use crate::ln::script::ShutdownScript;
22 use crate::util::test_utils;
23 use crate::util::test_utils::OnGetShutdownScriptpubkey;
24 use crate::util::errors::APIError;
25 use crate::util::config::UserConfig;
26 use crate::util::string::UntrustedString;
27
28 use bitcoin::blockdata::script::Builder;
29 use bitcoin::blockdata::opcodes;
30 use bitcoin::network::constants::Network;
31 use bitcoin::address::{WitnessProgram, WitnessVersion};
32
33 use regex;
34
35 use core::default::Default;
36 use std::convert::TryFrom;
37
38 use crate::ln::functional_test_utils::*;
39
40 #[test]
41 fn pre_funding_lock_shutdown_test() {
42         // Test sending a shutdown prior to channel_ready after funding generation
43         let chanmon_cfgs = create_chanmon_cfgs(2);
44         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
45         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
46         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
47         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 8000000, 0);
48         mine_transaction(&nodes[0], &tx);
49         mine_transaction(&nodes[1], &tx);
50
51         nodes[0].node.close_channel(&OutPoint { txid: tx.txid(), index: 0 }.to_channel_id(), &nodes[1].node.get_our_node_id()).unwrap();
52         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
53         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
54         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
55         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
56
57         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
58         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
59         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
60         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
61         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
62         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
63         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
64         assert!(node_1_none.is_none());
65
66         assert!(nodes[0].node.list_channels().is_empty());
67         assert!(nodes[1].node.list_channels().is_empty());
68         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 8000000);
69         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 8000000);
70 }
71
72 #[test]
73 fn expect_channel_shutdown_state() {
74         // Test sending a shutdown prior to channel_ready after funding generation
75         let chanmon_cfgs = create_chanmon_cfgs(2);
76         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
77         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
78         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
79         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
80
81         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NotShuttingDown);
82
83         nodes[0].node.close_channel(&chan_1.2, &nodes[1].node.get_our_node_id()).unwrap();
84
85         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ShutdownInitiated);
86         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NotShuttingDown);
87
88         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
89         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
90
91         // node1 goes into NegotiatingClosingFee since there are no HTLCs in flight, note that it
92         // doesnt mean that node1 has sent/recved its closing signed message
93         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ShutdownInitiated);
94         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NegotiatingClosingFee);
95
96         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
97         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
98
99         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NegotiatingClosingFee);
100         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NegotiatingClosingFee);
101
102         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
103         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
104         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
105         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
106         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
107         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
108         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
109         assert!(node_1_none.is_none());
110
111         assert!(nodes[0].node.list_channels().is_empty());
112         assert!(nodes[1].node.list_channels().is_empty());
113         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
114         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
115 }
116
117 #[test]
118 fn expect_channel_shutdown_state_with_htlc() {
119         // Test sending a shutdown with outstanding updates pending.
120         let chanmon_cfgs = create_chanmon_cfgs(3);
121         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
122         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
123         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
124         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
125         let _chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
126
127         let (payment_preimage_0, payment_hash_0, ..) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100_000);
128
129         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NotShuttingDown);
130         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NotShuttingDown);
131
132         nodes[0].node.close_channel(&chan_1.2, &nodes[1].node.get_our_node_id()).unwrap();
133
134         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ShutdownInitiated);
135         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NotShuttingDown);
136
137         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
138         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
139
140         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ShutdownInitiated);
141         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::ResolvingHTLCs);
142
143         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
144         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
145
146         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ResolvingHTLCs);
147         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::ResolvingHTLCs);
148
149         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
150         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
151
152         // Claim Funds on Node2
153         nodes[2].node.claim_funds(payment_preimage_0);
154         check_added_monitors!(nodes[2], 1);
155         expect_payment_claimed!(nodes[2], payment_hash_0, 100_000);
156
157         // Fulfil HTLCs on node1 and node0
158         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
159         assert!(updates.update_add_htlcs.is_empty());
160         assert!(updates.update_fail_htlcs.is_empty());
161         assert!(updates.update_fail_malformed_htlcs.is_empty());
162         assert!(updates.update_fee.is_none());
163         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
164         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
165         expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false);
166         check_added_monitors!(nodes[1], 1);
167         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
168         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
169
170         // Still in "resolvingHTLCs" on chan1 after htlc removed on chan2
171         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::ResolvingHTLCs);
172         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::ResolvingHTLCs);
173
174         assert!(updates_2.update_add_htlcs.is_empty());
175         assert!(updates_2.update_fail_htlcs.is_empty());
176         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
177         assert!(updates_2.update_fee.is_none());
178         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
179         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
180         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
181         expect_payment_sent!(nodes[0], payment_preimage_0);
182
183         // all htlcs removed, chan1 advances to NegotiatingClosingFee
184         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NegotiatingClosingFee);
185         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NegotiatingClosingFee);
186
187         // ClosingSignNegotion process
188         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
189         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
190         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
191         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
192         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
193         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
194         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
195         assert!(node_1_none.is_none());
196         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
197         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
198
199         // Shutdown basically removes the channelDetails, testing of shutdowncomplete state unnecessary
200         assert!(nodes[0].node.list_channels().is_empty());
201 }
202
203 #[test]
204 fn test_lnd_bug_6039() {
205         // LND sends a nonsense error message any time it gets a shutdown if there are still HTLCs
206         // pending. We currently swallow that error to work around LND's bug #6039. This test emulates
207         // the LND nonsense and ensures we at least kinda handle it.
208         let chanmon_cfgs = create_chanmon_cfgs(2);
209         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
210         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
211         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
212         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
213
214         let (payment_preimage, ..) = route_payment(&nodes[0], &[&nodes[1]], 100_000);
215
216         nodes[0].node.close_channel(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
217         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
218         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
219
220         // Generate an lnd-like error message and check that we respond by simply screaming louder to
221         // see if LND will accept our protocol compliance.
222         let err_msg = msgs::ErrorMessage { channel_id: chan.2, data: "link failed to shutdown".to_string() };
223         nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &err_msg);
224         let node_a_responses = nodes[0].node.get_and_clear_pending_msg_events();
225         assert_eq!(node_a_responses[0], MessageSendEvent::SendShutdown {
226                         node_id: nodes[1].node.get_our_node_id(),
227                         msg: node_0_shutdown,
228                 });
229         if let MessageSendEvent::HandleError { action: msgs::ErrorAction::SendWarningMessage { .. }, .. }
230                 = node_a_responses[1] {} else { panic!(); }
231
232         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
233
234         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
235         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
236
237         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage);
238
239         // Assume that LND will eventually respond to our Shutdown if we clear all the remaining HTLCs
240         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
241
242         // ClosingSignNegotion process
243         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
244         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
245         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
246         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
247         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
248         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
249         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
250         assert!(node_1_none.is_none());
251         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
252         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
253
254         // Shutdown basically removes the channelDetails, testing of shutdowncomplete state unnecessary
255         assert!(nodes[0].node.list_channels().is_empty());
256 }
257
258 #[test]
259 fn shutdown_on_unfunded_channel() {
260         // Test receiving a shutdown prior to funding generation
261         let chanmon_cfgs = create_chanmon_cfgs(2);
262         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
263         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
264         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
265
266         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1_000_000, 100_000, 0, None, None).unwrap();
267         let open_chan = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
268
269         // Create a dummy P2WPKH script
270         let script = Builder::new().push_int(0)
271                 .push_slice(&[0; 20])
272                 .into_script();
273
274         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &msgs::Shutdown {
275                 channel_id: open_chan.temporary_channel_id, scriptpubkey: script,
276         });
277         check_closed_event!(nodes[0], 1, ClosureReason::CounterpartyCoopClosedUnfundedChannel, [nodes[1].node.get_our_node_id()], 1_000_000);
278 }
279
280 #[test]
281 fn expect_channel_shutdown_state_with_force_closure() {
282         // Test sending a shutdown prior to channel_ready after funding generation
283         let chanmon_cfgs = create_chanmon_cfgs(2);
284         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
285         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
286         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
287         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
288
289         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NotShuttingDown);
290         expect_channel_shutdown_state!(nodes[1], chan_1.2, ChannelShutdownState::NotShuttingDown);
291
292         nodes[1].node.force_close_broadcasting_latest_txn(&chan_1.2, &nodes[0].node.get_our_node_id()).unwrap();
293         check_closed_broadcast!(nodes[1], true);
294         check_added_monitors!(nodes[1], 1);
295
296         expect_channel_shutdown_state!(nodes[0], chan_1.2, ChannelShutdownState::NotShuttingDown);
297         assert!(nodes[1].node.list_channels().is_empty());
298
299         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
300         assert_eq!(node_txn.len(), 1);
301         check_spends!(node_txn[0], chan_1.3);
302         mine_transaction(&nodes[0], &node_txn[0]);
303         check_added_monitors!(nodes[0], 1);
304
305         assert!(nodes[0].node.list_channels().is_empty());
306         assert!(nodes[1].node.list_channels().is_empty());
307         check_closed_broadcast!(nodes[0], true);
308         check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
309         check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
310 }
311
312 #[test]
313 fn updates_shutdown_wait() {
314         // Test sending a shutdown with outstanding updates pending
315         let chanmon_cfgs = create_chanmon_cfgs(3);
316         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
317         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
318         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
319         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
320         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
321         let logger = test_utils::TestLogger::new();
322         let scorer = test_utils::TestScorer::new();
323         let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
324         let random_seed_bytes = keys_manager.get_secure_random_bytes();
325
326         let (payment_preimage_0, payment_hash_0, ..) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100_000);
327
328         nodes[0].node.close_channel(&chan_1.2, &nodes[1].node.get_our_node_id()).unwrap();
329         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
330         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
331         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
332         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
333
334         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
335         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
336
337         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[0]);
338
339         let payment_params_1 = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
340                 .with_bolt11_features(nodes[1].node.bolt11_invoice_features()).unwrap();
341         let route_params = RouteParameters::from_payment_params_and_value(payment_params_1, 100_000);
342         let route_1 = get_route(&nodes[0].node.get_our_node_id(), &route_params,
343                 &nodes[0].network_graph.read_only(), None, &logger, &scorer, &Default::default(), &random_seed_bytes).unwrap();
344         let payment_params_2 = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), TEST_FINAL_CLTV)
345                 .with_bolt11_features(nodes[0].node.bolt11_invoice_features()).unwrap();
346         let route_params = RouteParameters::from_payment_params_and_value(payment_params_2, 100_000);
347         let route_2 = get_route(&nodes[1].node.get_our_node_id(), &route_params,
348                 &nodes[1].network_graph.read_only(), None, &logger, &scorer, &Default::default(), &random_seed_bytes).unwrap();
349         unwrap_send_err!(nodes[0].node.send_payment_with_route(&route_1, payment_hash,
350                         RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)
351                 ), true, APIError::ChannelUnavailable {..}, {});
352         unwrap_send_err!(nodes[1].node.send_payment_with_route(&route_2, payment_hash,
353                         RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)
354                 ), true, APIError::ChannelUnavailable {..}, {});
355
356         nodes[2].node.claim_funds(payment_preimage_0);
357         check_added_monitors!(nodes[2], 1);
358         expect_payment_claimed!(nodes[2], payment_hash_0, 100_000);
359
360         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
361         assert!(updates.update_add_htlcs.is_empty());
362         assert!(updates.update_fail_htlcs.is_empty());
363         assert!(updates.update_fail_malformed_htlcs.is_empty());
364         assert!(updates.update_fee.is_none());
365         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
366         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
367         expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false);
368         check_added_monitors!(nodes[1], 1);
369         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
370         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
371
372         assert!(updates_2.update_add_htlcs.is_empty());
373         assert!(updates_2.update_fail_htlcs.is_empty());
374         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
375         assert!(updates_2.update_fee.is_none());
376         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
377         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
378         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
379         expect_payment_sent!(nodes[0], payment_preimage_0);
380
381         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
382         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
383         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
384         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
385         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
386         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
387         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
388         assert!(node_1_none.is_none());
389         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
390         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
391
392         assert!(nodes[0].node.list_channels().is_empty());
393
394         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
395         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
396         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
397         assert!(nodes[1].node.list_channels().is_empty());
398         assert!(nodes[2].node.list_channels().is_empty());
399         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
400         check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
401 }
402
403 #[test]
404 fn htlc_fail_async_shutdown() {
405         do_htlc_fail_async_shutdown(true);
406         do_htlc_fail_async_shutdown(false);
407 }
408
409 fn do_htlc_fail_async_shutdown(blinded_recipient: bool) {
410         // Test HTLCs fail if shutdown starts even if messages are delivered out-of-order
411         let chanmon_cfgs = create_chanmon_cfgs(3);
412         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
413         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
414         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
415         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
416         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
417
418         let amt_msat = 100000;
419         let (_, our_payment_hash, our_payment_secret) = get_payment_preimage_hash(&nodes[2], Some(amt_msat), None);
420         let route_params = if blinded_recipient {
421                 crate::ln::blinded_payment_tests::get_blinded_route_parameters(
422                         amt_msat, our_payment_secret,
423                         nodes.iter().skip(1).map(|n| n.node.get_our_node_id()).collect(), &[&chan_2.0.contents],
424                         &chanmon_cfgs[2].keys_manager)
425         } else {
426                 RouteParameters::from_payment_params_and_value(
427                         PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV), amt_msat)
428         };
429         nodes[0].node.send_payment(our_payment_hash,
430                 RecipientOnionFields::secret_only(our_payment_secret),
431                 PaymentId(our_payment_hash.0), route_params, Retry::Attempts(0)).unwrap();
432         check_added_monitors!(nodes[0], 1);
433         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
434         assert_eq!(updates.update_add_htlcs.len(), 1);
435         assert!(updates.update_fulfill_htlcs.is_empty());
436         assert!(updates.update_fail_htlcs.is_empty());
437         assert!(updates.update_fail_malformed_htlcs.is_empty());
438         assert!(updates.update_fee.is_none());
439
440         nodes[1].node.close_channel(&chan_1.2, &nodes[0].node.get_our_node_id()).unwrap();
441         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
442         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
443         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
444
445         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
446         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed);
447         check_added_monitors!(nodes[1], 1);
448         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
449         commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false, false);
450
451         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
452         assert!(updates_2.update_add_htlcs.is_empty());
453         assert!(updates_2.update_fulfill_htlcs.is_empty());
454         assert_eq!(updates_2.update_fail_htlcs.len(), 1);
455         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
456         assert!(updates_2.update_fee.is_none());
457
458         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fail_htlcs[0]);
459         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
460
461         if blinded_recipient {
462                 expect_payment_failed_conditions(&nodes[0], our_payment_hash, false,
463                         PaymentFailedConditions::new().expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]));
464         } else {
465                 expect_payment_failed_with_update!(nodes[0], our_payment_hash, false, chan_2.0.contents.short_channel_id, true);
466         }
467
468         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
469         assert_eq!(msg_events.len(), 1);
470         let node_0_closing_signed = match msg_events[0] {
471                 MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
472                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
473                         (*msg).clone()
474                 },
475                 _ => panic!("Unexpected event"),
476         };
477
478         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
479         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
480         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
481         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
482         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
483         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
484         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
485         assert!(node_1_none.is_none());
486
487         assert!(nodes[0].node.list_channels().is_empty());
488
489         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
490         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
491         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
492         assert!(nodes[1].node.list_channels().is_empty());
493         assert!(nodes[2].node.list_channels().is_empty());
494         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
495         check_closed_event!(nodes[1], 2, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id(), nodes[2].node.get_our_node_id()], 100000);
496         check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
497 }
498
499 fn do_test_shutdown_rebroadcast(recv_count: u8) {
500         // Test that shutdown/closing_signed is re-sent on reconnect with a variable number of
501         // messages delivered prior to disconnect
502         let chanmon_cfgs = create_chanmon_cfgs(3);
503         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
504         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
505         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
506         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
507         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
508
509         let (payment_preimage, payment_hash, ..) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100_000);
510
511         nodes[1].node.close_channel(&chan_1.2, &nodes[0].node.get_our_node_id()).unwrap();
512         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
513         if recv_count > 0 {
514                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
515                 let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
516                 if recv_count > 1 {
517                         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
518                 }
519         }
520
521         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
522         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
523
524         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
525                 features: nodes[1].node.init_features(), networks: None, remote_network_address: None
526         }, true).unwrap();
527         let node_0_reestablish = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
528         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
529                 features: nodes[0].node.init_features(), networks: None, remote_network_address: None
530         }, false).unwrap();
531         let node_1_reestablish = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
532
533         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish);
534         let node_1_2nd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
535         assert!(node_1_shutdown == node_1_2nd_shutdown);
536
537         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_reestablish);
538         let node_0_2nd_shutdown = if recv_count > 0 {
539                 let node_0_2nd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
540                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown);
541                 node_0_2nd_shutdown
542         } else {
543                 let node_0_chan_update = get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
544                 assert_eq!(node_0_chan_update.contents.flags & 2, 0); // "disabled" flag must not be set as we just reconnected.
545                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown);
546                 get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id())
547         };
548         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_2nd_shutdown);
549
550         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
551         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
552
553         nodes[2].node.claim_funds(payment_preimage);
554         check_added_monitors!(nodes[2], 1);
555         expect_payment_claimed!(nodes[2], payment_hash, 100_000);
556
557         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
558         assert!(updates.update_add_htlcs.is_empty());
559         assert!(updates.update_fail_htlcs.is_empty());
560         assert!(updates.update_fail_malformed_htlcs.is_empty());
561         assert!(updates.update_fee.is_none());
562         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
563         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
564         expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false);
565         check_added_monitors!(nodes[1], 1);
566         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
567         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
568
569         assert!(updates_2.update_add_htlcs.is_empty());
570         assert!(updates_2.update_fail_htlcs.is_empty());
571         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
572         assert!(updates_2.update_fee.is_none());
573         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
574         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
575         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
576         expect_payment_sent!(nodes[0], payment_preimage);
577
578         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
579         if recv_count > 0 {
580                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
581                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
582                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
583                 let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
584                 assert!(node_0_2nd_closing_signed.is_some());
585         }
586
587         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
588         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
589
590         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
591                 features: nodes[0].node.init_features(), networks: None, remote_network_address: None
592         }, true).unwrap();
593         let node_1_2nd_reestablish = get_chan_reestablish_msgs!(nodes[1], nodes[0]).pop().unwrap();
594         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
595                 features: nodes[1].node.init_features(), networks: None, remote_network_address: None
596         }, false).unwrap();
597         if recv_count == 0 {
598                 // If all closing_signeds weren't delivered we can just resume where we left off...
599                 let node_0_2nd_reestablish = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
600
601                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish);
602                 let node_0_msgs = nodes[0].node.get_and_clear_pending_msg_events();
603                 assert_eq!(node_0_msgs.len(), 2);
604                 let node_0_2nd_closing_signed = match node_0_msgs[1] {
605                         MessageSendEvent::SendClosingSigned { ref msg, .. } => {
606                                 assert_eq!(node_0_closing_signed, *msg);
607                                 msg.clone()
608                         },
609                         _ => panic!(),
610                 };
611
612                 let node_0_3rd_shutdown = match node_0_msgs[0] {
613                         MessageSendEvent::SendShutdown { ref msg, .. } => {
614                                 assert_eq!(node_0_2nd_shutdown, *msg);
615                                 msg.clone()
616                         },
617                         _ => panic!(),
618                 };
619                 assert!(node_0_2nd_shutdown == node_0_3rd_shutdown);
620
621                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish);
622                 let node_1_3rd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
623                 assert!(node_1_3rd_shutdown == node_1_2nd_shutdown);
624
625                 nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_3rd_shutdown);
626                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
627
628                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_3rd_shutdown);
629
630                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed);
631                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
632                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
633                 let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
634                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
635                 let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
636                 assert!(node_1_none.is_none());
637                 check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
638         } else {
639                 // If one node, however, received + responded with an identical closing_signed we end
640                 // up erroring and node[0] will try to broadcast its own latest commitment transaction.
641                 // There isn't really anything better we can do simply, but in the future we might
642                 // explore storing a set of recently-closed channels that got disconnected during
643                 // closing_signed and avoiding broadcasting local commitment txn for some timeout to
644                 // give our counterparty enough time to (potentially) broadcast a cooperative closing
645                 // transaction.
646                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
647
648                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish);
649                 let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
650                 assert_eq!(msg_events.len(), 2);
651                 if let MessageSendEvent::HandleError { ref action, .. } = msg_events[1] {
652                         match action {
653                                 &ErrorAction::SendErrorMessage { ref msg } => {
654                                         nodes[1].node.handle_error(&nodes[0].node.get_our_node_id(), &msg);
655                                         assert_eq!(msg.channel_id, chan_1.2);
656                                 },
657                                 _ => panic!("Unexpected event!"),
658                         }
659                 } else { panic!("Needed SendErrorMessage close"); }
660
661                 // get_closing_signed_broadcast usually eats the BroadcastChannelUpdate for us and
662                 // checks it, but in this case nodes[1] didn't ever get a chance to receive a
663                 // closing_signed so we do it ourselves
664                 check_closed_broadcast!(nodes[1], false);
665                 check_added_monitors!(nodes[1], 1);
666                 check_closed_event!(nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", &nodes[1].node.get_our_node_id())) }
667                         , [nodes[0].node.get_our_node_id()], 100000);
668         }
669
670         assert!(nodes[0].node.list_channels().is_empty());
671
672         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
673         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
674         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
675         assert!(nodes[1].node.list_channels().is_empty());
676         assert!(nodes[2].node.list_channels().is_empty());
677         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
678         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
679         check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
680 }
681
682 #[test]
683 fn test_shutdown_rebroadcast() {
684         do_test_shutdown_rebroadcast(0);
685         do_test_shutdown_rebroadcast(1);
686         do_test_shutdown_rebroadcast(2);
687 }
688
689 #[test]
690 fn test_upfront_shutdown_script() {
691         // BOLT 2 : Option upfront shutdown script, if peer commit its closing_script at channel opening
692         // enforce it at shutdown message
693
694         let mut config = UserConfig::default();
695         config.channel_handshake_config.announced_channel = true;
696         config.channel_handshake_limits.force_announced_channel_preference = false;
697         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
698         let user_cfgs = [None, Some(config), None];
699         let chanmon_cfgs = create_chanmon_cfgs(3);
700         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
701         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
702         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
703
704         // We test that in case of peer committing upfront to a script, if it changes at closing, we refuse to sign
705         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000);
706         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[2].node.get_our_node_id()).unwrap();
707         let node_0_orig_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
708         let mut node_0_shutdown = node_0_orig_shutdown.clone();
709         node_0_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
710         // Test we enforce upfront_scriptpbukey if by providing a different one at closing that we warn
711         // the peer and ignore the message.
712         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
713         assert!(regex::Regex::new(r"Got shutdown request with a scriptpubkey \([A-Fa-f0-9]+\) which did not match their previous scriptpubkey.")
714                         .unwrap().is_match(&check_warn_msg!(nodes[2], nodes[0].node.get_our_node_id(), chan.2)));
715         // This allows nodes[2] to retry the shutdown message, which should get a response:
716         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_orig_shutdown);
717         get_event_msg!(nodes[2], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
718
719         // We test that in case of peer committing upfront to a script, if it doesn't change at closing, we sign
720         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000);
721         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[2].node.get_our_node_id()).unwrap();
722         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
723         // We test that in case of peer committing upfront to a script, if it oesn't change at closing, we sign
724         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
725         let events = nodes[2].node.get_and_clear_pending_msg_events();
726         assert_eq!(events.len(), 1);
727         match events[0] {
728                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
729                 _ => panic!("Unexpected event"),
730         }
731
732         // We test that if case of peer non-signaling we don't enforce committed script at channel opening
733         *nodes[0].override_init_features.borrow_mut() = Some(nodes[0].node.init_features().clear_upfront_shutdown_script());
734         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000);
735         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[1].node.get_our_node_id()).unwrap();
736         let node_1_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
737         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_1_shutdown);
738         check_added_monitors!(nodes[1], 1);
739         let events = nodes[1].node.get_and_clear_pending_msg_events();
740         assert_eq!(events.len(), 1);
741         match events[0] {
742                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
743                 _ => panic!("Unexpected event"),
744         }
745
746         // We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
747         // channel smoothly, opt-out is from channel initiator here
748         *nodes[0].override_init_features.borrow_mut() = None;
749         let chan = create_announced_chan_between_nodes_with_value(&nodes, 1, 0, 1000000, 1000000);
750         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
751         check_added_monitors!(nodes[1], 1);
752         let node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
753         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
754         let events = nodes[0].node.get_and_clear_pending_msg_events();
755         assert_eq!(events.len(), 1);
756         match events[0] {
757                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
758                 _ => panic!("Unexpected event"),
759         }
760
761         //// We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
762         //// channel smoothly
763         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000);
764         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
765         check_added_monitors!(nodes[1], 1);
766         let node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
767         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
768         let events = nodes[0].node.get_and_clear_pending_msg_events();
769         assert_eq!(events.len(), 2);
770         match events[0] {
771                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
772                 _ => panic!("Unexpected event"),
773         }
774         match events[1] {
775                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
776                 _ => panic!("Unexpected event"),
777         }
778 }
779
780 #[test]
781 fn test_unsupported_anysegwit_upfront_shutdown_script() {
782         let chanmon_cfgs = create_chanmon_cfgs(2);
783         let mut node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
784         // Clear shutdown_anysegwit on initiator
785         *node_cfgs[0].override_init_features.borrow_mut() = Some(channelmanager::provided_init_features(&test_default_channel_config()).clear_shutdown_anysegwit());
786         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
787         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
788
789         // Use a non-v0 segwit script supported by option_shutdown_anysegwit
790         let anysegwit_shutdown_script = Builder::new()
791                 .push_int(16)
792                 .push_slice(&[0, 40])
793                 .into_script();
794
795         // Check script when handling an open_channel message
796         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None, None).unwrap();
797         let mut open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
798         open_channel.shutdown_scriptpubkey = Some(anysegwit_shutdown_script.clone());
799         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel);
800
801         let events = nodes[1].node.get_and_clear_pending_msg_events();
802         assert_eq!(events.len(), 1);
803         match events[0] {
804                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
805                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
806                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: OP_PUSHNUM_16 OP_PUSHBYTES_2 0028");
807                 },
808                 _ => panic!("Unexpected event"),
809         }
810
811         let chanmon_cfgs = create_chanmon_cfgs(2);
812         let mut node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
813         // Clear shutdown_anysegwit on responder
814         *node_cfgs[1].override_init_features.borrow_mut() = Some(channelmanager::provided_init_features(&test_default_channel_config()).clear_shutdown_anysegwit());
815         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
816         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
817
818         // Check script when handling an accept_channel message
819         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None, None).unwrap();
820         let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
821         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel);
822         let mut accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
823         accept_channel.shutdown_scriptpubkey = Some(anysegwit_shutdown_script.clone());
824         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), &accept_channel);
825
826         let events = nodes[0].node.get_and_clear_pending_msg_events();
827         assert_eq!(events.len(), 1);
828         match events[0] {
829                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
830                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
831                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: OP_PUSHNUM_16 OP_PUSHBYTES_2 0028");
832                 },
833                 _ => panic!("Unexpected event"),
834         }
835         check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: OP_PUSHNUM_16 OP_PUSHBYTES_2 0028".to_string() }
836                 , [nodes[1].node.get_our_node_id()], 100000);
837 }
838
839 #[test]
840 fn test_invalid_upfront_shutdown_script() {
841         let chanmon_cfgs = create_chanmon_cfgs(2);
842         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
843         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
844         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
845
846         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None, None).unwrap();
847
848         // Use a segwit v0 script with an unsupported witness program
849         let mut open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
850         open_channel.shutdown_scriptpubkey = Some(Builder::new().push_int(0)
851                 .push_slice(&[0, 0])
852                 .into_script());
853         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel);
854
855         let events = nodes[1].node.get_and_clear_pending_msg_events();
856         assert_eq!(events.len(), 1);
857         match events[0] {
858                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
859                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
860                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: OP_0 OP_PUSHBYTES_2 0000");
861                 },
862                 _ => panic!("Unexpected event"),
863         }
864 }
865
866 #[test]
867 fn test_segwit_v0_shutdown_script() {
868         let mut config = UserConfig::default();
869         config.channel_handshake_config.announced_channel = true;
870         config.channel_handshake_limits.force_announced_channel_preference = false;
871         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
872         let user_cfgs = [None, Some(config), None];
873         let chanmon_cfgs = create_chanmon_cfgs(3);
874         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
875         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
876         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
877
878         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
879         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
880         check_added_monitors!(nodes[1], 1);
881
882         // Use a segwit v0 script supported even without option_shutdown_anysegwit
883         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
884         node_0_shutdown.scriptpubkey = Builder::new().push_int(0)
885                 .push_slice(&[0; 20])
886                 .into_script();
887         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
888
889         let events = nodes[0].node.get_and_clear_pending_msg_events();
890         assert_eq!(events.len(), 2);
891         match events[0] {
892                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
893                 _ => panic!("Unexpected event"),
894         }
895         match events[1] {
896                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
897                 _ => panic!("Unexpected event"),
898         }
899 }
900
901 #[test]
902 fn test_anysegwit_shutdown_script() {
903         let mut config = UserConfig::default();
904         config.channel_handshake_config.announced_channel = true;
905         config.channel_handshake_limits.force_announced_channel_preference = false;
906         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
907         let user_cfgs = [None, Some(config), None];
908         let chanmon_cfgs = create_chanmon_cfgs(3);
909         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
910         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
911         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
912
913         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
914         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
915         check_added_monitors!(nodes[1], 1);
916
917         // Use a non-v0 segwit script supported by option_shutdown_anysegwit
918         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
919         node_0_shutdown.scriptpubkey = Builder::new().push_int(16)
920                 .push_slice(&[0, 0])
921                 .into_script();
922         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
923
924         let events = nodes[0].node.get_and_clear_pending_msg_events();
925         assert_eq!(events.len(), 2);
926         match events[0] {
927                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
928                 _ => panic!("Unexpected event"),
929         }
930         match events[1] {
931                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
932                 _ => panic!("Unexpected event"),
933         }
934 }
935
936 #[test]
937 fn test_unsupported_anysegwit_shutdown_script() {
938         let mut config = UserConfig::default();
939         config.channel_handshake_config.announced_channel = true;
940         config.channel_handshake_limits.force_announced_channel_preference = false;
941         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
942         let user_cfgs = [None, Some(config), None];
943         let chanmon_cfgs = create_chanmon_cfgs(3);
944         let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
945         *node_cfgs[0].override_init_features.borrow_mut() = Some(channelmanager::provided_init_features(&config).clear_shutdown_anysegwit());
946         *node_cfgs[1].override_init_features.borrow_mut() = Some(channelmanager::provided_init_features(&config).clear_shutdown_anysegwit());
947         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
948         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
949
950         // Check that using an unsupported shutdown script fails and a supported one succeeds.
951         let supported_shutdown_script = chanmon_cfgs[1].keys_manager.get_shutdown_scriptpubkey().unwrap();
952         let unsupported_witness_program = WitnessProgram::new(WitnessVersion::V16, &[0, 40]).unwrap();
953         let unsupported_shutdown_script =
954                 ShutdownScript::new_witness_program(&unsupported_witness_program).unwrap();
955         chanmon_cfgs[1].keys_manager
956                 .expect(OnGetShutdownScriptpubkey { returns: unsupported_shutdown_script.clone() })
957                 .expect(OnGetShutdownScriptpubkey { returns: supported_shutdown_script });
958
959         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
960         match nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()) {
961                 Err(APIError::IncompatibleShutdownScript { script }) => {
962                         assert_eq!(script.into_inner(), unsupported_shutdown_script.clone().into_inner());
963                 },
964                 Err(e) => panic!("Unexpected error: {:?}", e),
965                 Ok(_) => panic!("Expected error"),
966         }
967         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
968         check_added_monitors!(nodes[1], 1);
969
970         // Use a non-v0 segwit script unsupported without option_shutdown_anysegwit
971         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
972         node_0_shutdown.scriptpubkey = unsupported_shutdown_script.into_inner();
973         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
974
975         assert_eq!(&check_warn_msg!(nodes[0], nodes[1].node.get_our_node_id(), chan.2),
976                         "Got a nonstandard scriptpubkey (60020028) from remote peer");
977 }
978
979 #[test]
980 fn test_invalid_shutdown_script() {
981         let mut config = UserConfig::default();
982         config.channel_handshake_config.announced_channel = true;
983         config.channel_handshake_limits.force_announced_channel_preference = false;
984         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
985         let user_cfgs = [None, Some(config), None];
986         let chanmon_cfgs = create_chanmon_cfgs(3);
987         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
988         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
989         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
990
991         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
992         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id()).unwrap();
993         check_added_monitors!(nodes[1], 1);
994
995         // Use a segwit v0 script with an unsupported witness program
996         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
997         node_0_shutdown.scriptpubkey = Builder::new().push_int(0)
998                 .push_slice(&[0, 0])
999                 .into_script();
1000         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
1001
1002         assert_eq!(&check_warn_msg!(nodes[0], nodes[1].node.get_our_node_id(), chan.2),
1003                         "Got a nonstandard scriptpubkey (00020000) from remote peer");
1004 }
1005
1006 #[test]
1007 fn test_user_shutdown_script() {
1008         let mut config = test_default_channel_config();
1009         config.channel_handshake_config.announced_channel = true;
1010         config.channel_handshake_limits.force_announced_channel_preference = false;
1011         config.channel_handshake_config.commit_upfront_shutdown_pubkey = false;
1012         let user_cfgs = [None, Some(config), None];
1013         let chanmon_cfgs = create_chanmon_cfgs(3);
1014         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1015         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
1016         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1017
1018         // Segwit v0 script of the form OP_0 <20-byte hash>
1019         let script = Builder::new().push_int(0)
1020                 .push_slice(&[0; 20])
1021                 .into_script();
1022
1023         let shutdown_script = ShutdownScript::try_from(script.clone()).unwrap();
1024
1025         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
1026         nodes[1].node.close_channel_with_feerate_and_script(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id(), None, Some(shutdown_script)).unwrap();
1027         check_added_monitors!(nodes[1], 1);
1028
1029         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1030
1031         assert_eq!(node_0_shutdown.scriptpubkey, script);
1032 }
1033
1034 #[test]
1035 fn test_already_set_user_shutdown_script() {
1036         let mut config = test_default_channel_config();
1037         config.channel_handshake_config.announced_channel = true;
1038         config.channel_handshake_limits.force_announced_channel_preference = false;
1039         let user_cfgs = [None, Some(config), None];
1040         let chanmon_cfgs = create_chanmon_cfgs(3);
1041         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1042         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
1043         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1044
1045         // Segwit v0 script of the form OP_0 <20-byte hash>
1046         let script = Builder::new().push_int(0)
1047                 .push_slice(&[0; 20])
1048                 .into_script();
1049
1050         let shutdown_script = ShutdownScript::try_from(script).unwrap();
1051
1052         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
1053         let result = nodes[1].node.close_channel_with_feerate_and_script(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[0].node.get_our_node_id(), None, Some(shutdown_script));
1054
1055         assert_eq!(result, Err(APIError::APIMisuseError { err: "Cannot override shutdown script for a channel with one already set".to_string() }));
1056 }
1057
1058 #[derive(PartialEq)]
1059 enum TimeoutStep {
1060         AfterShutdown,
1061         AfterClosingSigned,
1062         NoTimeout,
1063 }
1064
1065 fn do_test_closing_signed_reinit_timeout(timeout_step: TimeoutStep) {
1066         // The range-based closing signed negotiation allows the funder to restart the process with a
1067         // new range if the previous range did not overlap. This allows implementations to request user
1068         // intervention allowing users to enter a new fee range. We do not implement the sending side
1069         // of this, instead opting to allow users to enter an explicit "willing to pay up to X to avoid
1070         // force-closing" value and relying on that instead.
1071         //
1072         // Here we run test the fundee side of that restart mechanism, implementing the funder side of
1073         // it manually.
1074         let chanmon_cfgs = create_chanmon_cfgs(2);
1075         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1076         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1077         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1078         let chan_id = create_announced_chan_between_nodes(&nodes, 0, 1).2;
1079
1080         send_payment(&nodes[0], &[&nodes[1]], 8_000_000);
1081
1082         nodes[0].node.close_channel(&chan_id, &nodes[1].node.get_our_node_id()).unwrap();
1083         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1084         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
1085         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1086         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
1087
1088         {
1089                 // Now we set nodes[1] to require a relatively high feerate for closing. This should result
1090                 // in it rejecting nodes[0]'s initial closing_signed, giving nodes[0] a chance to try
1091                 // again.
1092                 let mut feerate_lock = chanmon_cfgs[1].fee_estimator.sat_per_kw.lock().unwrap();
1093                 *feerate_lock *= 10;
1094         }
1095
1096         let mut node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
1097         // nodes[0] should use a "reasonable" feerate, well under the 10 sat/vByte that nodes[1] thinks
1098         // is the current prevailing feerate.
1099         assert!(node_0_closing_signed.fee_satoshis <= 500);
1100
1101         if timeout_step != TimeoutStep::AfterShutdown {
1102                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
1103                 assert!(check_warn_msg!(nodes[1], nodes[0].node.get_our_node_id(), chan_id)
1104                         .starts_with("Unable to come to consensus about closing feerate"));
1105
1106                 // Now deliver a mutated closing_signed indicating a higher acceptable fee range, which
1107                 // nodes[1] should happily accept and respond to.
1108                 node_0_closing_signed.fee_range.as_mut().unwrap().max_fee_satoshis *= 10;
1109                 {
1110                         let mut node_0_per_peer_lock;
1111                         let mut node_0_peer_state_lock;
1112                         get_channel_ref!(nodes[0], nodes[1], node_0_per_peer_lock, node_0_peer_state_lock, chan_id).context_mut().closing_fee_limits.as_mut().unwrap().1 *= 10;
1113                 }
1114                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
1115                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
1116                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
1117                 let node_0_2nd_closing_signed = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
1118                 if timeout_step == TimeoutStep::NoTimeout {
1119                         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.1.unwrap());
1120                         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
1121                 }
1122                 check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
1123         }
1124
1125         if timeout_step != TimeoutStep::NoTimeout {
1126                 assert!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().is_empty());
1127         } else {
1128                 assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
1129         }
1130
1131         nodes[1].node.timer_tick_occurred();
1132         nodes[1].node.timer_tick_occurred();
1133
1134         let txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
1135         assert_eq!(txn.len(), 1);
1136         assert_eq!(txn[0].output.len(), 2);
1137
1138         if timeout_step != TimeoutStep::NoTimeout {
1139                 assert!((txn[0].output[0].script_pubkey.is_v0_p2wpkh() &&
1140                          txn[0].output[1].script_pubkey.is_v0_p2wsh()) ||
1141                         (txn[0].output[1].script_pubkey.is_v0_p2wpkh() &&
1142                          txn[0].output[0].script_pubkey.is_v0_p2wsh()));
1143                 check_closed_broadcast!(nodes[1], true);
1144                 check_added_monitors!(nodes[1], 1);
1145                 check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "closing_signed negotiation failed to finish within two timer ticks".to_string() }
1146                         , [nodes[0].node.get_our_node_id()], 100000);
1147         } else {
1148                 assert!(txn[0].output[0].script_pubkey.is_v0_p2wpkh());
1149                 assert!(txn[0].output[1].script_pubkey.is_v0_p2wpkh());
1150
1151                 let events = nodes[1].node.get_and_clear_pending_msg_events();
1152                 assert_eq!(events.len(), 1);
1153                 match events[0] {
1154                         MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
1155                                 assert_eq!(msg.contents.flags & 2, 2);
1156                         },
1157                         _ => panic!("Unexpected event"),
1158                 }
1159         }
1160 }
1161
1162 #[test]
1163 fn test_closing_signed_reinit_timeout() {
1164         do_test_closing_signed_reinit_timeout(TimeoutStep::AfterShutdown);
1165         do_test_closing_signed_reinit_timeout(TimeoutStep::AfterClosingSigned);
1166         do_test_closing_signed_reinit_timeout(TimeoutStep::NoTimeout);
1167 }
1168
1169 fn do_simple_legacy_shutdown_test(high_initiator_fee: bool) {
1170         // A simpe test of the legacy shutdown fee negotiation logic.
1171         let chanmon_cfgs = create_chanmon_cfgs(2);
1172         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1173         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1174         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1175
1176         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
1177
1178         if high_initiator_fee {
1179                 // If high_initiator_fee is set, set nodes[0]'s feerate significantly higher. This
1180                 // shouldn't impact the flow at all given nodes[1] will happily accept the higher fee.
1181                 let mut feerate_lock = chanmon_cfgs[0].fee_estimator.sat_per_kw.lock().unwrap();
1182                 *feerate_lock *= 10;
1183         }
1184
1185         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id(), &nodes[1].node.get_our_node_id()).unwrap();
1186         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1187         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
1188         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1189         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
1190
1191         let mut node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
1192         node_0_closing_signed.fee_range = None;
1193         if high_initiator_fee {
1194                 assert!(node_0_closing_signed.fee_satoshis > 500);
1195         } else {
1196                 assert!(node_0_closing_signed.fee_satoshis < 500);
1197         }
1198
1199         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
1200         let (_, mut node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
1201         node_1_closing_signed.as_mut().unwrap().fee_range = None;
1202
1203         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
1204         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
1205         assert!(node_0_none.is_none());
1206         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
1207         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
1208 }
1209
1210 #[test]
1211 fn simple_legacy_shutdown_test() {
1212         do_simple_legacy_shutdown_test(false);
1213         do_simple_legacy_shutdown_test(true);
1214 }
1215
1216 #[test]
1217 fn simple_target_feerate_shutdown() {
1218         // Simple test of target in `close_channel_with_target_feerate`.
1219         let chanmon_cfgs = create_chanmon_cfgs(2);
1220         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1221         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1222         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1223
1224         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
1225         let chan_id = OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id();
1226
1227         nodes[0].node.close_channel_with_feerate_and_script(&chan_id, &nodes[1].node.get_our_node_id(), Some(253 * 10), None).unwrap();
1228         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1229         nodes[1].node.close_channel_with_feerate_and_script(&chan_id, &nodes[0].node.get_our_node_id(), Some(253 * 5), None).unwrap();
1230         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1231
1232         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
1233         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
1234
1235         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
1236         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
1237         let (_, node_1_closing_signed_opt) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
1238         let node_1_closing_signed = node_1_closing_signed_opt.unwrap();
1239
1240         // nodes[1] was passed a target which was larger than the current channel feerate, which it
1241         // should ignore in favor of the channel fee, as there is no use demanding a minimum higher
1242         // than what will be paid on a force-close transaction. Note that we have to consider rounding,
1243         // so only check that we're within 10 sats.
1244         assert!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis >=
1245                 node_1_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis * 10 - 5);
1246         assert!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis <=
1247                 node_1_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis * 10 + 5);
1248
1249         // Further, because nodes[0]'s target fee is larger than the `Normal` fee estimation plus our
1250         // force-closure-avoidance buffer, min should equal max, and the nodes[1]-selected fee should
1251         // be the nodes[0] only available fee.
1252         assert_eq!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis,
1253                    node_0_closing_signed.fee_range.as_ref().unwrap().max_fee_satoshis);
1254         assert_eq!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis,
1255                    node_0_closing_signed.fee_satoshis);
1256         assert_eq!(node_0_closing_signed.fee_satoshis, node_1_closing_signed.fee_satoshis);
1257
1258         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
1259         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
1260         assert!(node_0_none.is_none());
1261         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
1262         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
1263 }
1264
1265 fn do_outbound_update_no_early_closing_signed(use_htlc: bool) {
1266         // Previously, if we have a pending inbound HTLC (or fee update) on a channel which has
1267         // initiated shutdown, we'd send our initial closing_signed immediately after receiving the
1268         // peer's last RAA to remove the HTLC/fee update, but before receiving their final
1269         // commitment_signed for a commitment without the HTLC/with the new fee. This caused at least
1270         // LDK peers to force-close as we initiated closing_signed prior to the channel actually being
1271         // fully empty of pending updates/HTLCs.
1272         let chanmon_cfgs = create_chanmon_cfgs(2);
1273         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1274         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1275         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1276
1277         let chan_id = create_announced_chan_between_nodes(&nodes, 0, 1).2;
1278
1279         send_payment(&nodes[0], &[&nodes[1]], 1_000_000);
1280         let payment_hash_opt = if use_htlc {
1281                 Some(route_payment(&nodes[1], &[&nodes[0]], 10_000).1)
1282         } else {
1283                 None
1284         };
1285
1286         if use_htlc {
1287                 nodes[0].node.fail_htlc_backwards(&payment_hash_opt.unwrap());
1288                 expect_pending_htlcs_forwardable_and_htlc_handling_failed!(nodes[0],
1289                         [HTLCDestination::FailedPayment { payment_hash: payment_hash_opt.unwrap() }]);
1290         } else {
1291                 *chanmon_cfgs[0].fee_estimator.sat_per_kw.lock().unwrap() *= 10;
1292                 nodes[0].node.timer_tick_occurred();
1293         }
1294         let updates = get_htlc_update_msgs(&nodes[0], &nodes[1].node.get_our_node_id());
1295         check_added_monitors(&nodes[0], 1);
1296
1297         nodes[1].node.close_channel(&chan_id, &nodes[0].node.get_our_node_id()).unwrap();
1298         let node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1299         nodes[0].node.close_channel(&chan_id, &nodes[1].node.get_our_node_id()).unwrap();
1300         let node_1_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1301
1302         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
1303         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_1_shutdown);
1304
1305         if use_htlc {
1306                 nodes[1].node.handle_update_fail_htlc(&nodes[0].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
1307         } else {
1308                 nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &updates.update_fee.unwrap());
1309         }
1310         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed);
1311         check_added_monitors(&nodes[1], 1);
1312         let (bs_raa, bs_cs) = get_revoke_commit_msgs(&nodes[1], &nodes[0].node.get_our_node_id());
1313
1314         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1315         check_added_monitors(&nodes[0], 1);
1316
1317         // At this point the Channel on nodes[0] has no record of any HTLCs but the latest
1318         // broadcastable commitment does contain the HTLC (but only the ChannelMonitor knows this).
1319         // Thus, the channel should not yet initiate closing_signed negotiation (but previously did).
1320         assert_eq!(nodes[0].node.get_and_clear_pending_msg_events(), Vec::new());
1321
1322         chanmon_cfgs[0].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress);
1323         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs);
1324         check_added_monitors(&nodes[0], 1);
1325         assert_eq!(nodes[0].node.get_and_clear_pending_msg_events(), Vec::new());
1326
1327         expect_channel_shutdown_state!(nodes[0], chan_id, ChannelShutdownState::ResolvingHTLCs);
1328         assert_eq!(nodes[0].node.get_and_clear_pending_msg_events(), Vec::new());
1329         let (outpoint, latest_update, _) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_id).unwrap().clone();
1330         nodes[0].chain_monitor.chain_monitor.force_channel_monitor_updated(outpoint, latest_update);
1331
1332         let as_raa_closing_signed = nodes[0].node.get_and_clear_pending_msg_events();
1333         assert_eq!(as_raa_closing_signed.len(), 2);
1334
1335         if let MessageSendEvent::SendRevokeAndACK { msg, .. } = &as_raa_closing_signed[0] {
1336                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &msg);
1337                 check_added_monitors(&nodes[1], 1);
1338                 if use_htlc {
1339                         expect_payment_failed!(nodes[1], payment_hash_opt.unwrap(), true);
1340                 }
1341         } else { panic!("Unexpected message {:?}", as_raa_closing_signed[0]); }
1342
1343         if let MessageSendEvent::SendClosingSigned { msg, .. } = &as_raa_closing_signed[1] {
1344                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &msg);
1345         } else { panic!("Unexpected message {:?}", as_raa_closing_signed[1]); }
1346
1347         let bs_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
1348         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &bs_closing_signed);
1349         let (_, as_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
1350         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &as_2nd_closing_signed.unwrap());
1351         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
1352         assert!(node_1_none.is_none());
1353
1354         check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
1355         check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
1356 }
1357
1358 #[test]
1359 fn outbound_update_no_early_closing_signed() {
1360         do_outbound_update_no_early_closing_signed(true);
1361         do_outbound_update_no_early_closing_signed(false);
1362 }