e945f05144bae0532623b21250b8868452bdf52d
[rust-lightning] / lightning / src / ln / chanmon_update_fail_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 //! Functional tests which test the correct handling of ChannelMonitorUpdateErr returns from
11 //! monitor updates.
12 //! There are a bunch of these as their handling is relatively error-prone so they are split out
13 //! here. See also the chanmon_fail_consistency fuzz test.
14
15 use bitcoin::blockdata::block::{Block, BlockHeader};
16 use bitcoin::blockdata::constants::genesis_block;
17 use bitcoin::hash_types::BlockHash;
18 use bitcoin::network::constants::Network;
19 use chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr};
20 use chain::transaction::OutPoint;
21 use chain::Listen;
22 use chain::Watch;
23 use ln::{PaymentPreimage, PaymentHash};
24 use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure};
25 use ln::features::{InitFeatures, InvoiceFeatures};
26 use ln::msgs;
27 use ln::msgs::{ChannelMessageHandler, ErrorAction, RoutingMessageHandler};
28 use routing::router::get_route;
29 use util::config::UserConfig;
30 use util::enforcing_trait_impls::EnforcingSigner;
31 use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
32 use util::errors::APIError;
33 use util::ser::{ReadableArgs, Writeable};
34 use util::test_utils::TestBroadcaster;
35
36 use bitcoin::hashes::sha256::Hash as Sha256;
37 use bitcoin::hashes::Hash;
38
39 use ln::functional_test_utils::*;
40
41 use util::test_utils;
42
43 use prelude::*;
44 use std::collections::HashMap;
45 use std::sync::{Arc, Mutex};
46
47 // If persister_fail is true, we have the persister return a PermanentFailure
48 // instead of the higher-level ChainMonitor.
49 fn do_test_simple_monitor_permanent_update_fail(persister_fail: bool) {
50         // Test that we handle a simple permanent monitor update failure
51         let mut chanmon_cfgs = create_chanmon_cfgs(2);
52         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
53         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
54         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
55         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
56         let logger = test_utils::TestLogger::new();
57
58         let (_, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(&nodes[1]);
59
60         match persister_fail {
61                 true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::PermanentFailure)),
62                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::PermanentFailure))
63         }
64         let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
65         let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
66         unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)), true, APIError::ChannelUnavailable {..}, {});
67         check_added_monitors!(nodes[0], 2);
68
69         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
70         assert_eq!(events_1.len(), 2);
71         match events_1[0] {
72                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
73                 _ => panic!("Unexpected event"),
74         };
75         match events_1[1] {
76                 MessageSendEvent::HandleError { node_id, .. } => assert_eq!(node_id, nodes[1].node.get_our_node_id()),
77                 _ => panic!("Unexpected event"),
78         };
79
80         // TODO: Once we hit the chain with the failure transaction we should check that we get a
81         // PaymentFailed event
82
83         assert_eq!(nodes[0].node.list_channels().len(), 0);
84 }
85
86 #[test]
87 fn test_monitor_and_persister_update_fail() {
88         // Test that if both updating the `ChannelMonitor` and persisting the updated
89         // `ChannelMonitor` fail, then the failure from updating the `ChannelMonitor`
90         // one that gets returned.
91         let chanmon_cfgs = create_chanmon_cfgs(2);
92         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
93         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
94         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
95
96         // Create some initial channel
97         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
98         let outpoint = OutPoint { txid: chan.3.txid(), index: 0 };
99
100         // Rebalance the network to generate htlc in the two directions
101         send_payment(&nodes[0], &vec!(&nodes[1])[..], 10_000_000);
102
103         // Route an HTLC from node 0 to node 1 (but don't settle)
104         let preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9_000_000).0;
105
106         // Make a copy of the ChainMonitor so we can capture the error it returns on a
107         // bogus update. Note that if instead we updated the nodes[0]'s ChainMonitor
108         // directly, the node would fail to be `Drop`'d at the end because its
109         // ChannelManager and ChainMonitor would be out of sync.
110         let chain_source = test_utils::TestChainSource::new(Network::Testnet);
111         let logger = test_utils::TestLogger::with_id(format!("node {}", 0));
112         let persister = test_utils::TestPersister::new();
113         let tx_broadcaster = TestBroadcaster {
114                 txn_broadcasted: Mutex::new(Vec::new()),
115                 // Because we will connect a block at height 200 below, we need the TestBroadcaster to know
116                 // that we are at height 200 so that it doesn't think we're violating the time lock
117                 // requirements of transactions broadcasted at that point.
118                 blocks: Arc::new(Mutex::new(vec![(genesis_block(Network::Testnet).header, 200); 200])),
119         };
120         let chain_mon = {
121                 let monitors = nodes[0].chain_monitor.chain_monitor.monitors.read().unwrap();
122                 let monitor = monitors.get(&outpoint).unwrap();
123                 let mut w = test_utils::TestVecWriter(Vec::new());
124                 monitor.write(&mut w).unwrap();
125                 let new_monitor = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
126                         &mut ::std::io::Cursor::new(&w.0), &test_utils::OnlyReadsKeysInterface {}).unwrap().1;
127                 assert!(new_monitor == *monitor);
128                 let chain_mon = test_utils::TestChainMonitor::new(Some(&chain_source), &tx_broadcaster, &logger, &chanmon_cfgs[0].fee_estimator, &persister, &node_cfgs[0].keys_manager);
129                 assert!(chain_mon.watch_channel(outpoint, new_monitor).is_ok());
130                 chain_mon
131         };
132         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
133         chain_mon.chain_monitor.block_connected(&Block { header, txdata: vec![] }, 200);
134
135         // Set the persister's return value to be a TemporaryFailure.
136         persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure));
137
138         // Try to update ChannelMonitor
139         assert!(nodes[1].node.claim_funds(preimage));
140         check_added_monitors!(nodes[1], 1);
141         let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
142         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
143         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
144         if let Some(ref mut channel) = nodes[0].node.channel_state.lock().unwrap().by_id.get_mut(&chan.2) {
145                 if let Ok((_, _, _, update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].fee_estimator, &node_cfgs[0].logger) {
146                         // Check that even though the persister is returning a TemporaryFailure,
147                         // because the update is bogus, ultimately the error that's returned
148                         // should be a PermanentFailure.
149                         if let Err(ChannelMonitorUpdateErr::PermanentFailure) = chain_mon.chain_monitor.update_channel(outpoint, update.clone()) {} else { panic!("Expected monitor error to be permanent"); }
150                         logger.assert_log_contains("lightning::chain::chainmonitor".to_string(), "Failed to persist channel monitor update: TemporaryFailure".to_string(), 1);
151                         if let Ok(_) = nodes[0].chain_monitor.update_channel(outpoint, update) {} else { assert!(false); }
152                 } else { assert!(false); }
153         } else { assert!(false); };
154
155         check_added_monitors!(nodes[0], 1);
156         let events = nodes[0].node.get_and_clear_pending_events();
157         assert_eq!(events.len(), 1);
158 }
159
160 #[test]
161 fn test_simple_monitor_permanent_update_fail() {
162         do_test_simple_monitor_permanent_update_fail(false);
163
164         // Test behavior when the persister returns a PermanentFailure.
165         do_test_simple_monitor_permanent_update_fail(true);
166 }
167
168 // If persister_fail is true, we have the persister return a TemporaryFailure instead of the
169 // higher-level ChainMonitor.
170 fn do_test_simple_monitor_temporary_update_fail(disconnect: bool, persister_fail: bool) {
171         // Test that we can recover from a simple temporary monitor update failure optionally with
172         // a disconnect in between
173         let mut chanmon_cfgs = create_chanmon_cfgs(2);
174         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
175         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
176         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
177         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
178         let logger = test_utils::TestLogger::new();
179
180         let (payment_preimage_1, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(&nodes[1]);
181
182         match persister_fail {
183                 true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure)),
184                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure))
185         }
186
187         {
188                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
189                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
190                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)), false, APIError::MonitorUpdateFailed, {});
191                 check_added_monitors!(nodes[0], 1);
192         }
193
194         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
195         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
196         assert_eq!(nodes[0].node.list_channels().len(), 1);
197
198         if disconnect {
199                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
200                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
201                 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
202         }
203
204         match persister_fail {
205                 true => chanmon_cfgs[0].persister.set_update_ret(Ok(())),
206                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()))
207         }
208         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
209         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
210         check_added_monitors!(nodes[0], 0);
211
212         let mut events_2 = nodes[0].node.get_and_clear_pending_msg_events();
213         assert_eq!(events_2.len(), 1);
214         let payment_event = SendEvent::from_event(events_2.pop().unwrap());
215         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
216         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
217         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
218
219         expect_pending_htlcs_forwardable!(nodes[1]);
220
221         let events_3 = nodes[1].node.get_and_clear_pending_events();
222         assert_eq!(events_3.len(), 1);
223         match events_3[0] {
224                 Event::PaymentReceived { ref payment_hash, ref payment_preimage, ref payment_secret, amt, user_payment_id: _ } => {
225                         assert_eq!(payment_hash_1, *payment_hash);
226                         assert!(payment_preimage.is_none());
227                         assert_eq!(payment_secret_1, *payment_secret);
228                         assert_eq!(amt, 1000000);
229                 },
230                 _ => panic!("Unexpected event"),
231         }
232
233         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
234
235         // Now set it to failed again...
236         let (_, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(&nodes[1]);
237         {
238                 match persister_fail {
239                         true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure)),
240                         false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure))
241                 }
242                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
243                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
244                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)), false, APIError::MonitorUpdateFailed, {});
245                 check_added_monitors!(nodes[0], 1);
246         }
247
248         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
249         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
250         assert_eq!(nodes[0].node.list_channels().len(), 1);
251
252         if disconnect {
253                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
254                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
255                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
256         }
257
258         // ...and make sure we can force-close a frozen channel
259         nodes[0].node.force_close_channel(&channel_id).unwrap();
260         check_added_monitors!(nodes[0], 1);
261         check_closed_broadcast!(nodes[0], true);
262
263         // TODO: Once we hit the chain with the failure transaction we should check that we get a
264         // PaymentFailed event
265
266         assert_eq!(nodes[0].node.list_channels().len(), 0);
267 }
268
269 #[test]
270 fn test_simple_monitor_temporary_update_fail() {
271         do_test_simple_monitor_temporary_update_fail(false, false);
272         do_test_simple_monitor_temporary_update_fail(true, false);
273
274         // Test behavior when the persister returns a TemporaryFailure.
275         do_test_simple_monitor_temporary_update_fail(false, true);
276         do_test_simple_monitor_temporary_update_fail(true, true);
277 }
278
279 fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
280         let disconnect_flags = 8 | 16;
281
282         // Test that we can recover from a temporary monitor update failure with some in-flight
283         // HTLCs going on at the same time potentially with some disconnection thrown in.
284         // * First we route a payment, then get a temporary monitor update failure when trying to
285         //   route a second payment. We then claim the first payment.
286         // * If disconnect_count is set, we will disconnect at this point (which is likely as
287         //   TemporaryFailure likely indicates net disconnect which resulted in failing to update
288         //   the ChannelMonitor on a watchtower).
289         // * If !(disconnect_count & 16) we deliver a update_fulfill_htlc/CS for the first payment
290         //   immediately, otherwise we wait disconnect and deliver them via the reconnect
291         //   channel_reestablish processing (ie disconnect_count & 16 makes no sense if
292         //   disconnect_count & !disconnect_flags is 0).
293         // * We then update the channel monitor, reconnecting if disconnect_count is set and walk
294         //   through message sending, potentially disconnect/reconnecting multiple times based on
295         //   disconnect_count, to get the update_fulfill_htlc through.
296         // * We then walk through more message exchanges to get the original update_add_htlc
297         //   through, swapping message ordering based on disconnect_count & 8 and optionally
298         //   disconnect/reconnecting based on disconnect_count.
299         let chanmon_cfgs = create_chanmon_cfgs(2);
300         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
301         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
302         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
303         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
304         let logger = test_utils::TestLogger::new();
305
306         let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
307
308         // Now try to send a second payment which will fail to send
309         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
310         {
311                 *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
312                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
313                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
314                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)), false, APIError::MonitorUpdateFailed, {});
315                 check_added_monitors!(nodes[0], 1);
316         }
317
318         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
319         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
320         assert_eq!(nodes[0].node.list_channels().len(), 1);
321
322         // Claim the previous payment, which will result in a update_fulfill_htlc/CS from nodes[1]
323         // but nodes[0] won't respond since it is frozen.
324         assert!(nodes[1].node.claim_funds(payment_preimage_1));
325         check_added_monitors!(nodes[1], 1);
326         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
327         assert_eq!(events_2.len(), 1);
328         let (bs_initial_fulfill, bs_initial_commitment_signed) = match events_2[0] {
329                 MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
330                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
331                         assert!(update_add_htlcs.is_empty());
332                         assert_eq!(update_fulfill_htlcs.len(), 1);
333                         assert!(update_fail_htlcs.is_empty());
334                         assert!(update_fail_malformed_htlcs.is_empty());
335                         assert!(update_fee.is_none());
336
337                         if (disconnect_count & 16) == 0 {
338                                 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]);
339                                 let events_3 = nodes[0].node.get_and_clear_pending_events();
340                                 assert_eq!(events_3.len(), 1);
341                                 match events_3[0] {
342                                         Event::PaymentSent { ref payment_preimage } => {
343                                                 assert_eq!(*payment_preimage, payment_preimage_1);
344                                         },
345                                         _ => panic!("Unexpected event"),
346                                 }
347
348                                 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed);
349                                 check_added_monitors!(nodes[0], 1);
350                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
351                                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
352                         }
353
354                         (update_fulfill_htlcs[0].clone(), commitment_signed.clone())
355                 },
356                 _ => panic!("Unexpected event"),
357         };
358
359         if disconnect_count & !disconnect_flags > 0 {
360                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
361                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
362         }
363
364         // Now fix monitor updating...
365         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
366         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
367         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
368         check_added_monitors!(nodes[0], 0);
369
370         macro_rules! disconnect_reconnect_peers { () => { {
371                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
372                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
373
374                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
375                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
376                 assert_eq!(reestablish_1.len(), 1);
377                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
378                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
379                 assert_eq!(reestablish_2.len(), 1);
380
381                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
382                 let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
383                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
384                 let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
385
386                 assert!(as_resp.0.is_none());
387                 assert!(bs_resp.0.is_none());
388
389                 (reestablish_1, reestablish_2, as_resp, bs_resp)
390         } } }
391
392         let (payment_event, initial_revoke_and_ack) = if disconnect_count & !disconnect_flags > 0 {
393                 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
394                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
395
396                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
397                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
398                 assert_eq!(reestablish_1.len(), 1);
399                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
400                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
401                 assert_eq!(reestablish_2.len(), 1);
402
403                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
404                 check_added_monitors!(nodes[0], 0);
405                 let mut as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
406                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
407                 check_added_monitors!(nodes[1], 0);
408                 let mut bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
409
410                 assert!(as_resp.0.is_none());
411                 assert!(bs_resp.0.is_none());
412
413                 assert!(bs_resp.1.is_none());
414                 if (disconnect_count & 16) == 0 {
415                         assert!(bs_resp.2.is_none());
416
417                         assert!(as_resp.1.is_some());
418                         assert!(as_resp.2.is_some());
419                         assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
420                 } else {
421                         assert!(bs_resp.2.as_ref().unwrap().update_add_htlcs.is_empty());
422                         assert!(bs_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
423                         assert!(bs_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
424                         assert!(bs_resp.2.as_ref().unwrap().update_fee.is_none());
425                         assert!(bs_resp.2.as_ref().unwrap().update_fulfill_htlcs == vec![bs_initial_fulfill]);
426                         assert!(bs_resp.2.as_ref().unwrap().commitment_signed == bs_initial_commitment_signed);
427
428                         assert!(as_resp.1.is_none());
429
430                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().update_fulfill_htlcs[0]);
431                         let events_3 = nodes[0].node.get_and_clear_pending_events();
432                         assert_eq!(events_3.len(), 1);
433                         match events_3[0] {
434                                 Event::PaymentSent { ref payment_preimage } => {
435                                         assert_eq!(*payment_preimage, payment_preimage_1);
436                                 },
437                                 _ => panic!("Unexpected event"),
438                         }
439
440                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().commitment_signed);
441                         let as_resp_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
442                         // No commitment_signed so get_event_msg's assert(len == 1) passes
443                         check_added_monitors!(nodes[0], 1);
444
445                         as_resp.1 = Some(as_resp_raa);
446                         bs_resp.2 = None;
447                 }
448
449                 if disconnect_count & !disconnect_flags > 1 {
450                         let (second_reestablish_1, second_reestablish_2, second_as_resp, second_bs_resp) = disconnect_reconnect_peers!();
451
452                         if (disconnect_count & 16) == 0 {
453                                 assert!(reestablish_1 == second_reestablish_1);
454                                 assert!(reestablish_2 == second_reestablish_2);
455                         }
456                         assert!(as_resp == second_as_resp);
457                         assert!(bs_resp == second_bs_resp);
458                 }
459
460                 (SendEvent::from_commitment_update(nodes[1].node.get_our_node_id(), as_resp.2.unwrap()), as_resp.1.unwrap())
461         } else {
462                 let mut events_4 = nodes[0].node.get_and_clear_pending_msg_events();
463                 assert_eq!(events_4.len(), 2);
464                 (SendEvent::from_event(events_4.remove(0)), match events_4[0] {
465                         MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
466                                 assert_eq!(*node_id, nodes[1].node.get_our_node_id());
467                                 msg.clone()
468                         },
469                         _ => panic!("Unexpected event"),
470                 })
471         };
472
473         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
474
475         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
476         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
477         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
478         // nodes[1] is awaiting an RAA from nodes[0] still so get_event_msg's assert(len == 1) passes
479         check_added_monitors!(nodes[1], 1);
480
481         if disconnect_count & !disconnect_flags > 2 {
482                 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
483
484                 assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
485                 assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
486
487                 assert!(as_resp.2.is_none());
488                 assert!(bs_resp.2.is_none());
489         }
490
491         let as_commitment_update;
492         let bs_second_commitment_update;
493
494         macro_rules! handle_bs_raa { () => {
495                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
496                 as_commitment_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
497                 assert!(as_commitment_update.update_add_htlcs.is_empty());
498                 assert!(as_commitment_update.update_fulfill_htlcs.is_empty());
499                 assert!(as_commitment_update.update_fail_htlcs.is_empty());
500                 assert!(as_commitment_update.update_fail_malformed_htlcs.is_empty());
501                 assert!(as_commitment_update.update_fee.is_none());
502                 check_added_monitors!(nodes[0], 1);
503         } }
504
505         macro_rules! handle_initial_raa { () => {
506                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &initial_revoke_and_ack);
507                 bs_second_commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
508                 assert!(bs_second_commitment_update.update_add_htlcs.is_empty());
509                 assert!(bs_second_commitment_update.update_fulfill_htlcs.is_empty());
510                 assert!(bs_second_commitment_update.update_fail_htlcs.is_empty());
511                 assert!(bs_second_commitment_update.update_fail_malformed_htlcs.is_empty());
512                 assert!(bs_second_commitment_update.update_fee.is_none());
513                 check_added_monitors!(nodes[1], 1);
514         } }
515
516         if (disconnect_count & 8) == 0 {
517                 handle_bs_raa!();
518
519                 if disconnect_count & !disconnect_flags > 3 {
520                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
521
522                         assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
523                         assert!(bs_resp.1.is_none());
524
525                         assert!(as_resp.2.unwrap() == as_commitment_update);
526                         assert!(bs_resp.2.is_none());
527
528                         assert!(as_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
529                 }
530
531                 handle_initial_raa!();
532
533                 if disconnect_count & !disconnect_flags > 4 {
534                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
535
536                         assert!(as_resp.1.is_none());
537                         assert!(bs_resp.1.is_none());
538
539                         assert!(as_resp.2.unwrap() == as_commitment_update);
540                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
541                 }
542         } else {
543                 handle_initial_raa!();
544
545                 if disconnect_count & !disconnect_flags > 3 {
546                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
547
548                         assert!(as_resp.1.is_none());
549                         assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
550
551                         assert!(as_resp.2.is_none());
552                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
553
554                         assert!(bs_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
555                 }
556
557                 handle_bs_raa!();
558
559                 if disconnect_count & !disconnect_flags > 4 {
560                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
561
562                         assert!(as_resp.1.is_none());
563                         assert!(bs_resp.1.is_none());
564
565                         assert!(as_resp.2.unwrap() == as_commitment_update);
566                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
567                 }
568         }
569
570         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_update.commitment_signed);
571         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
572         // No commitment_signed so get_event_msg's assert(len == 1) passes
573         check_added_monitors!(nodes[0], 1);
574
575         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_update.commitment_signed);
576         let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
577         // No commitment_signed so get_event_msg's assert(len == 1) passes
578         check_added_monitors!(nodes[1], 1);
579
580         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
581         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
582         check_added_monitors!(nodes[1], 1);
583
584         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack);
585         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
586         check_added_monitors!(nodes[0], 1);
587
588         expect_pending_htlcs_forwardable!(nodes[1]);
589
590         let events_5 = nodes[1].node.get_and_clear_pending_events();
591         assert_eq!(events_5.len(), 1);
592         match events_5[0] {
593                 Event::PaymentReceived { ref payment_hash, ref payment_preimage, ref payment_secret, amt, user_payment_id: _ } => {
594                         assert_eq!(payment_hash_2, *payment_hash);
595                         assert!(payment_preimage.is_none());
596                         assert_eq!(payment_secret_2, *payment_secret);
597                         assert_eq!(amt, 1000000);
598                 },
599                 _ => panic!("Unexpected event"),
600         }
601
602         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
603 }
604
605 #[test]
606 fn test_monitor_temporary_update_fail_a() {
607         do_test_monitor_temporary_update_fail(0);
608         do_test_monitor_temporary_update_fail(1);
609         do_test_monitor_temporary_update_fail(2);
610         do_test_monitor_temporary_update_fail(3);
611         do_test_monitor_temporary_update_fail(4);
612         do_test_monitor_temporary_update_fail(5);
613 }
614
615 #[test]
616 fn test_monitor_temporary_update_fail_b() {
617         do_test_monitor_temporary_update_fail(2 | 8);
618         do_test_monitor_temporary_update_fail(3 | 8);
619         do_test_monitor_temporary_update_fail(4 | 8);
620         do_test_monitor_temporary_update_fail(5 | 8);
621 }
622
623 #[test]
624 fn test_monitor_temporary_update_fail_c() {
625         do_test_monitor_temporary_update_fail(1 | 16);
626         do_test_monitor_temporary_update_fail(2 | 16);
627         do_test_monitor_temporary_update_fail(3 | 16);
628         do_test_monitor_temporary_update_fail(2 | 8 | 16);
629         do_test_monitor_temporary_update_fail(3 | 8 | 16);
630 }
631
632 #[test]
633 fn test_monitor_update_fail_cs() {
634         // Tests handling of a monitor update failure when processing an incoming commitment_signed
635         let chanmon_cfgs = create_chanmon_cfgs(2);
636         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
637         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
638         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
639         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
640         let logger = test_utils::TestLogger::new();
641
642         let (payment_preimage, our_payment_hash, our_payment_secret) = get_payment_preimage_hash!(nodes[1]);
643         {
644                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
645                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
646                 nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
647                 check_added_monitors!(nodes[0], 1);
648         }
649
650         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
651         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
652
653         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
654         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event.commitment_msg);
655         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
656         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
657         check_added_monitors!(nodes[1], 1);
658         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
659
660         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
661         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
662         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
663         check_added_monitors!(nodes[1], 0);
664         let responses = nodes[1].node.get_and_clear_pending_msg_events();
665         assert_eq!(responses.len(), 2);
666
667         match responses[0] {
668                 MessageSendEvent::SendRevokeAndACK { ref msg, ref node_id } => {
669                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
670                         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &msg);
671                         check_added_monitors!(nodes[0], 1);
672                 },
673                 _ => panic!("Unexpected event"),
674         }
675         match responses[1] {
676                 MessageSendEvent::UpdateHTLCs { ref updates, ref node_id } => {
677                         assert!(updates.update_add_htlcs.is_empty());
678                         assert!(updates.update_fulfill_htlcs.is_empty());
679                         assert!(updates.update_fail_htlcs.is_empty());
680                         assert!(updates.update_fail_malformed_htlcs.is_empty());
681                         assert!(updates.update_fee.is_none());
682                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
683
684                         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
685                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
686                         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
687                         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
688                         check_added_monitors!(nodes[0], 1);
689                         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
690                 },
691                 _ => panic!("Unexpected event"),
692         }
693
694         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
695         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
696         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
697         check_added_monitors!(nodes[0], 0);
698
699         let final_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
700         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &final_raa);
701         check_added_monitors!(nodes[1], 1);
702
703         expect_pending_htlcs_forwardable!(nodes[1]);
704
705         let events = nodes[1].node.get_and_clear_pending_events();
706         assert_eq!(events.len(), 1);
707         match events[0] {
708                 Event::PaymentReceived { payment_hash, payment_preimage, payment_secret, amt, user_payment_id: _ } => {
709                         assert_eq!(payment_hash, our_payment_hash);
710                         assert!(payment_preimage.is_none());
711                         assert_eq!(our_payment_secret, payment_secret);
712                         assert_eq!(amt, 1000000);
713                 },
714                 _ => panic!("Unexpected event"),
715         };
716
717         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage);
718 }
719
720 #[test]
721 fn test_monitor_update_fail_no_rebroadcast() {
722         // Tests handling of a monitor update failure when no message rebroadcasting on
723         // channel_monitor_updated() is required. Backported from chanmon_fail_consistency
724         // fuzz tests.
725         let chanmon_cfgs = create_chanmon_cfgs(2);
726         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
727         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
728         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
729         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
730         let logger = test_utils::TestLogger::new();
731
732         let (payment_preimage_1, our_payment_hash, payment_secret_1) = get_payment_preimage_hash!(nodes[1]);
733         {
734                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
735                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
736                 nodes[0].node.send_payment(&route, our_payment_hash, &Some(payment_secret_1)).unwrap();
737                 check_added_monitors!(nodes[0], 1);
738         }
739
740         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
741         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
742         let bs_raa = commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true, false, true);
743
744         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
745         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_raa);
746         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
747         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
748         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
749         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
750         check_added_monitors!(nodes[1], 1);
751
752         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
753         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
754         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
755         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
756         check_added_monitors!(nodes[1], 0);
757         expect_pending_htlcs_forwardable!(nodes[1]);
758
759         let events = nodes[1].node.get_and_clear_pending_events();
760         assert_eq!(events.len(), 1);
761         match events[0] {
762                 Event::PaymentReceived { payment_hash, .. } => {
763                         assert_eq!(payment_hash, our_payment_hash);
764                 },
765                 _ => panic!("Unexpected event"),
766         }
767
768         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
769 }
770
771 #[test]
772 fn test_monitor_update_raa_while_paused() {
773         // Tests handling of an RAA while monitor updating has already been marked failed.
774         // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
775         let chanmon_cfgs = create_chanmon_cfgs(2);
776         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
777         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
778         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
779         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
780         let logger = test_utils::TestLogger::new();
781
782         send_payment(&nodes[0], &[&nodes[1]], 5000000);
783         let (payment_preimage_1, our_payment_hash_1, our_payment_secret_1) = get_payment_preimage_hash!(nodes[1]);
784         {
785                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
786                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
787                 nodes[0].node.send_payment(&route, our_payment_hash_1, &Some(our_payment_secret_1)).unwrap();
788                 check_added_monitors!(nodes[0], 1);
789         }
790         let send_event_1 = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
791
792         let (payment_preimage_2, our_payment_hash_2, our_payment_secret_2) = get_payment_preimage_hash!(nodes[0]);
793         {
794                 let net_graph_msg_handler = &nodes[1].net_graph_msg_handler;
795                 let route = get_route(&nodes[1].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
796                 nodes[1].node.send_payment(&route, our_payment_hash_2, &Some(our_payment_secret_2)).unwrap();
797                 check_added_monitors!(nodes[1], 1);
798         }
799         let send_event_2 = SendEvent::from_event(nodes[1].node.get_and_clear_pending_msg_events().remove(0));
800
801         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event_1.msgs[0]);
802         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event_1.commitment_msg);
803         check_added_monitors!(nodes[1], 1);
804         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
805
806         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
807         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_2.msgs[0]);
808         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_2.commitment_msg);
809         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
810         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
811         check_added_monitors!(nodes[0], 1);
812
813         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
814         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
815         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
816         check_added_monitors!(nodes[0], 1);
817
818         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
819         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
820         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
821         check_added_monitors!(nodes[0], 0);
822
823         let as_update_raa = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
824         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_update_raa.0);
825         check_added_monitors!(nodes[1], 1);
826         let bs_cs = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
827
828         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update_raa.1);
829         check_added_monitors!(nodes[1], 1);
830         let bs_second_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
831
832         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs.commitment_signed);
833         check_added_monitors!(nodes[0], 1);
834         let as_second_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
835
836         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_raa);
837         check_added_monitors!(nodes[0], 1);
838         expect_pending_htlcs_forwardable!(nodes[0]);
839         expect_payment_received!(nodes[0], our_payment_hash_2, our_payment_secret_2, 1000000);
840
841         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_raa);
842         check_added_monitors!(nodes[1], 1);
843         expect_pending_htlcs_forwardable!(nodes[1]);
844         expect_payment_received!(nodes[1], our_payment_hash_1, our_payment_secret_1, 1000000);
845
846         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
847         claim_payment(&nodes[1], &[&nodes[0]], payment_preimage_2);
848 }
849
850 fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
851         // Tests handling of a monitor update failure when processing an incoming RAA
852         let chanmon_cfgs = create_chanmon_cfgs(3);
853         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
854         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
855         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
856         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
857         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
858         let logger = test_utils::TestLogger::new();
859
860         // Rebalance a bit so that we can send backwards from 2 to 1.
861         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000);
862
863         // Route a first payment that we'll fail backwards
864         let (_, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
865
866         // Fail the payment backwards, failing the monitor update on nodes[1]'s receipt of the RAA
867         assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1));
868         expect_pending_htlcs_forwardable!(nodes[2]);
869         check_added_monitors!(nodes[2], 1);
870
871         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
872         assert!(updates.update_add_htlcs.is_empty());
873         assert!(updates.update_fulfill_htlcs.is_empty());
874         assert_eq!(updates.update_fail_htlcs.len(), 1);
875         assert!(updates.update_fail_malformed_htlcs.is_empty());
876         assert!(updates.update_fee.is_none());
877         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
878
879         let bs_revoke_and_ack = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
880         check_added_monitors!(nodes[0], 0);
881
882         // While the second channel is AwaitingRAA, forward a second payment to get it into the
883         // holding cell.
884         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[2]);
885         {
886                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
887                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
888                 nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
889                 check_added_monitors!(nodes[0], 1);
890         }
891
892         let mut send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
893         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
894         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false);
895
896         expect_pending_htlcs_forwardable!(nodes[1]);
897         check_added_monitors!(nodes[1], 0);
898         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
899
900         // Now fail monitor updating.
901         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
902         nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
903         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
904         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
905         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
906         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
907         check_added_monitors!(nodes[1], 1);
908
909         // Attempt to forward a third payment but fail due to the second channel being unavailable
910         // for forwarding.
911         let (_, payment_hash_3, payment_secret_3) = get_payment_preimage_hash!(nodes[2]);
912         {
913                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
914                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
915                 nodes[0].node.send_payment(&route, payment_hash_3, &Some(payment_secret_3)).unwrap();
916                 check_added_monitors!(nodes[0], 1);
917         }
918
919         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(())); // We succeed in updating the monitor for the first channel
920         send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
921         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
922         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true);
923         check_added_monitors!(nodes[1], 0);
924
925         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
926         assert_eq!(events_2.len(), 1);
927         match events_2.remove(0) {
928                 MessageSendEvent::UpdateHTLCs { node_id, updates } => {
929                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
930                         assert!(updates.update_fulfill_htlcs.is_empty());
931                         assert_eq!(updates.update_fail_htlcs.len(), 1);
932                         assert!(updates.update_fail_malformed_htlcs.is_empty());
933                         assert!(updates.update_add_htlcs.is_empty());
934                         assert!(updates.update_fee.is_none());
935
936                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
937                         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true);
938
939                         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
940                         assert_eq!(msg_events.len(), 1);
941                         match msg_events[0] {
942                                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
943                                         assert_eq!(msg.contents.short_channel_id, chan_2.0.contents.short_channel_id);
944                                         assert_eq!(msg.contents.flags & 2, 2); // temp disabled
945                                 },
946                                 _ => panic!("Unexpected event"),
947                         }
948
949                         let events = nodes[0].node.get_and_clear_pending_events();
950                         assert_eq!(events.len(), 1);
951                         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
952                                 assert_eq!(payment_hash, payment_hash_3);
953                                 assert!(!rejected_by_dest);
954                         } else { panic!("Unexpected event!"); }
955                 },
956                 _ => panic!("Unexpected event type!"),
957         };
958
959         let (payment_preimage_4, payment_hash_4) = if test_ignore_second_cs {
960                 // Try to route another payment backwards from 2 to make sure 1 holds off on responding
961                 let (payment_preimage_4, payment_hash_4, payment_secret_4) = get_payment_preimage_hash!(nodes[0]);
962                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
963                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
964                 nodes[2].node.send_payment(&route, payment_hash_4, &Some(payment_secret_4)).unwrap();
965                 check_added_monitors!(nodes[2], 1);
966
967                 send_event = SendEvent::from_event(nodes[2].node.get_and_clear_pending_msg_events().remove(0));
968                 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &send_event.msgs[0]);
969                 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &send_event.commitment_msg);
970                 check_added_monitors!(nodes[1], 1);
971                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
972                 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
973                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
974                 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
975                 (Some(payment_preimage_4), Some(payment_hash_4))
976         } else { (None, None) };
977
978         // Restore monitor updating, ensuring we immediately get a fail-back update and a
979         // update_add update.
980         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
981         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_2.2).unwrap().clone();
982         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
983         check_added_monitors!(nodes[1], 0);
984         expect_pending_htlcs_forwardable!(nodes[1]);
985         check_added_monitors!(nodes[1], 1);
986
987         let mut events_3 = nodes[1].node.get_and_clear_pending_msg_events();
988         if test_ignore_second_cs {
989                 assert_eq!(events_3.len(), 3);
990         } else {
991                 assert_eq!(events_3.len(), 2);
992         }
993
994         // Note that the ordering of the events for different nodes is non-prescriptive, though the
995         // ordering of the two events that both go to nodes[2] have to stay in the same order.
996         let messages_a = match events_3.pop().unwrap() {
997                 MessageSendEvent::UpdateHTLCs { node_id, mut updates } => {
998                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
999                         assert!(updates.update_fulfill_htlcs.is_empty());
1000                         assert_eq!(updates.update_fail_htlcs.len(), 1);
1001                         assert!(updates.update_fail_malformed_htlcs.is_empty());
1002                         assert!(updates.update_add_htlcs.is_empty());
1003                         assert!(updates.update_fee.is_none());
1004                         (updates.update_fail_htlcs.remove(0), updates.commitment_signed)
1005                 },
1006                 _ => panic!("Unexpected event type!"),
1007         };
1008         let raa = if test_ignore_second_cs {
1009                 match events_3.remove(1) {
1010                         MessageSendEvent::SendRevokeAndACK { node_id, msg } => {
1011                                 assert_eq!(node_id, nodes[2].node.get_our_node_id());
1012                                 Some(msg.clone())
1013                         },
1014                         _ => panic!("Unexpected event"),
1015                 }
1016         } else { None };
1017         let send_event_b = SendEvent::from_event(events_3.remove(0));
1018         assert_eq!(send_event_b.node_id, nodes[2].node.get_our_node_id());
1019
1020         // Now deliver the new messages...
1021
1022         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &messages_a.0);
1023         commitment_signed_dance!(nodes[0], nodes[1], messages_a.1, false);
1024         let events_4 = nodes[0].node.get_and_clear_pending_events();
1025         assert_eq!(events_4.len(), 1);
1026         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events_4[0] {
1027                 assert_eq!(payment_hash, payment_hash_1);
1028                 assert!(rejected_by_dest);
1029         } else { panic!("Unexpected event!"); }
1030
1031         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_b.msgs[0]);
1032         if test_ignore_second_cs {
1033                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_b.commitment_msg);
1034                 check_added_monitors!(nodes[2], 1);
1035                 let bs_revoke_and_ack = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1036                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &raa.unwrap());
1037                 check_added_monitors!(nodes[2], 1);
1038                 let bs_cs = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1039                 assert!(bs_cs.update_add_htlcs.is_empty());
1040                 assert!(bs_cs.update_fail_htlcs.is_empty());
1041                 assert!(bs_cs.update_fail_malformed_htlcs.is_empty());
1042                 assert!(bs_cs.update_fulfill_htlcs.is_empty());
1043                 assert!(bs_cs.update_fee.is_none());
1044
1045                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
1046                 check_added_monitors!(nodes[1], 1);
1047                 let as_cs = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1048                 assert!(as_cs.update_add_htlcs.is_empty());
1049                 assert!(as_cs.update_fail_htlcs.is_empty());
1050                 assert!(as_cs.update_fail_malformed_htlcs.is_empty());
1051                 assert!(as_cs.update_fulfill_htlcs.is_empty());
1052                 assert!(as_cs.update_fee.is_none());
1053
1054                 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_cs.commitment_signed);
1055                 check_added_monitors!(nodes[1], 1);
1056                 let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
1057
1058                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_cs.commitment_signed);
1059                 check_added_monitors!(nodes[2], 1);
1060                 let bs_second_raa = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1061
1062                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
1063                 check_added_monitors!(nodes[2], 1);
1064                 assert!(nodes[2].node.get_and_clear_pending_msg_events().is_empty());
1065
1066                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_second_raa);
1067                 check_added_monitors!(nodes[1], 1);
1068                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1069         } else {
1070                 commitment_signed_dance!(nodes[2], nodes[1], send_event_b.commitment_msg, false);
1071         }
1072
1073         expect_pending_htlcs_forwardable!(nodes[2]);
1074
1075         let events_6 = nodes[2].node.get_and_clear_pending_events();
1076         assert_eq!(events_6.len(), 1);
1077         match events_6[0] {
1078                 Event::PaymentReceived { payment_hash, .. } => { assert_eq!(payment_hash, payment_hash_2); },
1079                 _ => panic!("Unexpected event"),
1080         };
1081
1082         if test_ignore_second_cs {
1083                 expect_pending_htlcs_forwardable!(nodes[1]);
1084                 check_added_monitors!(nodes[1], 1);
1085
1086                 send_event = SendEvent::from_node(&nodes[1]);
1087                 assert_eq!(send_event.node_id, nodes[0].node.get_our_node_id());
1088                 assert_eq!(send_event.msgs.len(), 1);
1089                 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event.msgs[0]);
1090                 commitment_signed_dance!(nodes[0], nodes[1], send_event.commitment_msg, false);
1091
1092                 expect_pending_htlcs_forwardable!(nodes[0]);
1093
1094                 let events_9 = nodes[0].node.get_and_clear_pending_events();
1095                 assert_eq!(events_9.len(), 1);
1096                 match events_9[0] {
1097                         Event::PaymentReceived { payment_hash, .. } => assert_eq!(payment_hash, payment_hash_4.unwrap()),
1098                         _ => panic!("Unexpected event"),
1099                 };
1100                 claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_4.unwrap());
1101         }
1102
1103         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_2);
1104 }
1105
1106 #[test]
1107 fn test_monitor_update_fail_raa() {
1108         do_test_monitor_update_fail_raa(false);
1109         do_test_monitor_update_fail_raa(true);
1110 }
1111
1112 #[test]
1113 fn test_monitor_update_fail_reestablish() {
1114         // Simple test for message retransmission after monitor update failure on
1115         // channel_reestablish generating a monitor update (which comes from freeing holding cell
1116         // HTLCs).
1117         let chanmon_cfgs = create_chanmon_cfgs(3);
1118         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1119         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1120         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1121         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1122         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1123
1124         let (our_payment_preimage, _, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
1125
1126         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1127         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1128
1129         assert!(nodes[2].node.claim_funds(our_payment_preimage));
1130         check_added_monitors!(nodes[2], 1);
1131         let mut updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1132         assert!(updates.update_add_htlcs.is_empty());
1133         assert!(updates.update_fail_htlcs.is_empty());
1134         assert!(updates.update_fail_malformed_htlcs.is_empty());
1135         assert!(updates.update_fee.is_none());
1136         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1137         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1138         check_added_monitors!(nodes[1], 1);
1139         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1140         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
1141
1142         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1143         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1144         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1145
1146         let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1147         let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1148
1149         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
1150
1151         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
1152         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1153         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1154         check_added_monitors!(nodes[1], 1);
1155
1156         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1157         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1158
1159         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1160         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1161
1162         assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
1163         assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
1164
1165         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
1166
1167         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
1168         check_added_monitors!(nodes[1], 0);
1169         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1170
1171         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1172         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1173         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1174         check_added_monitors!(nodes[1], 0);
1175
1176         updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1177         assert!(updates.update_add_htlcs.is_empty());
1178         assert!(updates.update_fail_htlcs.is_empty());
1179         assert!(updates.update_fail_malformed_htlcs.is_empty());
1180         assert!(updates.update_fee.is_none());
1181         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1182         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1183         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false);
1184
1185         let events = nodes[0].node.get_and_clear_pending_events();
1186         assert_eq!(events.len(), 1);
1187         match events[0] {
1188                 Event::PaymentSent { payment_preimage, .. } => assert_eq!(payment_preimage, our_payment_preimage),
1189                 _ => panic!("Unexpected event"),
1190         }
1191 }
1192
1193 #[test]
1194 fn raa_no_response_awaiting_raa_state() {
1195         // This is a rather convoluted test which ensures that if handling of an RAA does not happen
1196         // due to a previous monitor update failure, we still set AwaitingRemoteRevoke on the channel
1197         // in question (assuming it intends to respond with a CS after monitor updating is restored).
1198         // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
1199         let chanmon_cfgs = create_chanmon_cfgs(2);
1200         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1201         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1202         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1203         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1204         let logger = test_utils::TestLogger::new();
1205
1206         let (payment_preimage_1, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(nodes[1]);
1207         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
1208         let (payment_preimage_3, payment_hash_3, payment_secret_3) = get_payment_preimage_hash!(nodes[1]);
1209
1210         // Queue up two payments - one will be delivered right away, one immediately goes into the
1211         // holding cell as nodes[0] is AwaitingRAA. Ultimately this allows us to deliver an RAA
1212         // immediately after a CS. By setting failing the monitor update failure from the CS (which
1213         // requires only an RAA response due to AwaitingRAA) we can deliver the RAA and require the CS
1214         // generation during RAA while in monitor-update-failed state.
1215         {
1216                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1217                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1218                 nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)).unwrap();
1219                 check_added_monitors!(nodes[0], 1);
1220                 nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1221                 check_added_monitors!(nodes[0], 0);
1222         }
1223
1224         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1225         assert_eq!(events.len(), 1);
1226         let payment_event = SendEvent::from_event(events.pop().unwrap());
1227         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1228         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1229         check_added_monitors!(nodes[1], 1);
1230
1231         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1232         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1233         check_added_monitors!(nodes[0], 1);
1234         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1235         assert_eq!(events.len(), 1);
1236         let payment_event = SendEvent::from_event(events.pop().unwrap());
1237
1238         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1239         check_added_monitors!(nodes[0], 1);
1240         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1241
1242         // Now we have a CS queued up which adds a new HTLC (which will need a RAA/CS response from
1243         // nodes[1]) followed by an RAA. Fail the monitor updating prior to the CS, deliver the RAA,
1244         // then restore channel monitor updates.
1245         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1246         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1247         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1248         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1249         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1250         check_added_monitors!(nodes[1], 1);
1251
1252         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1253         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1254         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
1255         check_added_monitors!(nodes[1], 1);
1256
1257         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1258         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1259         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1260         // nodes[1] should be AwaitingRAA here!
1261         check_added_monitors!(nodes[1], 0);
1262         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1263         expect_pending_htlcs_forwardable!(nodes[1]);
1264         expect_payment_received!(nodes[1], payment_hash_1, payment_secret_1, 1000000);
1265
1266         // We send a third payment here, which is somewhat of a redundant test, but the
1267         // chanmon_fail_consistency test required it to actually find the bug (by seeing out-of-sync
1268         // commitment transaction states) whereas here we can explicitly check for it.
1269         {
1270                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1271                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1272                 nodes[0].node.send_payment(&route, payment_hash_3, &Some(payment_secret_3)).unwrap();
1273                 check_added_monitors!(nodes[0], 0);
1274                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1275         }
1276         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1277         check_added_monitors!(nodes[0], 1);
1278         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1279         assert_eq!(events.len(), 1);
1280         let payment_event = SendEvent::from_event(events.pop().unwrap());
1281
1282         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1283         check_added_monitors!(nodes[0], 1);
1284         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1285
1286         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1287         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1288         check_added_monitors!(nodes[1], 1);
1289         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1290
1291         // Finally deliver the RAA to nodes[1] which results in a CS response to the last update
1292         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1293         check_added_monitors!(nodes[1], 1);
1294         expect_pending_htlcs_forwardable!(nodes[1]);
1295         expect_payment_received!(nodes[1], payment_hash_2, payment_secret_2, 1000000);
1296         let bs_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1297
1298         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1299         check_added_monitors!(nodes[0], 1);
1300
1301         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_update.commitment_signed);
1302         check_added_monitors!(nodes[0], 1);
1303         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1304
1305         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1306         check_added_monitors!(nodes[1], 1);
1307         expect_pending_htlcs_forwardable!(nodes[1]);
1308         expect_payment_received!(nodes[1], payment_hash_3, payment_secret_3, 1000000);
1309
1310         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
1311         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
1312         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_3);
1313 }
1314
1315 #[test]
1316 fn claim_while_disconnected_monitor_update_fail() {
1317         // Test for claiming a payment while disconnected and then having the resulting
1318         // channel-update-generated monitor update fail. This kind of thing isn't a particularly
1319         // contrived case for nodes with network instability.
1320         // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1321         // code introduced a regression in this test (specifically, this caught a removal of the
1322         // channel_reestablish handling ensuring the order was sensical given the messages used).
1323         let chanmon_cfgs = create_chanmon_cfgs(2);
1324         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1325         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1326         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1327         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1328         let logger = test_utils::TestLogger::new();
1329
1330         // Forward a payment for B to claim
1331         let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1332
1333         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1334         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1335
1336         assert!(nodes[1].node.claim_funds(payment_preimage_1));
1337         check_added_monitors!(nodes[1], 1);
1338
1339         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1340         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1341
1342         let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1343         let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1344
1345         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1346         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1347
1348         // Now deliver a's reestablish, freeing the claim from the holding cell, but fail the monitor
1349         // update.
1350         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1351
1352         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1353         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1354         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1355         check_added_monitors!(nodes[1], 1);
1356         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1357
1358         // Send a second payment from A to B, resulting in a commitment update that gets swallowed with
1359         // the monitor still failed
1360         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
1361         {
1362                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1363                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1364                 nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1365                 check_added_monitors!(nodes[0], 1);
1366         }
1367
1368         let as_updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1369         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &as_updates.update_add_htlcs[0]);
1370         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_updates.commitment_signed);
1371         check_added_monitors!(nodes[1], 1);
1372         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1373         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1374         // Note that nodes[1] not updating monitor here is OK - it wont take action on the new HTLC
1375         // until we've channel_monitor_update'd and updated for the new commitment transaction.
1376
1377         // Now un-fail the monitor, which will result in B sending its original commitment update,
1378         // receiving the commitment update from A, and the resulting commitment dances.
1379         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1380         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1381         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1382         check_added_monitors!(nodes[1], 0);
1383
1384         let bs_msgs = nodes[1].node.get_and_clear_pending_msg_events();
1385         assert_eq!(bs_msgs.len(), 2);
1386
1387         match bs_msgs[0] {
1388                 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
1389                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1390                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1391                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
1392                         check_added_monitors!(nodes[0], 1);
1393
1394                         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1395                         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1396                         check_added_monitors!(nodes[1], 1);
1397                 },
1398                 _ => panic!("Unexpected event"),
1399         }
1400
1401         match bs_msgs[1] {
1402                 MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
1403                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1404                         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), msg);
1405                         check_added_monitors!(nodes[0], 1);
1406                 },
1407                 _ => panic!("Unexpected event"),
1408         }
1409
1410         let as_commitment = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1411
1412         let bs_commitment = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1413         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment.commitment_signed);
1414         check_added_monitors!(nodes[0], 1);
1415         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1416
1417         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment.commitment_signed);
1418         check_added_monitors!(nodes[1], 1);
1419         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1420         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1421         check_added_monitors!(nodes[1], 1);
1422
1423         expect_pending_htlcs_forwardable!(nodes[1]);
1424         expect_payment_received!(nodes[1], payment_hash_2, payment_secret_2, 1000000);
1425
1426         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1427         check_added_monitors!(nodes[0], 1);
1428
1429         let events = nodes[0].node.get_and_clear_pending_events();
1430         assert_eq!(events.len(), 1);
1431         match events[0] {
1432                 Event::PaymentSent { ref payment_preimage } => {
1433                         assert_eq!(*payment_preimage, payment_preimage_1);
1434                 },
1435                 _ => panic!("Unexpected event"),
1436         }
1437
1438         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
1439 }
1440
1441 #[test]
1442 fn monitor_failed_no_reestablish_response() {
1443         // Test for receiving a channel_reestablish after a monitor update failure resulted in no
1444         // response to a commitment_signed.
1445         // Backported from chanmon_fail_consistency fuzz tests as it caught a long-standing
1446         // debug_assert!() failure in channel_reestablish handling.
1447         let chanmon_cfgs = create_chanmon_cfgs(2);
1448         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1449         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1450         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1451         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1452         let logger = test_utils::TestLogger::new();
1453
1454         // Route the payment and deliver the initial commitment_signed (with a monitor update failure
1455         // on receipt).
1456         let (payment_preimage_1, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(nodes[1]);
1457         {
1458                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1459                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1460                 nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)).unwrap();
1461                 check_added_monitors!(nodes[0], 1);
1462         }
1463
1464         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1465         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1466         assert_eq!(events.len(), 1);
1467         let payment_event = SendEvent::from_event(events.pop().unwrap());
1468         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1469         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1470         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1471         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1472         check_added_monitors!(nodes[1], 1);
1473
1474         // Now disconnect and immediately reconnect, delivering the channel_reestablish while nodes[1]
1475         // is still failing to update monitors.
1476         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1477         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1478
1479         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1480         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1481
1482         let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1483         let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1484
1485         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1486         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1487
1488         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1489         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1490         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1491         check_added_monitors!(nodes[1], 0);
1492         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1493
1494         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1495         check_added_monitors!(nodes[0], 1);
1496         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1497         check_added_monitors!(nodes[0], 1);
1498
1499         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1500         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1501         check_added_monitors!(nodes[1], 1);
1502
1503         expect_pending_htlcs_forwardable!(nodes[1]);
1504         expect_payment_received!(nodes[1], payment_hash_1, payment_secret_1, 1000000);
1505
1506         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
1507 }
1508
1509 #[test]
1510 fn first_message_on_recv_ordering() {
1511         // Test that if the initial generator of a monitor-update-frozen state doesn't generate
1512         // messages, we're willing to flip the order of response messages if neccessary in resposne to
1513         // a commitment_signed which needs to send an RAA first.
1514         // At a high level, our goal is to fail monitor updating in response to an RAA which needs no
1515         // response and then handle a CS while in the failed state, requiring an RAA followed by a CS
1516         // response. To do this, we start routing two payments, with the final RAA for the first being
1517         // delivered while B is in AwaitingRAA, hence when we deliver the CS for the second B will
1518         // have no pending response but will want to send a RAA/CS (with the updates for the second
1519         // payment applied).
1520         // Backported from chanmon_fail_consistency fuzz tests as it caught a bug here.
1521         let chanmon_cfgs = create_chanmon_cfgs(2);
1522         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1523         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1524         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1525         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1526         let logger = test_utils::TestLogger::new();
1527
1528         // Route the first payment outbound, holding the last RAA for B until we are set up so that we
1529         // can deliver it and fail the monitor update.
1530         let (payment_preimage_1, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(nodes[1]);
1531         {
1532                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1533                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1534                 nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)).unwrap();
1535                 check_added_monitors!(nodes[0], 1);
1536         }
1537
1538         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1539         assert_eq!(events.len(), 1);
1540         let payment_event = SendEvent::from_event(events.pop().unwrap());
1541         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1542         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1543         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1544         check_added_monitors!(nodes[1], 1);
1545         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1546
1547         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1548         check_added_monitors!(nodes[0], 1);
1549         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1550         check_added_monitors!(nodes[0], 1);
1551
1552         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1553
1554         // Route the second payment, generating an update_add_htlc/commitment_signed
1555         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
1556         {
1557                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1558                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1559                 nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1560                 check_added_monitors!(nodes[0], 1);
1561         }
1562         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1563         assert_eq!(events.len(), 1);
1564         let payment_event = SendEvent::from_event(events.pop().unwrap());
1565         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1566
1567         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1568
1569         // Deliver the final RAA for the first payment, which does not require a response. RAAs
1570         // generally require a commitment_signed, so the fact that we're expecting an opposite response
1571         // to the next message also tests resetting the delivery order.
1572         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1573         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1574         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1575         check_added_monitors!(nodes[1], 1);
1576
1577         // Now deliver the update_add_htlc/commitment_signed for the second payment, which does need an
1578         // RAA/CS response, which should be generated when we call channel_monitor_update (with the
1579         // appropriate HTLC acceptance).
1580         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1581         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1582         check_added_monitors!(nodes[1], 1);
1583         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1584         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1585
1586         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1587         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1588         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1589         check_added_monitors!(nodes[1], 0);
1590
1591         expect_pending_htlcs_forwardable!(nodes[1]);
1592         expect_payment_received!(nodes[1], payment_hash_1, payment_secret_1, 1000000);
1593
1594         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1595         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1596         check_added_monitors!(nodes[0], 1);
1597         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1598         check_added_monitors!(nodes[0], 1);
1599
1600         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1601         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1602         check_added_monitors!(nodes[1], 1);
1603
1604         expect_pending_htlcs_forwardable!(nodes[1]);
1605         expect_payment_received!(nodes[1], payment_hash_2, payment_secret_2, 1000000);
1606
1607         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
1608         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
1609 }
1610
1611 #[test]
1612 fn test_monitor_update_fail_claim() {
1613         // Basic test for monitor update failures when processing claim_funds calls.
1614         // We set up a simple 3-node network, sending a payment from A to B and failing B's monitor
1615         // update to claim the payment. We then send a payment C->B->A, making the forward of this
1616         // payment from B to A fail due to the paused channel. Finally, we restore the channel monitor
1617         // updating and claim the payment on B.
1618         let chanmon_cfgs = create_chanmon_cfgs(3);
1619         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1620         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1621         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1622         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1623         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1624         let logger = test_utils::TestLogger::new();
1625
1626         // Rebalance a bit so that we can send backwards from 3 to 2.
1627         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000);
1628
1629         let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1630
1631         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1632         assert!(nodes[1].node.claim_funds(payment_preimage_1));
1633         check_added_monitors!(nodes[1], 1);
1634
1635         let (_, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[0]);
1636         {
1637                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
1638                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1639                 nodes[2].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1640                 check_added_monitors!(nodes[2], 1);
1641         }
1642
1643         // Successfully update the monitor on the 1<->2 channel, but the 0<->1 channel should still be
1644         // paused, so forward shouldn't succeed until we call channel_monitor_updated().
1645         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1646
1647         let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1648         assert_eq!(events.len(), 1);
1649         let payment_event = SendEvent::from_event(events.pop().unwrap());
1650         nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1651         let events = nodes[1].node.get_and_clear_pending_msg_events();
1652         assert_eq!(events.len(), 0);
1653         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Temporary failure claiming HTLC, treating as success: Failed to update ChannelMonitor".to_string(), 1);
1654         commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false, true);
1655
1656         let bs_fail_update = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1657         nodes[2].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_fail_update.update_fail_htlcs[0]);
1658         commitment_signed_dance!(nodes[2], nodes[1], bs_fail_update.commitment_signed, false, true);
1659
1660         let msg_events = nodes[2].node.get_and_clear_pending_msg_events();
1661         assert_eq!(msg_events.len(), 1);
1662         match msg_events[0] {
1663                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
1664                         assert_eq!(msg.contents.short_channel_id, chan_1.0.contents.short_channel_id);
1665                         assert_eq!(msg.contents.flags & 2, 2); // temp disabled
1666                 },
1667                 _ => panic!("Unexpected event"),
1668         }
1669
1670         let events = nodes[2].node.get_and_clear_pending_events();
1671         assert_eq!(events.len(), 1);
1672         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1673                 assert_eq!(payment_hash, payment_hash_2);
1674                 assert!(!rejected_by_dest);
1675         } else { panic!("Unexpected event!"); }
1676
1677         // Now restore monitor updating on the 0<->1 channel and claim the funds on B.
1678         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1679         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1680         check_added_monitors!(nodes[1], 0);
1681
1682         let bs_fulfill_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1683         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_fulfill_update.update_fulfill_htlcs[0]);
1684         commitment_signed_dance!(nodes[0], nodes[1], bs_fulfill_update.commitment_signed, false);
1685
1686         let events = nodes[0].node.get_and_clear_pending_events();
1687         assert_eq!(events.len(), 1);
1688         if let Event::PaymentSent { payment_preimage, .. } = events[0] {
1689                 assert_eq!(payment_preimage, payment_preimage_1);
1690         } else { panic!("Unexpected event!"); }
1691 }
1692
1693 #[test]
1694 fn test_monitor_update_on_pending_forwards() {
1695         // Basic test for monitor update failures when processing pending HTLC fail/add forwards.
1696         // We do this with a simple 3-node network, sending a payment from A to C and one from C to A.
1697         // The payment from A to C will be failed by C and pending a back-fail to A, while the payment
1698         // from C to A will be pending a forward to A.
1699         let chanmon_cfgs = create_chanmon_cfgs(3);
1700         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1701         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1702         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1703         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1704         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1705         let logger = test_utils::TestLogger::new();
1706
1707         // Rebalance a bit so that we can send backwards from 3 to 1.
1708         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000);
1709
1710         let (_, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
1711         assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1));
1712         expect_pending_htlcs_forwardable!(nodes[2]);
1713         check_added_monitors!(nodes[2], 1);
1714
1715         let cs_fail_update = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1716         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &cs_fail_update.update_fail_htlcs[0]);
1717         commitment_signed_dance!(nodes[1], nodes[2], cs_fail_update.commitment_signed, true, true);
1718         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1719
1720         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[0]);
1721         {
1722                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
1723                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1724                 nodes[2].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1725                 check_added_monitors!(nodes[2], 1);
1726         }
1727
1728         let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1729         assert_eq!(events.len(), 1);
1730         let payment_event = SendEvent::from_event(events.pop().unwrap());
1731         nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1732         commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false);
1733
1734         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1735         expect_pending_htlcs_forwardable!(nodes[1]);
1736         check_added_monitors!(nodes[1], 1);
1737         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1738         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1739
1740         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1741         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1742         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1743         check_added_monitors!(nodes[1], 0);
1744
1745         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1746         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fail_htlcs[0]);
1747         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_add_htlcs[0]);
1748         commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true);
1749
1750         let events = nodes[0].node.get_and_clear_pending_events();
1751         assert_eq!(events.len(), 2);
1752         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1753                 assert_eq!(payment_hash, payment_hash_1);
1754                 assert!(rejected_by_dest);
1755         } else { panic!("Unexpected event!"); }
1756         match events[1] {
1757                 Event::PendingHTLCsForwardable { .. } => { },
1758                 _ => panic!("Unexpected event"),
1759         };
1760         nodes[0].node.process_pending_htlc_forwards();
1761         expect_payment_received!(nodes[0], payment_hash_2, payment_secret_2, 1000000);
1762
1763         claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_2);
1764 }
1765
1766 #[test]
1767 fn monitor_update_claim_fail_no_response() {
1768         // Test for claim_funds resulting in both a monitor update failure and no message response (due
1769         // to channel being AwaitingRAA).
1770         // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1771         // code was broken.
1772         let chanmon_cfgs = create_chanmon_cfgs(2);
1773         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1774         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1775         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1776         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1777         let logger = test_utils::TestLogger::new();
1778
1779         // Forward a payment for B to claim
1780         let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1781
1782         // Now start forwarding a second payment, skipping the last RAA so B is in AwaitingRAA
1783         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
1784         {
1785                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1786                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1787                 nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
1788                 check_added_monitors!(nodes[0], 1);
1789         }
1790
1791         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1792         assert_eq!(events.len(), 1);
1793         let payment_event = SendEvent::from_event(events.pop().unwrap());
1794         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1795         let as_raa = commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true, false, true);
1796
1797         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1798         assert!(nodes[1].node.claim_funds(payment_preimage_1));
1799         check_added_monitors!(nodes[1], 1);
1800         let events = nodes[1].node.get_and_clear_pending_msg_events();
1801         assert_eq!(events.len(), 0);
1802         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Temporary failure claiming HTLC, treating as success: Failed to update ChannelMonitor".to_string(), 1);
1803
1804         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1805         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1806         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1807         check_added_monitors!(nodes[1], 0);
1808         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1809
1810         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1811         check_added_monitors!(nodes[1], 1);
1812         expect_pending_htlcs_forwardable!(nodes[1]);
1813         expect_payment_received!(nodes[1], payment_hash_2, payment_secret_2, 1000000);
1814
1815         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1816         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fulfill_htlcs[0]);
1817         commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false);
1818
1819         let events = nodes[0].node.get_and_clear_pending_events();
1820         assert_eq!(events.len(), 1);
1821         match events[0] {
1822                 Event::PaymentSent { ref payment_preimage } => {
1823                         assert_eq!(*payment_preimage, payment_preimage_1);
1824                 },
1825                 _ => panic!("Unexpected event"),
1826         }
1827
1828         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
1829 }
1830
1831 // confirm_a_first and restore_b_before_conf are wholly unrelated to earlier bools and
1832 // restore_b_before_conf has no meaning if !confirm_a_first
1833 fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf: bool) {
1834         // Test that if the monitor update generated by funding_transaction_generated fails we continue
1835         // the channel setup happily after the update is restored.
1836         let chanmon_cfgs = create_chanmon_cfgs(2);
1837         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1838         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1839         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1840
1841         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
1842         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
1843         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::known(), &get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id()));
1844
1845         let (temporary_channel_id, funding_tx, funding_output) = create_funding_transaction(&nodes[0], 100000, 43);
1846
1847         nodes[0].node.funding_transaction_generated(&temporary_channel_id, funding_tx.clone()).unwrap();
1848         check_added_monitors!(nodes[0], 0);
1849
1850         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1851         let funding_created_msg = get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id());
1852         let channel_id = OutPoint { txid: funding_created_msg.funding_txid, index: funding_created_msg.funding_output_index }.to_channel_id();
1853         nodes[1].node.handle_funding_created(&nodes[0].node.get_our_node_id(), &funding_created_msg);
1854         check_added_monitors!(nodes[1], 1);
1855
1856         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1857         nodes[0].node.handle_funding_signed(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingSigned, nodes[0].node.get_our_node_id()));
1858         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1859         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1860         check_added_monitors!(nodes[0], 1);
1861         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1862         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1863         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1864         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
1865         check_added_monitors!(nodes[0], 0);
1866
1867         let events = nodes[0].node.get_and_clear_pending_events();
1868         assert_eq!(events.len(), 0);
1869         assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
1870         assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0)[0].txid(), funding_output.txid);
1871
1872         if confirm_a_first {
1873                 confirm_transaction(&nodes[0], &funding_tx);
1874                 nodes[1].node.handle_funding_locked(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendFundingLocked, nodes[1].node.get_our_node_id()));
1875         } else {
1876                 assert!(!restore_b_before_conf);
1877                 confirm_transaction(&nodes[1], &funding_tx);
1878                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1879         }
1880
1881         // Make sure nodes[1] isn't stupid enough to re-send the FundingLocked on reconnect
1882         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1883         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1884         reconnect_nodes(&nodes[0], &nodes[1], (false, confirm_a_first), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
1885         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1886         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1887
1888         if !restore_b_before_conf {
1889                 confirm_transaction(&nodes[1], &funding_tx);
1890                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1891                 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
1892         }
1893
1894         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1895         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1896         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1897         check_added_monitors!(nodes[1], 0);
1898
1899         let (channel_id, (announcement, as_update, bs_update)) = if !confirm_a_first {
1900                 nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id()));
1901
1902                 confirm_transaction(&nodes[0], &funding_tx);
1903                 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[1], &nodes[0]);
1904                 (channel_id, create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked))
1905         } else {
1906                 if restore_b_before_conf {
1907                         confirm_transaction(&nodes[1], &funding_tx);
1908                 }
1909                 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[0], &nodes[1]);
1910                 (channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &funding_locked))
1911         };
1912         for node in nodes.iter() {
1913                 assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
1914                 node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
1915                 node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
1916         }
1917
1918         send_payment(&nodes[0], &[&nodes[1]], 8000000);
1919         close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, true);
1920 }
1921
1922 #[test]
1923 fn during_funding_monitor_fail() {
1924         do_during_funding_monitor_fail(true, true);
1925         do_during_funding_monitor_fail(true, false);
1926         do_during_funding_monitor_fail(false, false);
1927 }
1928
1929 #[test]
1930 fn test_path_paused_mpp() {
1931         // Simple test of sending a multi-part payment where one path is currently blocked awaiting
1932         // monitor update
1933         let chanmon_cfgs = create_chanmon_cfgs(4);
1934         let node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
1935         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
1936         let mut nodes = create_network(4, &node_cfgs, &node_chanmgrs);
1937
1938         let chan_1_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1939         let (chan_2_ann, _, chan_2_id, _) = create_announced_chan_between_nodes(&nodes, 0, 2, InitFeatures::known(), InitFeatures::known());
1940         let chan_3_id = create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1941         let chan_4_id = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1942         let logger = test_utils::TestLogger::new();
1943
1944         let (payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash!(&nodes[3]);
1945         let mut route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph.read().unwrap(), &nodes[3].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger).unwrap();
1946
1947         // Set us up to take multiple routes, one 0 -> 1 -> 3 and one 0 -> 2 -> 3:
1948         let path = route.paths[0].clone();
1949         route.paths.push(path);
1950         route.paths[0][0].pubkey = nodes[1].node.get_our_node_id();
1951         route.paths[0][0].short_channel_id = chan_1_id;
1952         route.paths[0][1].short_channel_id = chan_3_id;
1953         route.paths[1][0].pubkey = nodes[2].node.get_our_node_id();
1954         route.paths[1][0].short_channel_id = chan_2_ann.contents.short_channel_id;
1955         route.paths[1][1].short_channel_id = chan_4_id;
1956
1957         // Set it so that the first monitor update (for the path 0 -> 1 -> 3) succeeds, but the second
1958         // (for the path 0 -> 2 -> 3) fails.
1959         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1960         *nodes[0].chain_monitor.next_update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1961
1962         // Now check that we get the right return value, indicating that the first path succeeded but
1963         // the second got a MonitorUpdateFailed err. This implies PaymentSendFailure::PartialFailure as
1964         // some paths succeeded, preventing retry.
1965         if let Err(PaymentSendFailure::PartialFailure(results)) = nodes[0].node.send_payment(&route, payment_hash, &Some(payment_secret)) {
1966                 assert_eq!(results.len(), 2);
1967                 if let Ok(()) = results[0] {} else { panic!(); }
1968                 if let Err(APIError::MonitorUpdateFailed) = results[1] {} else { panic!(); }
1969         } else { panic!(); }
1970         check_added_monitors!(nodes[0], 2);
1971         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1972
1973         // Pass the first HTLC of the payment along to nodes[3].
1974         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1975         assert_eq!(events.len(), 1);
1976         pass_along_path(&nodes[0], &[&nodes[1], &nodes[3]], 0, payment_hash.clone(), payment_secret, events.pop().unwrap(), false);
1977
1978         // And check that, after we successfully update the monitor for chan_2 we can pass the second
1979         // HTLC along to nodes[3] and claim the whole payment back to nodes[0].
1980         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_2_id).unwrap().clone();
1981         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
1982         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1983         assert_eq!(events.len(), 1);
1984         pass_along_path(&nodes[0], &[&nodes[2], &nodes[3]], 200_000, payment_hash.clone(), payment_secret, events.pop().unwrap(), true);
1985
1986         claim_payment_along_route(&nodes[0], &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], false, payment_preimage);
1987 }
1988
1989 fn do_channel_holding_cell_serialize(disconnect: bool, reload_a: bool) {
1990         // Tests that, when we serialize a channel with AddHTLC entries in the holding cell, we
1991         // properly free them on reconnect. We previously failed such HTLCs upon serialization, but
1992         // that behavior was both somewhat unexpected and also broken (there was a debug assertion
1993         // which failed in such a case).
1994         let chanmon_cfgs = create_chanmon_cfgs(2);
1995         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1996         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1997         let persister: test_utils::TestPersister;
1998         let new_chain_monitor: test_utils::TestChainMonitor;
1999         let nodes_0_deserialized: ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>;
2000         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2001
2002         let chan_id = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 15_000_000, 7_000_000_000, InitFeatures::known(), InitFeatures::known()).2;
2003         let (payment_preimage_1, payment_hash_1, payment_secret_1) = get_payment_preimage_hash!(&nodes[1]);
2004         let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(&nodes[1]);
2005
2006         // Do a really complicated dance to get an HTLC into the holding cell, with MonitorUpdateFailed
2007         // set but AwaitingRemoteRevoke unset. When this test was written, any attempts to send an HTLC
2008         // while MonitorUpdateFailed is set are immediately failed-backwards. Thus, the only way to get
2009         // an AddHTLC into the holding cell is to add it while AwaitingRemoteRevoke is set but
2010         // MonitorUpdateFailed is unset, and then swap the flags.
2011         //
2012         // We do this by:
2013         //  a) routing a payment from node B to node A,
2014         //  b) sending a payment from node A to node B without delivering any of the generated messages,
2015         //     putting node A in AwaitingRemoteRevoke,
2016         //  c) sending a second payment from node A to node B, which is immediately placed in the
2017         //     holding cell,
2018         //  d) claiming the first payment from B, allowing us to fail the monitor update which occurs
2019         //     when we try to persist the payment preimage,
2020         //  e) delivering A's commitment_signed from (b) and the resulting B revoke_and_ack message,
2021         //     clearing AwaitingRemoteRevoke on node A.
2022         //
2023         // Note that because, at the end, MonitorUpdateFailed is still set, the HTLC generated in (c)
2024         // will not be freed from the holding cell.
2025         let (payment_preimage_0, _, _) = route_payment(&nodes[1], &[&nodes[0]], 100000);
2026
2027         let route = {
2028                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
2029                 get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, None, &Vec::new(), 100000, TEST_FINAL_CLTV, nodes[0].logger).unwrap()
2030         };
2031
2032         nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)).unwrap();
2033         check_added_monitors!(nodes[0], 1);
2034         let send = SendEvent::from_node(&nodes[0]);
2035         assert_eq!(send.msgs.len(), 1);
2036
2037         nodes[0].node.send_payment(&route, payment_hash_2, &Some(payment_secret_2)).unwrap();
2038         check_added_monitors!(nodes[0], 0);
2039
2040         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
2041         assert!(nodes[0].node.claim_funds(payment_preimage_0));
2042         check_added_monitors!(nodes[0], 1);
2043
2044         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send.msgs[0]);
2045         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send.commitment_msg);
2046         check_added_monitors!(nodes[1], 1);
2047
2048         let (raa, cs) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
2049
2050         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &raa);
2051         check_added_monitors!(nodes[0], 1);
2052
2053         if disconnect {
2054                 // Optionally reload nodes[0] entirely through a serialization roundtrip, otherwise just
2055                 // disconnect the peers. Note that the fuzzer originally found this issue because
2056                 // deserializing a ChannelManager in this state causes an assertion failure.
2057                 if reload_a {
2058                         let nodes_0_serialized = nodes[0].node.encode();
2059                         let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
2060                         nodes[0].chain_monitor.chain_monitor.monitors.read().unwrap().iter().next().unwrap().1.write(&mut chan_0_monitor_serialized).unwrap();
2061
2062                         persister = test_utils::TestPersister::new();
2063                         let keys_manager = &chanmon_cfgs[0].keys_manager;
2064                         new_chain_monitor = test_utils::TestChainMonitor::new(Some(nodes[0].chain_source), nodes[0].tx_broadcaster.clone(), nodes[0].logger, node_cfgs[0].fee_estimator, &persister, keys_manager);
2065                         nodes[0].chain_monitor = &new_chain_monitor;
2066                         let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
2067                         let (_, mut chan_0_monitor) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
2068                                 &mut chan_0_monitor_read, keys_manager).unwrap();
2069                         assert!(chan_0_monitor_read.is_empty());
2070
2071                         let mut nodes_0_read = &nodes_0_serialized[..];
2072                         let config = UserConfig::default();
2073                         nodes_0_deserialized = {
2074                                 let mut channel_monitors = HashMap::new();
2075                                 channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
2076                                 <(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
2077                                         default_config: config,
2078                                         keys_manager,
2079                                         fee_estimator: node_cfgs[0].fee_estimator,
2080                                         chain_monitor: nodes[0].chain_monitor,
2081                                         tx_broadcaster: nodes[0].tx_broadcaster.clone(),
2082                                         logger: nodes[0].logger,
2083                                         channel_monitors,
2084                                 }).unwrap().1
2085                         };
2086                         nodes[0].node = &nodes_0_deserialized;
2087                         assert!(nodes_0_read.is_empty());
2088
2089                         nodes[0].chain_monitor.watch_channel(chan_0_monitor.get_funding_txo().0.clone(), chan_0_monitor).unwrap();
2090                         check_added_monitors!(nodes[0], 1);
2091                 } else {
2092                         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2093                 }
2094                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2095
2096                 // Now reconnect the two
2097                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
2098                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
2099                 assert_eq!(reestablish_1.len(), 1);
2100                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
2101                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
2102                 assert_eq!(reestablish_2.len(), 1);
2103
2104                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
2105                 let resp_1 = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
2106                 check_added_monitors!(nodes[1], 0);
2107
2108                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
2109                 let resp_0 = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
2110
2111                 assert!(resp_0.0.is_none());
2112                 assert!(resp_0.1.is_none());
2113                 assert!(resp_0.2.is_none());
2114                 assert!(resp_1.0.is_none());
2115                 assert!(resp_1.1.is_none());
2116
2117                 // Check that the freshly-generated cs is equal to the original (which we will deliver in a
2118                 // moment).
2119                 if let Some(pending_cs) = resp_1.2 {
2120                         assert!(pending_cs.update_add_htlcs.is_empty());
2121                         assert!(pending_cs.update_fail_htlcs.is_empty());
2122                         assert!(pending_cs.update_fulfill_htlcs.is_empty());
2123                         assert_eq!(pending_cs.commitment_signed, cs);
2124                 } else { panic!(); }
2125
2126                 // There should be no monitor updates as we are still pending awaiting a failed one.
2127                 check_added_monitors!(nodes[0], 0);
2128                 check_added_monitors!(nodes[1], 0);
2129         }
2130
2131         // If we finish updating the monitor, we should free the holding cell right away (this did
2132         // not occur prior to #756).
2133         *nodes[0].chain_monitor.update_ret.lock().unwrap() = None;
2134         let (funding_txo, mon_id) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_id).unwrap().clone();
2135         nodes[0].node.channel_monitor_updated(&funding_txo, mon_id);
2136
2137         // New outbound messages should be generated immediately upon a call to
2138         // get_and_clear_pending_msg_events (but not before).
2139         check_added_monitors!(nodes[0], 0);
2140         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
2141         check_added_monitors!(nodes[0], 1);
2142         assert_eq!(events.len(), 1);
2143
2144         // Deliver the pending in-flight CS
2145         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &cs);
2146         check_added_monitors!(nodes[0], 1);
2147
2148         let commitment_msg = match events.pop().unwrap() {
2149                 MessageSendEvent::UpdateHTLCs { node_id, updates } => {
2150                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
2151                         assert!(updates.update_fail_htlcs.is_empty());
2152                         assert!(updates.update_fail_malformed_htlcs.is_empty());
2153                         assert!(updates.update_fee.is_none());
2154                         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
2155                         nodes[1].node.handle_update_fulfill_htlc(&nodes[0].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
2156                         expect_payment_sent!(nodes[1], payment_preimage_0);
2157                         assert_eq!(updates.update_add_htlcs.len(), 1);
2158                         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
2159                         updates.commitment_signed
2160                 },
2161                 _ => panic!("Unexpected event type!"),
2162         };
2163
2164         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &commitment_msg);
2165         check_added_monitors!(nodes[1], 1);
2166
2167         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
2168         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
2169         expect_pending_htlcs_forwardable!(nodes[1]);
2170         expect_payment_received!(nodes[1], payment_hash_1, payment_secret_1, 100000);
2171         check_added_monitors!(nodes[1], 1);
2172
2173         commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false);
2174
2175         expect_pending_htlcs_forwardable!(nodes[1]);
2176         expect_payment_received!(nodes[1], payment_hash_2, payment_secret_2, 100000);
2177
2178         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
2179         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
2180 }
2181 #[test]
2182 fn channel_holding_cell_serialize() {
2183         do_channel_holding_cell_serialize(true, true);
2184         do_channel_holding_cell_serialize(true, false);
2185         do_channel_holding_cell_serialize(false, true); // last arg doesn't matter
2186 }