Add payment_hash to PaymentSent #999
[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 chain::keysinterface::KeysInterface;
13 use chain::transaction::OutPoint;
14 use ln::{PaymentPreimage, PaymentHash};
15 use ln::channelmanager::PaymentSendFailure;
16 use routing::network_graph::NetworkUpdate;
17 use routing::router::get_route;
18 use ln::features::{InitFeatures, InvoiceFeatures};
19 use ln::msgs;
20 use ln::msgs::{ChannelMessageHandler, ErrorAction};
21 use ln::script::ShutdownScript;
22 use util::test_utils;
23 use util::test_utils::OnGetShutdownScriptpubkey;
24 use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
25 use util::errors::APIError;
26 use util::config::UserConfig;
27
28 use bitcoin::blockdata::script::Builder;
29 use bitcoin::blockdata::opcodes;
30
31 use bitcoin::hashes::sha256::Hash as Sha256;
32 use bitcoin::hashes::Hash;
33
34 use regex;
35
36 use core::default::Default;
37 use core::num::NonZeroU8;
38
39 use ln::functional_test_utils::*;
40 use ln::msgs::OptionalField::Present;
41
42 #[test]
43 fn pre_funding_lock_shutdown_test() {
44         // Test sending a shutdown prior to funding_locked after funding generation
45         let chanmon_cfgs = create_chanmon_cfgs(2);
46         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
47         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
48         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
49         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 8000000, 0, InitFeatures::known(), InitFeatures::known());
50         mine_transaction(&nodes[0], &tx);
51         mine_transaction(&nodes[1], &tx);
52
53         nodes[0].node.close_channel(&OutPoint { txid: tx.txid(), index: 0 }.to_channel_id()).unwrap();
54         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
55         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
56         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
57         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
58
59         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
60         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
61         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
62         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
63         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
64         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
65         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
66         assert!(node_1_none.is_none());
67
68         assert!(nodes[0].node.list_channels().is_empty());
69         assert!(nodes[1].node.list_channels().is_empty());
70 }
71
72 #[test]
73 fn updates_shutdown_wait() {
74         // Test sending a shutdown with outstanding updates pending
75         let chanmon_cfgs = create_chanmon_cfgs(3);
76         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
77         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
78         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
79         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
80         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
81         let logger = test_utils::TestLogger::new();
82
83         let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
84
85         nodes[0].node.close_channel(&chan_1.2).unwrap();
86         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
87         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
88         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
89         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
90
91         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
92         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
93
94         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[0]);
95
96         let net_graph_msg_handler0 = &nodes[0].net_graph_msg_handler;
97         let net_graph_msg_handler1 = &nodes[1].net_graph_msg_handler;
98         let route_1 = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler0.network_graph, &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger).unwrap();
99         let route_2 = get_route(&nodes[1].node.get_our_node_id(), &net_graph_msg_handler1.network_graph, &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger).unwrap();
100         unwrap_send_err!(nodes[0].node.send_payment(&route_1, payment_hash, &Some(payment_secret)), true, APIError::ChannelUnavailable {..}, {});
101         unwrap_send_err!(nodes[1].node.send_payment(&route_2, payment_hash, &Some(payment_secret)), true, APIError::ChannelUnavailable {..}, {});
102
103         assert!(nodes[2].node.claim_funds(our_payment_preimage));
104         check_added_monitors!(nodes[2], 1);
105         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
106         assert!(updates.update_add_htlcs.is_empty());
107         assert!(updates.update_fail_htlcs.is_empty());
108         assert!(updates.update_fail_malformed_htlcs.is_empty());
109         assert!(updates.update_fee.is_none());
110         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
111         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
112         expect_payment_forwarded!(nodes[1], Some(1000), false);
113         check_added_monitors!(nodes[1], 1);
114         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
115         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
116
117         assert!(updates_2.update_add_htlcs.is_empty());
118         assert!(updates_2.update_fail_htlcs.is_empty());
119         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
120         assert!(updates_2.update_fee.is_none());
121         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
122         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
123         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
124
125         let events = nodes[0].node.get_and_clear_pending_events();
126         assert_eq!(events.len(), 1);
127         match events[0] {
128                 Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
129                         assert_eq!(our_payment_preimage, *payment_preimage);
130                         assert_eq!(our_payment_hash, *payment_hash);
131                 },
132                 _ => panic!("Unexpected event"),
133         }
134
135         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
136         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
137         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
138         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
139         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
140         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
141         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
142         assert!(node_1_none.is_none());
143
144         assert!(nodes[0].node.list_channels().is_empty());
145
146         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
147         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
148         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
149         assert!(nodes[1].node.list_channels().is_empty());
150         assert!(nodes[2].node.list_channels().is_empty());
151 }
152
153 #[test]
154 fn htlc_fail_async_shutdown() {
155         // Test HTLCs fail if shutdown starts even if messages are delivered out-of-order
156         let chanmon_cfgs = create_chanmon_cfgs(3);
157         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
158         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
159         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
160         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
161         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
162         let logger = test_utils::TestLogger::new();
163
164         let (_, our_payment_hash, our_payment_secret) = get_payment_preimage_hash!(nodes[2]);
165         let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
166         let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph, &nodes[2].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger).unwrap();
167         nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
168         check_added_monitors!(nodes[0], 1);
169         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
170         assert_eq!(updates.update_add_htlcs.len(), 1);
171         assert!(updates.update_fulfill_htlcs.is_empty());
172         assert!(updates.update_fail_htlcs.is_empty());
173         assert!(updates.update_fail_malformed_htlcs.is_empty());
174         assert!(updates.update_fee.is_none());
175
176         nodes[1].node.close_channel(&chan_1.2).unwrap();
177         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
178         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
179         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
180
181         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
182         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed);
183         check_added_monitors!(nodes[1], 1);
184         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
185         commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false);
186
187         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
188         assert!(updates_2.update_add_htlcs.is_empty());
189         assert!(updates_2.update_fulfill_htlcs.is_empty());
190         assert_eq!(updates_2.update_fail_htlcs.len(), 1);
191         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
192         assert!(updates_2.update_fee.is_none());
193
194         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fail_htlcs[0]);
195         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
196
197         expect_payment_failed_with_update!(nodes[0], our_payment_hash, false, chan_2.0.contents.short_channel_id, true);
198
199         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
200         assert_eq!(msg_events.len(), 1);
201         let node_0_closing_signed = match msg_events[0] {
202                 MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
203                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
204                         (*msg).clone()
205                 },
206                 _ => panic!("Unexpected event"),
207         };
208
209         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
210         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
211         let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
212         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
213         let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
214         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
215         let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
216         assert!(node_1_none.is_none());
217
218         assert!(nodes[0].node.list_channels().is_empty());
219
220         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
221         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
222         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
223         assert!(nodes[1].node.list_channels().is_empty());
224         assert!(nodes[2].node.list_channels().is_empty());
225 }
226
227 fn do_test_shutdown_rebroadcast(recv_count: u8) {
228         // Test that shutdown/closing_signed is re-sent on reconnect with a variable number of
229         // messages delivered prior to disconnect
230         let chanmon_cfgs = create_chanmon_cfgs(3);
231         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
232         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
233         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
234         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
235         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
236
237         let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
238
239         nodes[1].node.close_channel(&chan_1.2).unwrap();
240         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
241         if recv_count > 0 {
242                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
243                 let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
244                 if recv_count > 1 {
245                         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
246                 }
247         }
248
249         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
250         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
251
252         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
253         let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
254         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
255         let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
256
257         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish);
258         let node_1_2nd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
259         assert!(node_1_shutdown == node_1_2nd_shutdown);
260
261         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_reestablish);
262         let node_0_2nd_shutdown = if recv_count > 0 {
263                 let node_0_2nd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
264                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_2nd_shutdown);
265                 node_0_2nd_shutdown
266         } else {
267                 let node_0_chan_update = get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
268                 assert_eq!(node_0_chan_update.contents.flags & 2, 0); // "disabled" flag must not be set as we just reconnected.
269                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_2nd_shutdown);
270                 get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id())
271         };
272         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_2nd_shutdown);
273
274         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
275         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
276
277         assert!(nodes[2].node.claim_funds(our_payment_preimage));
278         check_added_monitors!(nodes[2], 1);
279         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
280         assert!(updates.update_add_htlcs.is_empty());
281         assert!(updates.update_fail_htlcs.is_empty());
282         assert!(updates.update_fail_malformed_htlcs.is_empty());
283         assert!(updates.update_fee.is_none());
284         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
285         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
286         expect_payment_forwarded!(nodes[1], Some(1000), false);
287         check_added_monitors!(nodes[1], 1);
288         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
289         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
290
291         assert!(updates_2.update_add_htlcs.is_empty());
292         assert!(updates_2.update_fail_htlcs.is_empty());
293         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
294         assert!(updates_2.update_fee.is_none());
295         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
296         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
297         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
298
299         let events = nodes[0].node.get_and_clear_pending_events();
300         assert_eq!(events.len(), 1);
301         match events[0] {
302                 Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
303                         assert_eq!(our_payment_preimage, *payment_preimage);
304                         assert_eq!(our_payment_hash, *payment_hash);
305                 },
306                 _ => panic!("Unexpected event"),
307         }
308
309         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
310         if recv_count > 0 {
311                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
312                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
313                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
314                 let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
315                 assert!(node_0_2nd_closing_signed.is_some());
316         }
317
318         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
319         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
320
321         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
322         let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
323         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
324         if recv_count == 0 {
325                 // If all closing_signeds weren't delivered we can just resume where we left off...
326                 let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
327
328                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish);
329                 let node_0_msgs = nodes[0].node.get_and_clear_pending_msg_events();
330                 assert_eq!(node_0_msgs.len(), 2);
331                 let node_0_2nd_closing_signed = match node_0_msgs[1] {
332                         MessageSendEvent::SendClosingSigned { ref msg, .. } => {
333                                 assert_eq!(node_0_closing_signed, *msg);
334                                 msg.clone()
335                         },
336                         _ => panic!(),
337                 };
338
339                 let node_0_3rd_shutdown = match node_0_msgs[0] {
340                         MessageSendEvent::SendShutdown { ref msg, .. } => {
341                                 assert_eq!(node_0_2nd_shutdown, *msg);
342                                 msg.clone()
343                         },
344                         _ => panic!(),
345                 };
346                 assert!(node_0_2nd_shutdown == node_0_3rd_shutdown);
347
348                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish);
349                 let node_1_3rd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
350                 assert!(node_1_3rd_shutdown == node_1_2nd_shutdown);
351
352                 nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_3rd_shutdown);
353                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
354
355                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_3rd_shutdown);
356
357                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed);
358                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
359                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
360                 let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
361                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
362                 let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
363                 assert!(node_1_none.is_none());
364         } else {
365                 // If one node, however, received + responded with an identical closing_signed we end
366                 // up erroring and node[0] will try to broadcast its own latest commitment transaction.
367                 // There isn't really anything better we can do simply, but in the future we might
368                 // explore storing a set of recently-closed channels that got disconnected during
369                 // closing_signed and avoiding broadcasting local commitment txn for some timeout to
370                 // give our counterparty enough time to (potentially) broadcast a cooperative closing
371                 // transaction.
372                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
373
374                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish);
375                 let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
376                 assert_eq!(msg_events.len(), 1);
377                 if let MessageSendEvent::HandleError { ref action, .. } = msg_events[0] {
378                         match action {
379                                 &ErrorAction::SendErrorMessage { ref msg } => {
380                                         nodes[1].node.handle_error(&nodes[0].node.get_our_node_id(), &msg);
381                                         assert_eq!(msg.channel_id, chan_1.2);
382                                 },
383                                 _ => panic!("Unexpected event!"),
384                         }
385                 } else { panic!("Needed SendErrorMessage close"); }
386
387                 // get_closing_signed_broadcast usually eats the BroadcastChannelUpdate for us and
388                 // checks it, but in this case nodes[1] didn't ever get a chance to receive a
389                 // closing_signed so we do it ourselves
390                 check_closed_broadcast!(nodes[1], false);
391                 check_added_monitors!(nodes[1], 1);
392         }
393
394         assert!(nodes[0].node.list_channels().is_empty());
395
396         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
397         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
398         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
399         assert!(nodes[1].node.list_channels().is_empty());
400         assert!(nodes[2].node.list_channels().is_empty());
401 }
402
403 #[test]
404 fn test_shutdown_rebroadcast() {
405         do_test_shutdown_rebroadcast(0);
406         do_test_shutdown_rebroadcast(1);
407         do_test_shutdown_rebroadcast(2);
408 }
409
410 #[test]
411 fn test_upfront_shutdown_script() {
412         // BOLT 2 : Option upfront shutdown script, if peer commit its closing_script at channel opening
413         // enforce it at shutdown message
414
415         let mut config = UserConfig::default();
416         config.channel_options.announced_channel = true;
417         config.peer_channel_config_limits.force_announced_channel_preference = false;
418         config.channel_options.commit_upfront_shutdown_pubkey = false;
419         let user_cfgs = [None, Some(config), None];
420         let chanmon_cfgs = create_chanmon_cfgs(3);
421         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
422         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
423         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
424
425         // We test that in case of peer committing upfront to a script, if it changes at closing, we refuse to sign
426         let flags = InitFeatures::known();
427         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000, flags.clone(), flags.clone());
428         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
429         let mut node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
430         node_0_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
431         // Test we enforce upfront_scriptpbukey if by providing a diffrent one at closing that  we disconnect peer
432         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
433     assert!(regex::Regex::new(r"Got shutdown request with a scriptpubkey \([A-Fa-f0-9]+\) which did not match their previous scriptpubkey.").unwrap().is_match(check_closed_broadcast!(nodes[2], true).unwrap().data.as_str()));
434         check_added_monitors!(nodes[2], 1);
435
436         // We test that in case of peer committing upfront to a script, if it doesn't change at closing, we sign
437         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000, flags.clone(), flags.clone());
438         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
439         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
440         // We test that in case of peer committing upfront to a script, if it oesn't change at closing, we sign
441         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
442         let events = nodes[2].node.get_and_clear_pending_msg_events();
443         assert_eq!(events.len(), 1);
444         match events[0] {
445                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
446                 _ => panic!("Unexpected event"),
447         }
448
449         // We test that if case of peer non-signaling we don't enforce committed script at channel opening
450         let flags_no = InitFeatures::known().clear_upfront_shutdown_script();
451         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, flags_no, flags.clone());
452         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
453         let node_1_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
454         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
455         check_added_monitors!(nodes[1], 1);
456         let events = nodes[1].node.get_and_clear_pending_msg_events();
457         assert_eq!(events.len(), 1);
458         match events[0] {
459                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
460                 _ => panic!("Unexpected event"),
461         }
462
463         // We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
464         // channel smoothly, opt-out is from channel initiator here
465         let chan = create_announced_chan_between_nodes_with_value(&nodes, 1, 0, 1000000, 1000000, flags.clone(), flags.clone());
466         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
467         check_added_monitors!(nodes[1], 1);
468         let node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
469         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
470         let events = nodes[0].node.get_and_clear_pending_msg_events();
471         assert_eq!(events.len(), 1);
472         match events[0] {
473                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
474                 _ => panic!("Unexpected event"),
475         }
476
477         //// We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
478         //// channel smoothly
479         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, flags.clone(), flags.clone());
480         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
481         check_added_monitors!(nodes[1], 1);
482         let node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
483         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
484         let events = nodes[0].node.get_and_clear_pending_msg_events();
485         assert_eq!(events.len(), 2);
486         match events[0] {
487                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
488                 _ => panic!("Unexpected event"),
489         }
490         match events[1] {
491                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
492                 _ => panic!("Unexpected event"),
493         }
494 }
495
496 #[test]
497 fn test_unsupported_anysegwit_upfront_shutdown_script() {
498         let chanmon_cfgs = create_chanmon_cfgs(2);
499         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
500         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
501         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
502
503         // Use a non-v0 segwit script supported by option_shutdown_anysegwit
504         let node_features = InitFeatures::known().clear_shutdown_anysegwit();
505         let anysegwit_shutdown_script = Builder::new()
506                 .push_int(16)
507                 .push_slice(&[0, 40])
508                 .into_script();
509
510         // Check script when handling an open_channel message
511         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
512         let mut open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
513         open_channel.shutdown_scriptpubkey = Present(anysegwit_shutdown_script.clone());
514         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), node_features.clone(), &open_channel);
515
516         let events = nodes[1].node.get_and_clear_pending_msg_events();
517         assert_eq!(events.len(), 1);
518         match events[0] {
519                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
520                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
521                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: Script(OP_PUSHNUM_16 OP_PUSHBYTES_2 0028)");
522                 },
523                 _ => panic!("Unexpected event"),
524         }
525
526         // Check script when handling an accept_channel message
527         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
528         let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
529         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel);
530         let mut accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
531         accept_channel.shutdown_scriptpubkey = Present(anysegwit_shutdown_script.clone());
532         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), node_features, &accept_channel);
533
534         let events = nodes[0].node.get_and_clear_pending_msg_events();
535         assert_eq!(events.len(), 1);
536         match events[0] {
537                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
538                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
539                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: Script(OP_PUSHNUM_16 OP_PUSHBYTES_2 0028)");
540                 },
541                 _ => panic!("Unexpected event"),
542         }
543 }
544
545 #[test]
546 fn test_invalid_upfront_shutdown_script() {
547         let chanmon_cfgs = create_chanmon_cfgs(2);
548         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
549         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
550         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
551
552         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
553
554         // Use a segwit v0 script with an unsupported witness program
555         let mut open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
556         open_channel.shutdown_scriptpubkey = Present(Builder::new().push_int(0)
557                 .push_slice(&[0, 0])
558                 .into_script());
559         nodes[0].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel);
560
561         let events = nodes[0].node.get_and_clear_pending_msg_events();
562         assert_eq!(events.len(), 1);
563         match events[0] {
564                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
565                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
566                         assert_eq!(msg.data, "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: Script(OP_0 OP_PUSHBYTES_2 0000)");
567                 },
568                 _ => panic!("Unexpected event"),
569         }
570 }
571
572 #[test]
573 fn test_segwit_v0_shutdown_script() {
574         let mut config = UserConfig::default();
575         config.channel_options.announced_channel = true;
576         config.peer_channel_config_limits.force_announced_channel_preference = false;
577         config.channel_options.commit_upfront_shutdown_pubkey = false;
578         let user_cfgs = [None, Some(config), None];
579         let chanmon_cfgs = create_chanmon_cfgs(3);
580         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
581         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
582         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
583
584         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
585         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
586         check_added_monitors!(nodes[1], 1);
587
588         // Use a segwit v0 script supported even without option_shutdown_anysegwit
589         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
590         node_0_shutdown.scriptpubkey = Builder::new().push_int(0)
591                 .push_slice(&[0; 20])
592                 .into_script();
593         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
594
595         let events = nodes[0].node.get_and_clear_pending_msg_events();
596         assert_eq!(events.len(), 2);
597         match events[0] {
598                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
599                 _ => panic!("Unexpected event"),
600         }
601         match events[1] {
602                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
603                 _ => panic!("Unexpected event"),
604         }
605 }
606
607 #[test]
608 fn test_anysegwit_shutdown_script() {
609         let mut config = UserConfig::default();
610         config.channel_options.announced_channel = true;
611         config.peer_channel_config_limits.force_announced_channel_preference = false;
612         config.channel_options.commit_upfront_shutdown_pubkey = false;
613         let user_cfgs = [None, Some(config), None];
614         let chanmon_cfgs = create_chanmon_cfgs(3);
615         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
616         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
617         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
618
619         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
620         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
621         check_added_monitors!(nodes[1], 1);
622
623         // Use a non-v0 segwit script supported by option_shutdown_anysegwit
624         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
625         node_0_shutdown.scriptpubkey = Builder::new().push_int(16)
626                 .push_slice(&[0, 0])
627                 .into_script();
628         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
629
630         let events = nodes[0].node.get_and_clear_pending_msg_events();
631         assert_eq!(events.len(), 2);
632         match events[0] {
633                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
634                 _ => panic!("Unexpected event"),
635         }
636         match events[1] {
637                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
638                 _ => panic!("Unexpected event"),
639         }
640 }
641
642 #[test]
643 fn test_unsupported_anysegwit_shutdown_script() {
644         let mut config = UserConfig::default();
645         config.channel_options.announced_channel = true;
646         config.peer_channel_config_limits.force_announced_channel_preference = false;
647         config.channel_options.commit_upfront_shutdown_pubkey = false;
648         let user_cfgs = [None, Some(config), None];
649         let chanmon_cfgs = create_chanmon_cfgs(3);
650         let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
651         node_cfgs[0].features = InitFeatures::known().clear_shutdown_anysegwit();
652         node_cfgs[1].features = InitFeatures::known().clear_shutdown_anysegwit();
653         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
654         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
655
656         // Check that using an unsupported shutdown script fails and a supported one succeeds.
657         let supported_shutdown_script = chanmon_cfgs[1].keys_manager.get_shutdown_scriptpubkey();
658         let unsupported_shutdown_script =
659                 ShutdownScript::new_witness_program(NonZeroU8::new(16).unwrap(), &[0, 40]).unwrap();
660         chanmon_cfgs[1].keys_manager
661                 .expect(OnGetShutdownScriptpubkey { returns: unsupported_shutdown_script.clone() })
662                 .expect(OnGetShutdownScriptpubkey { returns: supported_shutdown_script });
663
664         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, node_cfgs[0].features.clone(), node_cfgs[1].features.clone());
665         match nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()) {
666                 Err(APIError::IncompatibleShutdownScript { script }) => {
667                         assert_eq!(script.into_inner(), unsupported_shutdown_script.clone().into_inner());
668                 },
669                 Err(e) => panic!("Unexpected error: {:?}", e),
670                 Ok(_) => panic!("Expected error"),
671         }
672         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
673         check_added_monitors!(nodes[1], 1);
674
675         // Use a non-v0 segwit script unsupported without option_shutdown_anysegwit
676         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
677         node_0_shutdown.scriptpubkey = unsupported_shutdown_script.into_inner();
678         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_cfgs[1].features, &node_0_shutdown);
679
680         let events = nodes[0].node.get_and_clear_pending_msg_events();
681         assert_eq!(events.len(), 2);
682         match events[1] {
683                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
684                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
685                         assert_eq!(msg.data, "Got a nonstandard scriptpubkey (60020028) from remote peer".to_owned());
686                 },
687                 _ => panic!("Unexpected event"),
688         }
689         check_added_monitors!(nodes[0], 1);
690 }
691
692 #[test]
693 fn test_invalid_shutdown_script() {
694         let mut config = UserConfig::default();
695         config.channel_options.announced_channel = true;
696         config.peer_channel_config_limits.force_announced_channel_preference = false;
697         config.channel_options.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 nodes = create_network(3, &node_cfgs, &node_chanmgrs);
703
704         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
705         nodes[1].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
706         check_added_monitors!(nodes[1], 1);
707
708         // Use a segwit v0 script with an unsupported witness program
709         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
710         node_0_shutdown.scriptpubkey = Builder::new().push_int(0)
711                 .push_slice(&[0, 0])
712                 .into_script();
713         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
714
715         let events = nodes[0].node.get_and_clear_pending_msg_events();
716         assert_eq!(events.len(), 2);
717         match events[1] {
718                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id } => {
719                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
720                         assert_eq!(msg.data, "Got a nonstandard scriptpubkey (00020000) from remote peer".to_owned())
721                 },
722                 _ => panic!("Unexpected event"),
723         }
724         check_added_monitors!(nodes[0], 1);
725 }
726
727 #[derive(PartialEq)]
728 enum TimeoutStep {
729         AfterShutdown,
730         AfterClosingSigned,
731         NoTimeout,
732 }
733
734 fn do_test_closing_signed_reinit_timeout(timeout_step: TimeoutStep) {
735         // The range-based closing signed negotiation allows the funder to restart the process with a
736         // new range if the previous range did not overlap. This allows implementations to request user
737         // intervention allowing users to enter a new fee range. We do not implement the sending side
738         // of this, instead opting to allow users to enter an explicit "willing to pay up to X to avoid
739         // force-closing" value and relying on that instead.
740         //
741         // Here we run test the fundee side of that restart mechanism, implementing the funder side of
742         // it manually.
743         let chanmon_cfgs = create_chanmon_cfgs(2);
744         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
745         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
746         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
747         let chan_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
748
749         send_payment(&nodes[0], &[&nodes[1]], 8_000_000);
750
751         nodes[0].node.close_channel(&chan_id).unwrap();
752         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
753         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
754         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
755         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
756
757         {
758                 // Now we set nodes[1] to require a relatively high feerate for closing. This should result
759                 // in it rejecting nodes[0]'s initial closing_signed, giving nodes[0] a chance to try
760                 // again.
761                 let mut feerate_lock = chanmon_cfgs[1].fee_estimator.sat_per_kw.lock().unwrap();
762                 *feerate_lock *= 10;
763         }
764
765         let mut node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
766         // nodes[0] should use a "reasonable" feerate, well under the 10 sat/vByte that nodes[1] thinks
767         // is the current prevailing feerate.
768         assert!(node_0_closing_signed.fee_satoshis <= 500);
769
770         if timeout_step != TimeoutStep::AfterShutdown {
771                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
772                 // At this point nodes[1] should send back a warning message indicating it disagrees with the
773                 // given channel-closing fee. Currently we do not implement warning messages so instead we
774                 // remain silent here.
775                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
776
777                 // Now deliver a mutated closing_signed indicating a higher acceptable fee range, which
778                 // nodes[1] should happily accept and respond to.
779                 node_0_closing_signed.fee_range.as_mut().unwrap().max_fee_satoshis *= 10;
780                 {
781                         let mut lock;
782                         get_channel_ref!(nodes[0], lock, chan_id).closing_fee_limits.as_mut().unwrap().1 *= 10;
783                 }
784                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
785                 let node_1_closing_signed = get_event_msg!(nodes[1], MessageSendEvent::SendClosingSigned, nodes[0].node.get_our_node_id());
786                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
787                 let node_0_2nd_closing_signed = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
788                 if timeout_step == TimeoutStep::NoTimeout {
789                         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.1.unwrap());
790                 }
791         }
792
793         if timeout_step != TimeoutStep::NoTimeout {
794                 assert!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().is_empty());
795         } else {
796                 assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
797         }
798
799         nodes[1].node.timer_tick_occurred();
800         nodes[1].node.timer_tick_occurred();
801
802         let txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
803         assert_eq!(txn.len(), 1);
804         assert_eq!(txn[0].output.len(), 2);
805
806         if timeout_step != TimeoutStep::NoTimeout {
807                 assert!((txn[0].output[0].script_pubkey.is_v0_p2wpkh() &&
808                          txn[0].output[1].script_pubkey.is_v0_p2wsh()) ||
809                         (txn[0].output[1].script_pubkey.is_v0_p2wpkh() &&
810                          txn[0].output[0].script_pubkey.is_v0_p2wsh()));
811                 check_closed_broadcast!(nodes[1], true);
812                 check_added_monitors!(nodes[1], 1);
813         } else {
814                 assert!(txn[0].output[0].script_pubkey.is_v0_p2wpkh());
815                 assert!(txn[0].output[1].script_pubkey.is_v0_p2wpkh());
816
817                 let events = nodes[1].node.get_and_clear_pending_msg_events();
818                 assert_eq!(events.len(), 1);
819                 match events[0] {
820                         MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
821                                 assert_eq!(msg.contents.flags & 2, 2);
822                         },
823                         _ => panic!("Unexpected event"),
824                 }
825         }
826 }
827
828 #[test]
829 fn test_closing_signed_reinit_timeout() {
830         do_test_closing_signed_reinit_timeout(TimeoutStep::AfterShutdown);
831         do_test_closing_signed_reinit_timeout(TimeoutStep::AfterClosingSigned);
832         do_test_closing_signed_reinit_timeout(TimeoutStep::NoTimeout);
833 }
834
835 fn do_simple_legacy_shutdown_test(high_initiator_fee: bool) {
836         // A simpe test of the legacy shutdown fee negotiation logic.
837         let chanmon_cfgs = create_chanmon_cfgs(2);
838         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
839         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
840         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
841
842         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
843
844         if high_initiator_fee {
845                 // If high_initiator_fee is set, set nodes[0]'s feerate significantly higher. This
846                 // shouldn't impact the flow at all given nodes[1] will happily accept the higher fee.
847                 let mut feerate_lock = chanmon_cfgs[0].fee_estimator.sat_per_kw.lock().unwrap();
848                 *feerate_lock *= 10;
849         }
850
851         nodes[0].node.close_channel(&OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id()).unwrap();
852         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
853         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
854         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
855         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
856
857         let mut node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
858         node_0_closing_signed.fee_range = None;
859         if high_initiator_fee {
860                 assert!(node_0_closing_signed.fee_satoshis > 500);
861         } else {
862                 assert!(node_0_closing_signed.fee_satoshis < 500);
863         }
864
865         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
866         let (_, mut node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
867         node_1_closing_signed.as_mut().unwrap().fee_range = None;
868
869         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
870         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
871         assert!(node_0_none.is_none());
872 }
873
874 #[test]
875 fn simple_legacy_shutdown_test() {
876         do_simple_legacy_shutdown_test(false);
877         do_simple_legacy_shutdown_test(true);
878 }
879
880 #[test]
881 fn simple_target_feerate_shutdown() {
882         // Simple test of target in `close_channel_with_target_feerate`.
883         let chanmon_cfgs = create_chanmon_cfgs(2);
884         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
885         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
886         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
887
888         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
889         let chan_id = OutPoint { txid: chan.3.txid(), index: 0 }.to_channel_id();
890
891         nodes[0].node.close_channel_with_target_feerate(&chan_id, 253 * 10).unwrap();
892         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
893         nodes[1].node.close_channel_with_target_feerate(&chan_id, 253 * 5).unwrap();
894         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
895
896         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &node_0_shutdown);
897         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &InitFeatures::known(), &node_1_shutdown);
898
899         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
900         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
901         let (_, node_1_closing_signed_opt) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
902         let node_1_closing_signed = node_1_closing_signed_opt.unwrap();
903
904         // nodes[1] was passed a target which was larger than the current channel feerate, which it
905         // should ignore in favor of the channel fee, as there is no use demanding a minimum higher
906         // than what will be paid on a force-close transaction. Note that we have to consider rounding,
907         // so only check that we're within 10 sats.
908         assert!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis >=
909                 node_1_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis * 10 - 5);
910         assert!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis <=
911                 node_1_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis * 10 + 5);
912
913         // Further, because nodes[0]'s target fee is larger than the `Normal` fee estimation plus our
914         // force-closure-avoidance buffer, min should equal max, and the nodes[1]-selected fee should
915         // be the nodes[0] only available fee.
916         assert_eq!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis,
917                    node_0_closing_signed.fee_range.as_ref().unwrap().max_fee_satoshis);
918         assert_eq!(node_0_closing_signed.fee_range.as_ref().unwrap().min_fee_satoshis,
919                    node_0_closing_signed.fee_satoshis);
920         assert_eq!(node_0_closing_signed.fee_satoshis, node_1_closing_signed.fee_satoshis);
921
922         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
923         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
924         assert!(node_0_none.is_none());
925 }