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