Split up functional_tests into utils and the tests themselves
[rust-lightning] / src / ln / functional_tests.rs
1 //! Tests that test standing up a network of ChannelManagers, creating channels, sending
2 //! payments/messages between them, and often checking the resulting ChannelMonitors are able to
3 //! claim outputs on-chain.
4
5 use chain::transaction::OutPoint;
6 use chain::chaininterface::{ChainListener, ChainWatchInterface};
7 use chain::keysinterface::{KeysInterface, SpendableOutputDescriptor};
8 use chain::keysinterface;
9 use ln::channel::{COMMITMENT_TX_BASE_WEIGHT, COMMITMENT_TX_WEIGHT_PER_HTLC, BREAKDOWN_TIMEOUT};
10 use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,HTLCForwardInfo,RAACommitmentOrder, PaymentPreimage, PaymentHash};
11 use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
12 use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
13 use ln::onion_utils;
14 use ln::router::{Route, RouteHop};
15 use ln::msgs;
16 use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler,HTLCFailChannelUpdate};
17 use util::test_utils;
18 use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
19 use util::errors::APIError;
20 use util::ser::{Writeable, ReadableArgs};
21 use util::config::UserConfig;
22 use util::rng;
23
24 use bitcoin::util::hash::{BitcoinHash, Sha256dHash};
25 use bitcoin::util::bip143;
26 use bitcoin::util::address::Address;
27 use bitcoin::util::bip32::{ChildNumber, ExtendedPubKey, ExtendedPrivKey};
28 use bitcoin::blockdata::block::{Block, BlockHeader};
29 use bitcoin::blockdata::transaction::{Transaction, TxOut, TxIn, SigHashType};
30 use bitcoin::blockdata::script::{Builder, Script};
31 use bitcoin::blockdata::opcodes;
32 use bitcoin::blockdata::constants::genesis_block;
33 use bitcoin::network::constants::Network;
34
35 use bitcoin_hashes::sha256::Hash as Sha256;
36 use bitcoin_hashes::Hash;
37
38 use secp256k1::{Secp256k1, Message};
39 use secp256k1::key::{PublicKey,SecretKey};
40
41 use std::collections::{BTreeSet, HashMap, HashSet};
42 use std::default::Default;
43 use std::sync::Arc;
44 use std::sync::atomic::Ordering;
45 use std::time::Instant;
46 use std::mem;
47
48 use ln::functional_test_utils::*;
49
50 #[test]
51 fn test_async_inbound_update_fee() {
52         let mut nodes = create_network(2);
53         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
54         let channel_id = chan.2;
55
56         // balancing
57         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
58
59         // A                                        B
60         // update_fee                            ->
61         // send (1) commitment_signed            -.
62         //                                       <- update_add_htlc/commitment_signed
63         // send (2) RAA (awaiting remote revoke) -.
64         // (1) commitment_signed is delivered    ->
65         //                                       .- send (3) RAA (awaiting remote revoke)
66         // (2) RAA is delivered                  ->
67         //                                       .- send (4) commitment_signed
68         //                                       <- (3) RAA is delivered
69         // send (5) commitment_signed            -.
70         //                                       <- (4) commitment_signed is delivered
71         // send (6) RAA                          -.
72         // (5) commitment_signed is delivered    ->
73         //                                       <- RAA
74         // (6) RAA is delivered                  ->
75
76         // First nodes[0] generates an update_fee
77         nodes[0].node.update_fee(channel_id, get_feerate!(nodes[0], channel_id) + 20).unwrap();
78         check_added_monitors!(nodes[0], 1);
79
80         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
81         assert_eq!(events_0.len(), 1);
82         let (update_msg, commitment_signed) = match events_0[0] { // (1)
83                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, ref commitment_signed, .. }, .. } => {
84                         (update_fee.as_ref(), commitment_signed)
85                 },
86                 _ => panic!("Unexpected event"),
87         };
88
89         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
90
91         // ...but before it's delivered, nodes[1] starts to send a payment back to nodes[0]...
92         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
93         nodes[1].node.send_payment(nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 40000, TEST_FINAL_CLTV).unwrap(), our_payment_hash).unwrap();
94         check_added_monitors!(nodes[1], 1);
95
96         let payment_event = {
97                 let mut events_1 = nodes[1].node.get_and_clear_pending_msg_events();
98                 assert_eq!(events_1.len(), 1);
99                 SendEvent::from_event(events_1.remove(0))
100         };
101         assert_eq!(payment_event.node_id, nodes[0].node.get_our_node_id());
102         assert_eq!(payment_event.msgs.len(), 1);
103
104         // ...now when the messages get delivered everyone should be happy
105         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
106         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg).unwrap(); // (2)
107         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
108         // nodes[0] is awaiting nodes[1] revoke_and_ack so get_event_msg's assert(len == 1) passes
109         check_added_monitors!(nodes[0], 1);
110
111         // deliver(1), generate (3):
112         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
113         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
114         // nodes[1] is awaiting nodes[0] revoke_and_ack so get_event_msg's assert(len == 1) passes
115         check_added_monitors!(nodes[1], 1);
116
117         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack).unwrap(); // deliver (2)
118         let bs_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
119         assert!(bs_update.update_add_htlcs.is_empty()); // (4)
120         assert!(bs_update.update_fulfill_htlcs.is_empty()); // (4)
121         assert!(bs_update.update_fail_htlcs.is_empty()); // (4)
122         assert!(bs_update.update_fail_malformed_htlcs.is_empty()); // (4)
123         assert!(bs_update.update_fee.is_none()); // (4)
124         check_added_monitors!(nodes[1], 1);
125
126         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap(); // deliver (3)
127         let as_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
128         assert!(as_update.update_add_htlcs.is_empty()); // (5)
129         assert!(as_update.update_fulfill_htlcs.is_empty()); // (5)
130         assert!(as_update.update_fail_htlcs.is_empty()); // (5)
131         assert!(as_update.update_fail_malformed_htlcs.is_empty()); // (5)
132         assert!(as_update.update_fee.is_none()); // (5)
133         check_added_monitors!(nodes[0], 1);
134
135         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_update.commitment_signed).unwrap(); // deliver (4)
136         let as_second_revoke = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
137         // only (6) so get_event_msg's assert(len == 1) passes
138         check_added_monitors!(nodes[0], 1);
139
140         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update.commitment_signed).unwrap(); // deliver (5)
141         let bs_second_revoke = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
142         check_added_monitors!(nodes[1], 1);
143
144         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke).unwrap();
145         check_added_monitors!(nodes[0], 1);
146
147         let events_2 = nodes[0].node.get_and_clear_pending_events();
148         assert_eq!(events_2.len(), 1);
149         match events_2[0] {
150                 Event::PendingHTLCsForwardable {..} => {}, // If we actually processed we'd receive the payment
151                 _ => panic!("Unexpected event"),
152         }
153
154         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_revoke).unwrap(); // deliver (6)
155         check_added_monitors!(nodes[1], 1);
156 }
157
158 #[test]
159 fn test_update_fee_unordered_raa() {
160         // Just the intro to the previous test followed by an out-of-order RAA (which caused a
161         // crash in an earlier version of the update_fee patch)
162         let mut nodes = create_network(2);
163         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
164         let channel_id = chan.2;
165
166         // balancing
167         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
168
169         // First nodes[0] generates an update_fee
170         nodes[0].node.update_fee(channel_id, get_feerate!(nodes[0], channel_id) + 20).unwrap();
171         check_added_monitors!(nodes[0], 1);
172
173         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
174         assert_eq!(events_0.len(), 1);
175         let update_msg = match events_0[0] { // (1)
176                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, .. }, .. } => {
177                         update_fee.as_ref()
178                 },
179                 _ => panic!("Unexpected event"),
180         };
181
182         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
183
184         // ...but before it's delivered, nodes[1] starts to send a payment back to nodes[0]...
185         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
186         nodes[1].node.send_payment(nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 40000, TEST_FINAL_CLTV).unwrap(), our_payment_hash).unwrap();
187         check_added_monitors!(nodes[1], 1);
188
189         let payment_event = {
190                 let mut events_1 = nodes[1].node.get_and_clear_pending_msg_events();
191                 assert_eq!(events_1.len(), 1);
192                 SendEvent::from_event(events_1.remove(0))
193         };
194         assert_eq!(payment_event.node_id, nodes[0].node.get_our_node_id());
195         assert_eq!(payment_event.msgs.len(), 1);
196
197         // ...now when the messages get delivered everyone should be happy
198         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
199         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg).unwrap(); // (2)
200         let as_revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
201         // nodes[0] is awaiting nodes[1] revoke_and_ack so get_event_msg's assert(len == 1) passes
202         check_added_monitors!(nodes[0], 1);
203
204         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_msg).unwrap(); // deliver (2)
205         check_added_monitors!(nodes[1], 1);
206
207         // We can't continue, sadly, because our (1) now has a bogus signature
208 }
209
210 #[test]
211 fn test_multi_flight_update_fee() {
212         let nodes = create_network(2);
213         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
214         let channel_id = chan.2;
215
216         // A                                        B
217         // update_fee/commitment_signed          ->
218         //                                       .- send (1) RAA and (2) commitment_signed
219         // update_fee (never committed)          ->
220         // (3) update_fee                        ->
221         // We have to manually generate the above update_fee, it is allowed by the protocol but we
222         // don't track which updates correspond to which revoke_and_ack responses so we're in
223         // AwaitingRAA mode and will not generate the update_fee yet.
224         //                                       <- (1) RAA delivered
225         // (3) is generated and send (4) CS      -.
226         // Note that A cannot generate (4) prior to (1) being delivered as it otherwise doesn't
227         // know the per_commitment_point to use for it.
228         //                                       <- (2) commitment_signed delivered
229         // revoke_and_ack                        ->
230         //                                          B should send no response here
231         // (4) commitment_signed delivered       ->
232         //                                       <- RAA/commitment_signed delivered
233         // revoke_and_ack                        ->
234
235         // First nodes[0] generates an update_fee
236         let initial_feerate = get_feerate!(nodes[0], channel_id);
237         nodes[0].node.update_fee(channel_id, initial_feerate + 20).unwrap();
238         check_added_monitors!(nodes[0], 1);
239
240         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
241         assert_eq!(events_0.len(), 1);
242         let (update_msg_1, commitment_signed_1) = match events_0[0] { // (1)
243                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, ref commitment_signed, .. }, .. } => {
244                         (update_fee.as_ref().unwrap(), commitment_signed)
245                 },
246                 _ => panic!("Unexpected event"),
247         };
248
249         // Deliver first update_fee/commitment_signed pair, generating (1) and (2):
250         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg_1).unwrap();
251         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed_1).unwrap();
252         let (bs_revoke_msg, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
253         check_added_monitors!(nodes[1], 1);
254
255         // nodes[0] is awaiting a revoke from nodes[1] before it will create a new commitment
256         // transaction:
257         nodes[0].node.update_fee(channel_id, initial_feerate + 40).unwrap();
258         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
259         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
260
261         // Create the (3) update_fee message that nodes[0] will generate before it does...
262         let mut update_msg_2 = msgs::UpdateFee {
263                 channel_id: update_msg_1.channel_id.clone(),
264                 feerate_per_kw: (initial_feerate + 30) as u32,
265         };
266
267         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg_2).unwrap();
268
269         update_msg_2.feerate_per_kw = (initial_feerate + 40) as u32;
270         // Deliver (3)
271         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg_2).unwrap();
272
273         // Deliver (1), generating (3) and (4)
274         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_msg).unwrap();
275         let as_second_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
276         check_added_monitors!(nodes[0], 1);
277         assert!(as_second_update.update_add_htlcs.is_empty());
278         assert!(as_second_update.update_fulfill_htlcs.is_empty());
279         assert!(as_second_update.update_fail_htlcs.is_empty());
280         assert!(as_second_update.update_fail_malformed_htlcs.is_empty());
281         // Check that the update_fee newly generated matches what we delivered:
282         assert_eq!(as_second_update.update_fee.as_ref().unwrap().channel_id, update_msg_2.channel_id);
283         assert_eq!(as_second_update.update_fee.as_ref().unwrap().feerate_per_kw, update_msg_2.feerate_per_kw);
284
285         // Deliver (2) commitment_signed
286         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment_signed).unwrap();
287         let as_revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
288         check_added_monitors!(nodes[0], 1);
289         // No commitment_signed so get_event_msg's assert(len == 1) passes
290
291         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_msg).unwrap();
292         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
293         check_added_monitors!(nodes[1], 1);
294
295         // Delever (4)
296         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_second_update.commitment_signed).unwrap();
297         let (bs_second_revoke, bs_second_commitment) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
298         check_added_monitors!(nodes[1], 1);
299
300         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke).unwrap();
301         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
302         check_added_monitors!(nodes[0], 1);
303
304         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment).unwrap();
305         let as_second_revoke = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
306         // No commitment_signed so get_event_msg's assert(len == 1) passes
307         check_added_monitors!(nodes[0], 1);
308
309         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_revoke).unwrap();
310         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
311         check_added_monitors!(nodes[1], 1);
312 }
313
314 #[test]
315 fn test_update_fee_vanilla() {
316         let nodes = create_network(2);
317         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
318         let channel_id = chan.2;
319
320         let feerate = get_feerate!(nodes[0], channel_id);
321         nodes[0].node.update_fee(channel_id, feerate+25).unwrap();
322         check_added_monitors!(nodes[0], 1);
323
324         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
325         assert_eq!(events_0.len(), 1);
326         let (update_msg, commitment_signed) = match events_0[0] {
327                         MessageSendEvent::UpdateHTLCs { node_id:_, updates: msgs::CommitmentUpdate { update_add_htlcs:_, update_fulfill_htlcs:_, update_fail_htlcs:_, update_fail_malformed_htlcs:_, ref update_fee, ref commitment_signed } } => {
328                         (update_fee.as_ref(), commitment_signed)
329                 },
330                 _ => panic!("Unexpected event"),
331         };
332         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
333
334         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
335         let (revoke_msg, commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
336         check_added_monitors!(nodes[1], 1);
337
338         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg).unwrap();
339         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
340         check_added_monitors!(nodes[0], 1);
341
342         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed).unwrap();
343         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
344         // No commitment_signed so get_event_msg's assert(len == 1) passes
345         check_added_monitors!(nodes[0], 1);
346
347         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg).unwrap();
348         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
349         check_added_monitors!(nodes[1], 1);
350 }
351
352 #[test]
353 fn test_update_fee_that_funder_cannot_afford() {
354         let nodes = create_network(2);
355         let channel_value = 1888;
356         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, channel_value, 700000);
357         let channel_id = chan.2;
358
359         let feerate = 260;
360         nodes[0].node.update_fee(channel_id, feerate).unwrap();
361         check_added_monitors!(nodes[0], 1);
362         let update_msg = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
363
364         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg.update_fee.unwrap()).unwrap();
365
366         commitment_signed_dance!(nodes[1], nodes[0], update_msg.commitment_signed, false);
367
368         //Confirm that the new fee based on the last local commitment txn is what we expected based on the feerate of 260 set above.
369         //This value results in a fee that is exactly what the funder can afford (277 sat + 1000 sat channel reserve)
370         {
371                 let chan_lock = nodes[1].node.channel_state.lock().unwrap();
372                 let chan = chan_lock.by_id.get(&channel_id).unwrap();
373
374                 //We made sure neither party's funds are below the dust limit so -2 non-HTLC txns from number of outputs
375                 let num_htlcs = chan.last_local_commitment_txn[0].output.len() - 2;
376                 let total_fee: u64 = feerate * (COMMITMENT_TX_BASE_WEIGHT + (num_htlcs as u64) * COMMITMENT_TX_WEIGHT_PER_HTLC) / 1000;
377                 let mut actual_fee = chan.last_local_commitment_txn[0].output.iter().fold(0, |acc, output| acc + output.value);
378                 actual_fee = channel_value - actual_fee;
379                 assert_eq!(total_fee, actual_fee);
380         } //drop the mutex
381
382         //Add 2 to the previous fee rate to the final fee increases by 1 (with no HTLCs the fee is essentially
383         //fee_rate*(724/1000) so the increment of 1*0.724 is rounded back down)
384         nodes[0].node.update_fee(channel_id, feerate+2).unwrap();
385         check_added_monitors!(nodes[0], 1);
386
387         let update2_msg = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
388
389         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update2_msg.update_fee.unwrap()).unwrap();
390
391         //While producing the commitment_signed response after handling a received update_fee request the
392         //check to see if the funder, who sent the update_fee request, can afford the new fee (funder_balance >= fee+channel_reserve)
393         //Should produce and error.
394         let err = nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &update2_msg.commitment_signed).unwrap_err();
395
396         assert!(match err.err {
397                 "Funding remote cannot afford proposed new fee" => true,
398                 _ => false,
399         });
400
401         //clear the message we could not handle
402         nodes[1].node.get_and_clear_pending_msg_events();
403 }
404
405 #[test]
406 fn test_update_fee_with_fundee_update_add_htlc() {
407         let mut nodes = create_network(2);
408         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
409         let channel_id = chan.2;
410
411         // balancing
412         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
413
414         let feerate = get_feerate!(nodes[0], channel_id);
415         nodes[0].node.update_fee(channel_id, feerate+20).unwrap();
416         check_added_monitors!(nodes[0], 1);
417
418         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
419         assert_eq!(events_0.len(), 1);
420         let (update_msg, commitment_signed) = match events_0[0] {
421                         MessageSendEvent::UpdateHTLCs { node_id:_, updates: msgs::CommitmentUpdate { update_add_htlcs:_, update_fulfill_htlcs:_, update_fail_htlcs:_, update_fail_malformed_htlcs:_, ref update_fee, ref commitment_signed } } => {
422                         (update_fee.as_ref(), commitment_signed)
423                 },
424                 _ => panic!("Unexpected event"),
425         };
426         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
427         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
428         let (revoke_msg, commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
429         check_added_monitors!(nodes[1], 1);
430
431         let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 800000, TEST_FINAL_CLTV).unwrap();
432
433         let (our_payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[1]);
434
435         // nothing happens since node[1] is in AwaitingRemoteRevoke
436         nodes[1].node.send_payment(route, our_payment_hash).unwrap();
437         {
438                 let mut added_monitors = nodes[0].chan_monitor.added_monitors.lock().unwrap();
439                 assert_eq!(added_monitors.len(), 0);
440                 added_monitors.clear();
441         }
442         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
443         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
444         // node[1] has nothing to do
445
446         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg).unwrap();
447         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
448         check_added_monitors!(nodes[0], 1);
449
450         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed).unwrap();
451         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
452         // No commitment_signed so get_event_msg's assert(len == 1) passes
453         check_added_monitors!(nodes[0], 1);
454         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg).unwrap();
455         check_added_monitors!(nodes[1], 1);
456         // AwaitingRemoteRevoke ends here
457
458         let commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
459         assert_eq!(commitment_update.update_add_htlcs.len(), 1);
460         assert_eq!(commitment_update.update_fulfill_htlcs.len(), 0);
461         assert_eq!(commitment_update.update_fail_htlcs.len(), 0);
462         assert_eq!(commitment_update.update_fail_malformed_htlcs.len(), 0);
463         assert_eq!(commitment_update.update_fee.is_none(), true);
464
465         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &commitment_update.update_add_htlcs[0]).unwrap();
466         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_update.commitment_signed).unwrap();
467         check_added_monitors!(nodes[0], 1);
468         let (revoke, commitment_signed) = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
469
470         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke).unwrap();
471         check_added_monitors!(nodes[1], 1);
472         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
473
474         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &commitment_signed).unwrap();
475         check_added_monitors!(nodes[1], 1);
476         let revoke = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
477         // No commitment_signed so get_event_msg's assert(len == 1) passes
478
479         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke).unwrap();
480         check_added_monitors!(nodes[0], 1);
481         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
482
483         expect_pending_htlcs_forwardable!(nodes[0]);
484
485         let events = nodes[0].node.get_and_clear_pending_events();
486         assert_eq!(events.len(), 1);
487         match events[0] {
488                 Event::PaymentReceived { .. } => { },
489                 _ => panic!("Unexpected event"),
490         };
491
492         claim_payment(&nodes[1], &vec!(&nodes[0])[..], our_payment_preimage);
493
494         send_payment(&nodes[1], &vec!(&nodes[0])[..], 800000);
495         send_payment(&nodes[0], &vec!(&nodes[1])[..], 800000);
496         close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
497 }
498
499 #[test]
500 fn test_update_fee() {
501         let nodes = create_network(2);
502         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
503         let channel_id = chan.2;
504
505         // A                                        B
506         // (1) update_fee/commitment_signed      ->
507         //                                       <- (2) revoke_and_ack
508         //                                       .- send (3) commitment_signed
509         // (4) update_fee/commitment_signed      ->
510         //                                       .- send (5) revoke_and_ack (no CS as we're awaiting a revoke)
511         //                                       <- (3) commitment_signed delivered
512         // send (6) revoke_and_ack               -.
513         //                                       <- (5) deliver revoke_and_ack
514         // (6) deliver revoke_and_ack            ->
515         //                                       .- send (7) commitment_signed in response to (4)
516         //                                       <- (7) deliver commitment_signed
517         // revoke_and_ack                        ->
518
519         // Create and deliver (1)...
520         let feerate = get_feerate!(nodes[0], channel_id);
521         nodes[0].node.update_fee(channel_id, feerate+20).unwrap();
522         check_added_monitors!(nodes[0], 1);
523
524         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
525         assert_eq!(events_0.len(), 1);
526         let (update_msg, commitment_signed) = match events_0[0] {
527                         MessageSendEvent::UpdateHTLCs { node_id:_, updates: msgs::CommitmentUpdate { update_add_htlcs:_, update_fulfill_htlcs:_, update_fail_htlcs:_, update_fail_malformed_htlcs:_, ref update_fee, ref commitment_signed } } => {
528                         (update_fee.as_ref(), commitment_signed)
529                 },
530                 _ => panic!("Unexpected event"),
531         };
532         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
533
534         // Generate (2) and (3):
535         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
536         let (revoke_msg, commitment_signed_0) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
537         check_added_monitors!(nodes[1], 1);
538
539         // Deliver (2):
540         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg).unwrap();
541         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
542         check_added_monitors!(nodes[0], 1);
543
544         // Create and deliver (4)...
545         nodes[0].node.update_fee(channel_id, feerate+30).unwrap();
546         check_added_monitors!(nodes[0], 1);
547         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
548         assert_eq!(events_0.len(), 1);
549         let (update_msg, commitment_signed) = match events_0[0] {
550                         MessageSendEvent::UpdateHTLCs { node_id:_, updates: msgs::CommitmentUpdate { update_add_htlcs:_, update_fulfill_htlcs:_, update_fail_htlcs:_, update_fail_malformed_htlcs:_, ref update_fee, ref commitment_signed } } => {
551                         (update_fee.as_ref(), commitment_signed)
552                 },
553                 _ => panic!("Unexpected event"),
554         };
555
556         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
557         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
558         check_added_monitors!(nodes[1], 1);
559         // ... creating (5)
560         let revoke_msg = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
561         // No commitment_signed so get_event_msg's assert(len == 1) passes
562
563         // Handle (3), creating (6):
564         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed_0).unwrap();
565         check_added_monitors!(nodes[0], 1);
566         let revoke_msg_0 = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
567         // No commitment_signed so get_event_msg's assert(len == 1) passes
568
569         // Deliver (5):
570         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg).unwrap();
571         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
572         check_added_monitors!(nodes[0], 1);
573
574         // Deliver (6), creating (7):
575         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg_0).unwrap();
576         let commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
577         assert!(commitment_update.update_add_htlcs.is_empty());
578         assert!(commitment_update.update_fulfill_htlcs.is_empty());
579         assert!(commitment_update.update_fail_htlcs.is_empty());
580         assert!(commitment_update.update_fail_malformed_htlcs.is_empty());
581         assert!(commitment_update.update_fee.is_none());
582         check_added_monitors!(nodes[1], 1);
583
584         // Deliver (7)
585         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_update.commitment_signed).unwrap();
586         check_added_monitors!(nodes[0], 1);
587         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
588         // No commitment_signed so get_event_msg's assert(len == 1) passes
589
590         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg).unwrap();
591         check_added_monitors!(nodes[1], 1);
592         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
593
594         assert_eq!(get_feerate!(nodes[0], channel_id), feerate + 30);
595         assert_eq!(get_feerate!(nodes[1], channel_id), feerate + 30);
596         close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
597 }
598
599 #[test]
600 fn pre_funding_lock_shutdown_test() {
601         // Test sending a shutdown prior to funding_locked after funding generation
602         let nodes = create_network(2);
603         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 8000000, 0);
604         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
605         nodes[0].chain_monitor.block_connected_checked(&header, 1, &[&tx; 1], &[1; 1]);
606         nodes[1].chain_monitor.block_connected_checked(&header, 1, &[&tx; 1], &[1; 1]);
607
608         nodes[0].node.close_channel(&OutPoint::new(tx.txid(), 0).to_channel_id()).unwrap();
609         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
610         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown).unwrap();
611         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
612         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown).unwrap();
613
614         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
615         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed).unwrap();
616         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
617         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap()).unwrap();
618         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
619         assert!(node_0_none.is_none());
620
621         assert!(nodes[0].node.list_channels().is_empty());
622         assert!(nodes[1].node.list_channels().is_empty());
623 }
624
625 #[test]
626 fn updates_shutdown_wait() {
627         // Test sending a shutdown with outstanding updates pending
628         let mut nodes = create_network(3);
629         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
630         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
631         let route_1 = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
632         let route_2 = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
633
634         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
635
636         nodes[0].node.close_channel(&chan_1.2).unwrap();
637         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
638         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown).unwrap();
639         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
640         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown).unwrap();
641
642         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
643         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
644
645         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
646         if let Err(APIError::ChannelUnavailable {..}) = nodes[0].node.send_payment(route_1, payment_hash) {}
647         else { panic!("New sends should fail!") };
648         if let Err(APIError::ChannelUnavailable {..}) = nodes[1].node.send_payment(route_2, payment_hash) {}
649         else { panic!("New sends should fail!") };
650
651         assert!(nodes[2].node.claim_funds(our_payment_preimage));
652         check_added_monitors!(nodes[2], 1);
653         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
654         assert!(updates.update_add_htlcs.is_empty());
655         assert!(updates.update_fail_htlcs.is_empty());
656         assert!(updates.update_fail_malformed_htlcs.is_empty());
657         assert!(updates.update_fee.is_none());
658         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
659         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]).unwrap();
660         check_added_monitors!(nodes[1], 1);
661         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
662         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
663
664         assert!(updates_2.update_add_htlcs.is_empty());
665         assert!(updates_2.update_fail_htlcs.is_empty());
666         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
667         assert!(updates_2.update_fee.is_none());
668         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
669         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]).unwrap();
670         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
671
672         let events = nodes[0].node.get_and_clear_pending_events();
673         assert_eq!(events.len(), 1);
674         match events[0] {
675                 Event::PaymentSent { ref payment_preimage } => {
676                         assert_eq!(our_payment_preimage, *payment_preimage);
677                 },
678                 _ => panic!("Unexpected event"),
679         }
680
681         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
682         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed).unwrap();
683         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
684         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap()).unwrap();
685         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
686         assert!(node_0_none.is_none());
687
688         assert!(nodes[0].node.list_channels().is_empty());
689
690         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
691         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
692         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
693         assert!(nodes[1].node.list_channels().is_empty());
694         assert!(nodes[2].node.list_channels().is_empty());
695 }
696
697 #[test]
698 fn htlc_fail_async_shutdown() {
699         // Test HTLCs fail if shutdown starts even if messages are delivered out-of-order
700         let mut nodes = create_network(3);
701         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
702         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
703
704         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
705         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
706         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
707         check_added_monitors!(nodes[0], 1);
708         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
709         assert_eq!(updates.update_add_htlcs.len(), 1);
710         assert!(updates.update_fulfill_htlcs.is_empty());
711         assert!(updates.update_fail_htlcs.is_empty());
712         assert!(updates.update_fail_malformed_htlcs.is_empty());
713         assert!(updates.update_fee.is_none());
714
715         nodes[1].node.close_channel(&chan_1.2).unwrap();
716         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
717         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown).unwrap();
718         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
719
720         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]).unwrap();
721         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed).unwrap();
722         check_added_monitors!(nodes[1], 1);
723         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown).unwrap();
724         commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false);
725
726         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
727         assert!(updates_2.update_add_htlcs.is_empty());
728         assert!(updates_2.update_fulfill_htlcs.is_empty());
729         assert_eq!(updates_2.update_fail_htlcs.len(), 1);
730         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
731         assert!(updates_2.update_fee.is_none());
732
733         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fail_htlcs[0]).unwrap();
734         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
735
736         let events = nodes[0].node.get_and_clear_pending_events();
737         assert_eq!(events.len(), 1);
738         match events[0] {
739                 Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } => {
740                         assert_eq!(our_payment_hash, *payment_hash);
741                         assert!(!rejected_by_dest);
742                 },
743                 _ => panic!("Unexpected event"),
744         }
745
746         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
747         assert_eq!(msg_events.len(), 2);
748         let node_0_closing_signed = match msg_events[0] {
749                 MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
750                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
751                         (*msg).clone()
752                 },
753                 _ => panic!("Unexpected event"),
754         };
755         match msg_events[1] {
756                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
757                         assert_eq!(msg.contents.short_channel_id, chan_1.0.contents.short_channel_id);
758                 },
759                 _ => panic!("Unexpected event"),
760         }
761
762         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
763         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed).unwrap();
764         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
765         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap()).unwrap();
766         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
767         assert!(node_0_none.is_none());
768
769         assert!(nodes[0].node.list_channels().is_empty());
770
771         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
772         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
773         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
774         assert!(nodes[1].node.list_channels().is_empty());
775         assert!(nodes[2].node.list_channels().is_empty());
776 }
777
778 fn do_test_shutdown_rebroadcast(recv_count: u8) {
779         // Test that shutdown/closing_signed is re-sent on reconnect with a variable number of
780         // messages delivered prior to disconnect
781         let nodes = create_network(3);
782         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
783         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
784
785         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
786
787         nodes[1].node.close_channel(&chan_1.2).unwrap();
788         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
789         if recv_count > 0 {
790                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown).unwrap();
791                 let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
792                 if recv_count > 1 {
793                         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown).unwrap();
794                 }
795         }
796
797         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
798         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
799
800         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
801         let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
802         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
803         let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
804
805         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish).unwrap();
806         let node_1_2nd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
807         assert!(node_1_shutdown == node_1_2nd_shutdown);
808
809         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_reestablish).unwrap();
810         let node_0_2nd_shutdown = if recv_count > 0 {
811                 let node_0_2nd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
812                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown).unwrap();
813                 node_0_2nd_shutdown
814         } else {
815                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
816                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown).unwrap();
817                 get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id())
818         };
819         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_2nd_shutdown).unwrap();
820
821         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
822         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
823
824         assert!(nodes[2].node.claim_funds(our_payment_preimage));
825         check_added_monitors!(nodes[2], 1);
826         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
827         assert!(updates.update_add_htlcs.is_empty());
828         assert!(updates.update_fail_htlcs.is_empty());
829         assert!(updates.update_fail_malformed_htlcs.is_empty());
830         assert!(updates.update_fee.is_none());
831         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
832         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]).unwrap();
833         check_added_monitors!(nodes[1], 1);
834         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
835         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
836
837         assert!(updates_2.update_add_htlcs.is_empty());
838         assert!(updates_2.update_fail_htlcs.is_empty());
839         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
840         assert!(updates_2.update_fee.is_none());
841         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
842         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]).unwrap();
843         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
844
845         let events = nodes[0].node.get_and_clear_pending_events();
846         assert_eq!(events.len(), 1);
847         match events[0] {
848                 Event::PaymentSent { ref payment_preimage } => {
849                         assert_eq!(our_payment_preimage, *payment_preimage);
850                 },
851                 _ => panic!("Unexpected event"),
852         }
853
854         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
855         if recv_count > 0 {
856                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed).unwrap();
857                 let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
858                 assert!(node_1_closing_signed.is_some());
859         }
860
861         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
862         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
863
864         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
865         let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
866         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
867         if recv_count == 0 {
868                 // If all closing_signeds weren't delivered we can just resume where we left off...
869                 let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
870
871                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish).unwrap();
872                 let node_0_3rd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
873                 assert!(node_0_2nd_shutdown == node_0_3rd_shutdown);
874
875                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish).unwrap();
876                 let node_1_3rd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
877                 assert!(node_1_3rd_shutdown == node_1_2nd_shutdown);
878
879                 nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_3rd_shutdown).unwrap();
880                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
881
882                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_3rd_shutdown).unwrap();
883                 let node_0_2nd_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
884                 assert!(node_0_closing_signed == node_0_2nd_closing_signed);
885
886                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed).unwrap();
887                 let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
888                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap()).unwrap();
889                 let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
890                 assert!(node_0_none.is_none());
891         } else {
892                 // If one node, however, received + responded with an identical closing_signed we end
893                 // up erroring and node[0] will try to broadcast its own latest commitment transaction.
894                 // There isn't really anything better we can do simply, but in the future we might
895                 // explore storing a set of recently-closed channels that got disconnected during
896                 // closing_signed and avoiding broadcasting local commitment txn for some timeout to
897                 // give our counterparty enough time to (potentially) broadcast a cooperative closing
898                 // transaction.
899                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
900
901                 if let Err(msgs::HandleError{action: Some(msgs::ErrorAction::SendErrorMessage{msg}), ..}) =
902                                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish) {
903                         nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msg);
904                         let msgs::ErrorMessage {ref channel_id, ..} = msg;
905                         assert_eq!(*channel_id, chan_1.2);
906                 } else { panic!("Needed SendErrorMessage close"); }
907
908                 // get_closing_signed_broadcast usually eats the BroadcastChannelUpdate for us and
909                 // checks it, but in this case nodes[0] didn't ever get a chance to receive a
910                 // closing_signed so we do it ourselves
911                 check_closed_broadcast!(nodes[0]);
912         }
913
914         assert!(nodes[0].node.list_channels().is_empty());
915
916         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
917         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
918         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
919         assert!(nodes[1].node.list_channels().is_empty());
920         assert!(nodes[2].node.list_channels().is_empty());
921 }
922
923 #[test]
924 fn test_shutdown_rebroadcast() {
925         do_test_shutdown_rebroadcast(0);
926         do_test_shutdown_rebroadcast(1);
927         do_test_shutdown_rebroadcast(2);
928 }
929
930 #[test]
931 fn fake_network_test() {
932         // Simple test which builds a network of ChannelManagers, connects them to each other, and
933         // tests that payments get routed and transactions broadcast in semi-reasonable ways.
934         let nodes = create_network(4);
935
936         // Create some initial channels
937         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
938         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
939         let chan_3 = create_announced_chan_between_nodes(&nodes, 2, 3);
940
941         // Rebalance the network a bit by relaying one payment through all the channels...
942         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000);
943         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000);
944         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000);
945         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000);
946
947         // Send some more payments
948         send_payment(&nodes[1], &vec!(&nodes[2], &nodes[3])[..], 1000000);
949         send_payment(&nodes[3], &vec!(&nodes[2], &nodes[1], &nodes[0])[..], 1000000);
950         send_payment(&nodes[3], &vec!(&nodes[2], &nodes[1])[..], 1000000);
951
952         // Test failure packets
953         let payment_hash_1 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 1000000).1;
954         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], payment_hash_1);
955
956         // Add a new channel that skips 3
957         let chan_4 = create_announced_chan_between_nodes(&nodes, 1, 3);
958
959         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 1000000);
960         send_payment(&nodes[2], &vec!(&nodes[3])[..], 1000000);
961         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000);
962         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000);
963         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000);
964         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000);
965         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000);
966
967         // Do some rebalance loop payments, simultaneously
968         let mut hops = Vec::with_capacity(3);
969         hops.push(RouteHop {
970                 pubkey: nodes[2].node.get_our_node_id(),
971                 short_channel_id: chan_2.0.contents.short_channel_id,
972                 fee_msat: 0,
973                 cltv_expiry_delta: chan_3.0.contents.cltv_expiry_delta as u32
974         });
975         hops.push(RouteHop {
976                 pubkey: nodes[3].node.get_our_node_id(),
977                 short_channel_id: chan_3.0.contents.short_channel_id,
978                 fee_msat: 0,
979                 cltv_expiry_delta: chan_4.1.contents.cltv_expiry_delta as u32
980         });
981         hops.push(RouteHop {
982                 pubkey: nodes[1].node.get_our_node_id(),
983                 short_channel_id: chan_4.0.contents.short_channel_id,
984                 fee_msat: 1000000,
985                 cltv_expiry_delta: TEST_FINAL_CLTV,
986         });
987         hops[1].fee_msat = chan_4.1.contents.fee_base_msat as u64 + chan_4.1.contents.fee_proportional_millionths as u64 * hops[2].fee_msat as u64 / 1000000;
988         hops[0].fee_msat = chan_3.0.contents.fee_base_msat as u64 + chan_3.0.contents.fee_proportional_millionths as u64 * hops[1].fee_msat as u64 / 1000000;
989         let payment_preimage_1 = send_along_route(&nodes[1], Route { hops }, &vec!(&nodes[2], &nodes[3], &nodes[1])[..], 1000000).0;
990
991         let mut hops = Vec::with_capacity(3);
992         hops.push(RouteHop {
993                 pubkey: nodes[3].node.get_our_node_id(),
994                 short_channel_id: chan_4.0.contents.short_channel_id,
995                 fee_msat: 0,
996                 cltv_expiry_delta: chan_3.1.contents.cltv_expiry_delta as u32
997         });
998         hops.push(RouteHop {
999                 pubkey: nodes[2].node.get_our_node_id(),
1000                 short_channel_id: chan_3.0.contents.short_channel_id,
1001                 fee_msat: 0,
1002                 cltv_expiry_delta: chan_2.1.contents.cltv_expiry_delta as u32
1003         });
1004         hops.push(RouteHop {
1005                 pubkey: nodes[1].node.get_our_node_id(),
1006                 short_channel_id: chan_2.0.contents.short_channel_id,
1007                 fee_msat: 1000000,
1008                 cltv_expiry_delta: TEST_FINAL_CLTV,
1009         });
1010         hops[1].fee_msat = chan_2.1.contents.fee_base_msat as u64 + chan_2.1.contents.fee_proportional_millionths as u64 * hops[2].fee_msat as u64 / 1000000;
1011         hops[0].fee_msat = chan_3.1.contents.fee_base_msat as u64 + chan_3.1.contents.fee_proportional_millionths as u64 * hops[1].fee_msat as u64 / 1000000;
1012         let payment_hash_2 = send_along_route(&nodes[1], Route { hops }, &vec!(&nodes[3], &nodes[2], &nodes[1])[..], 1000000).1;
1013
1014         // Claim the rebalances...
1015         fail_payment(&nodes[1], &vec!(&nodes[3], &nodes[2], &nodes[1])[..], payment_hash_2);
1016         claim_payment(&nodes[1], &vec!(&nodes[2], &nodes[3], &nodes[1])[..], payment_preimage_1);
1017
1018         // Add a duplicate new channel from 2 to 4
1019         let chan_5 = create_announced_chan_between_nodes(&nodes, 1, 3);
1020
1021         // Send some payments across both channels
1022         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1023         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1024         let payment_preimage_5 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1025
1026         route_over_limit(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000);
1027
1028         //TODO: Test that routes work again here as we've been notified that the channel is full
1029
1030         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_3);
1031         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_4);
1032         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_5);
1033
1034         // Close down the channels...
1035         close_channel(&nodes[0], &nodes[1], &chan_1.2, chan_1.3, true);
1036         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, false);
1037         close_channel(&nodes[2], &nodes[3], &chan_3.2, chan_3.3, true);
1038         close_channel(&nodes[1], &nodes[3], &chan_4.2, chan_4.3, false);
1039         close_channel(&nodes[1], &nodes[3], &chan_5.2, chan_5.3, false);
1040 }
1041
1042 #[test]
1043 fn duplicate_htlc_test() {
1044         // Test that we accept duplicate payment_hash HTLCs across the network and that
1045         // claiming/failing them are all separate and don't effect each other
1046         let mut nodes = create_network(6);
1047
1048         // Create some initial channels to route via 3 to 4/5 from 0/1/2
1049         create_announced_chan_between_nodes(&nodes, 0, 3);
1050         create_announced_chan_between_nodes(&nodes, 1, 3);
1051         create_announced_chan_between_nodes(&nodes, 2, 3);
1052         create_announced_chan_between_nodes(&nodes, 3, 4);
1053         create_announced_chan_between_nodes(&nodes, 3, 5);
1054
1055         let (payment_preimage, payment_hash) = route_payment(&nodes[0], &vec!(&nodes[3], &nodes[4])[..], 1000000);
1056
1057         *nodes[0].network_payment_count.borrow_mut() -= 1;
1058         assert_eq!(route_payment(&nodes[1], &vec!(&nodes[3])[..], 1000000).0, payment_preimage);
1059
1060         *nodes[0].network_payment_count.borrow_mut() -= 1;
1061         assert_eq!(route_payment(&nodes[2], &vec!(&nodes[3], &nodes[5])[..], 1000000).0, payment_preimage);
1062
1063         claim_payment(&nodes[0], &vec!(&nodes[3], &nodes[4])[..], payment_preimage);
1064         fail_payment(&nodes[2], &vec!(&nodes[3], &nodes[5])[..], payment_hash);
1065         claim_payment(&nodes[1], &vec!(&nodes[3])[..], payment_preimage);
1066 }
1067
1068 fn do_channel_reserve_test(test_recv: bool) {
1069         use util::rng;
1070         use std::sync::atomic::Ordering;
1071         use ln::msgs::HandleError;
1072
1073         let mut nodes = create_network(3);
1074         let chan_1 = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1900, 1001);
1075         let chan_2 = create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 1900, 1001);
1076
1077         let mut stat01 = get_channel_value_stat!(nodes[0], chan_1.2);
1078         let mut stat11 = get_channel_value_stat!(nodes[1], chan_1.2);
1079
1080         let mut stat12 = get_channel_value_stat!(nodes[1], chan_2.2);
1081         let mut stat22 = get_channel_value_stat!(nodes[2], chan_2.2);
1082
1083         macro_rules! get_route_and_payment_hash {
1084                 ($recv_value: expr) => {{
1085                         let route = nodes[0].router.get_route(&nodes.last().unwrap().node.get_our_node_id(), None, &Vec::new(), $recv_value, TEST_FINAL_CLTV).unwrap();
1086                         let (payment_preimage, payment_hash) = get_payment_preimage_hash!(nodes[0]);
1087                         (route, payment_hash, payment_preimage)
1088                 }}
1089         };
1090
1091         macro_rules! expect_forward {
1092                 ($node: expr) => {{
1093                         let mut events = $node.node.get_and_clear_pending_msg_events();
1094                         assert_eq!(events.len(), 1);
1095                         check_added_monitors!($node, 1);
1096                         let payment_event = SendEvent::from_event(events.remove(0));
1097                         payment_event
1098                 }}
1099         }
1100
1101         let feemsat = 239; // somehow we know?
1102         let total_fee_msat = (nodes.len() - 2) as u64 * 239;
1103
1104         let recv_value_0 = stat01.their_max_htlc_value_in_flight_msat - total_fee_msat;
1105
1106         // attempt to send amt_msat > their_max_htlc_value_in_flight_msat
1107         {
1108                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_0 + 1);
1109                 assert!(route.hops.iter().rev().skip(1).all(|h| h.fee_msat == feemsat));
1110                 let err = nodes[0].node.send_payment(route, our_payment_hash).err().unwrap();
1111                 match err {
1112                         APIError::ChannelUnavailable{err} => assert_eq!(err, "Cannot send value that would put us over our max HTLC value in flight"),
1113                         _ => panic!("Unknown error variants"),
1114                 }
1115         }
1116
1117         let mut htlc_id = 0;
1118         // channel reserve is bigger than their_max_htlc_value_in_flight_msat so loop to deplete
1119         // nodes[0]'s wealth
1120         loop {
1121                 let amt_msat = recv_value_0 + total_fee_msat;
1122                 if stat01.value_to_self_msat - amt_msat < stat01.channel_reserve_msat {
1123                         break;
1124                 }
1125                 send_payment(&nodes[0], &vec![&nodes[1], &nodes[2]][..], recv_value_0);
1126                 htlc_id += 1;
1127
1128                 let (stat01_, stat11_, stat12_, stat22_) = (
1129                         get_channel_value_stat!(nodes[0], chan_1.2),
1130                         get_channel_value_stat!(nodes[1], chan_1.2),
1131                         get_channel_value_stat!(nodes[1], chan_2.2),
1132                         get_channel_value_stat!(nodes[2], chan_2.2),
1133                 );
1134
1135                 assert_eq!(stat01_.value_to_self_msat, stat01.value_to_self_msat - amt_msat);
1136                 assert_eq!(stat11_.value_to_self_msat, stat11.value_to_self_msat + amt_msat);
1137                 assert_eq!(stat12_.value_to_self_msat, stat12.value_to_self_msat - (amt_msat - feemsat));
1138                 assert_eq!(stat22_.value_to_self_msat, stat22.value_to_self_msat + (amt_msat - feemsat));
1139                 stat01 = stat01_; stat11 = stat11_; stat12 = stat12_; stat22 = stat22_;
1140         }
1141
1142         {
1143                 let recv_value = stat01.value_to_self_msat - stat01.channel_reserve_msat - total_fee_msat;
1144                 // attempt to get channel_reserve violation
1145                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value + 1);
1146                 let err = nodes[0].node.send_payment(route.clone(), our_payment_hash).err().unwrap();
1147                 match err {
1148                         APIError::ChannelUnavailable{err} => assert_eq!(err, "Cannot send value that would put us over our reserve value"),
1149                         _ => panic!("Unknown error variants"),
1150                 }
1151         }
1152
1153         // adding pending output
1154         let recv_value_1 = (stat01.value_to_self_msat - stat01.channel_reserve_msat - total_fee_msat)/2;
1155         let amt_msat_1 = recv_value_1 + total_fee_msat;
1156
1157         let (route_1, our_payment_hash_1, our_payment_preimage_1) = get_route_and_payment_hash!(recv_value_1);
1158         let payment_event_1 = {
1159                 nodes[0].node.send_payment(route_1, our_payment_hash_1).unwrap();
1160                 check_added_monitors!(nodes[0], 1);
1161
1162                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1163                 assert_eq!(events.len(), 1);
1164                 SendEvent::from_event(events.remove(0))
1165         };
1166         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event_1.msgs[0]).unwrap();
1167
1168         // channel reserve test with htlc pending output > 0
1169         let recv_value_2 = stat01.value_to_self_msat - amt_msat_1 - stat01.channel_reserve_msat - total_fee_msat;
1170         {
1171                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_2 + 1);
1172                 match nodes[0].node.send_payment(route, our_payment_hash).err().unwrap() {
1173                         APIError::ChannelUnavailable{err} => assert_eq!(err, "Cannot send value that would put us over our reserve value"),
1174                         _ => panic!("Unknown error variants"),
1175                 }
1176         }
1177
1178         {
1179                 // test channel_reserve test on nodes[1] side
1180                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_2 + 1);
1181
1182                 // Need to manually create update_add_htlc message to go around the channel reserve check in send_htlc()
1183                 let secp_ctx = Secp256k1::new();
1184                 let session_priv = SecretKey::from_slice(&{
1185                         let mut session_key = [0; 32];
1186                         rng::fill_bytes(&mut session_key);
1187                         session_key
1188                 }).expect("RNG is bad!");
1189
1190                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
1191                 let onion_keys = onion_utils::construct_onion_keys(&secp_ctx, &route, &session_priv).unwrap();
1192                 let (onion_payloads, htlc_msat, htlc_cltv) = onion_utils::build_onion_payloads(&route, cur_height).unwrap();
1193                 let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, &our_payment_hash);
1194                 let msg = msgs::UpdateAddHTLC {
1195                         channel_id: chan_1.2,
1196                         htlc_id,
1197                         amount_msat: htlc_msat,
1198                         payment_hash: our_payment_hash,
1199                         cltv_expiry: htlc_cltv,
1200                         onion_routing_packet: onion_packet,
1201                 };
1202
1203                 if test_recv {
1204                         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg).err().unwrap();
1205                         match err {
1206                                 HandleError{err, .. } => assert_eq!(err, "Remote HTLC add would put them over their reserve value"),
1207                         }
1208                         // If we send a garbage message, the channel should get closed, making the rest of this test case fail.
1209                         assert_eq!(nodes[1].node.list_channels().len(), 1);
1210                         assert_eq!(nodes[1].node.list_channels().len(), 1);
1211                         check_closed_broadcast!(nodes[1]);
1212                         return;
1213                 }
1214         }
1215
1216         // split the rest to test holding cell
1217         let recv_value_21 = recv_value_2/2;
1218         let recv_value_22 = recv_value_2 - recv_value_21 - total_fee_msat;
1219         {
1220                 let stat = get_channel_value_stat!(nodes[0], chan_1.2);
1221                 assert_eq!(stat.value_to_self_msat - (stat.pending_outbound_htlcs_amount_msat + recv_value_21 + recv_value_22 + total_fee_msat + total_fee_msat), stat.channel_reserve_msat);
1222         }
1223
1224         // now see if they go through on both sides
1225         let (route_21, our_payment_hash_21, our_payment_preimage_21) = get_route_and_payment_hash!(recv_value_21);
1226         // but this will stuck in the holding cell
1227         nodes[0].node.send_payment(route_21, our_payment_hash_21).unwrap();
1228         check_added_monitors!(nodes[0], 0);
1229         let events = nodes[0].node.get_and_clear_pending_events();
1230         assert_eq!(events.len(), 0);
1231
1232         // test with outbound holding cell amount > 0
1233         {
1234                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_22+1);
1235                 match nodes[0].node.send_payment(route, our_payment_hash).err().unwrap() {
1236                         APIError::ChannelUnavailable{err} => assert_eq!(err, "Cannot send value that would put us over our reserve value"),
1237                         _ => panic!("Unknown error variants"),
1238                 }
1239         }
1240
1241         let (route_22, our_payment_hash_22, our_payment_preimage_22) = get_route_and_payment_hash!(recv_value_22);
1242         // this will also stuck in the holding cell
1243         nodes[0].node.send_payment(route_22, our_payment_hash_22).unwrap();
1244         check_added_monitors!(nodes[0], 0);
1245         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1246         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1247
1248         // flush the pending htlc
1249         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event_1.commitment_msg).unwrap();
1250         let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1251         check_added_monitors!(nodes[1], 1);
1252
1253         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_revoke_and_ack).unwrap();
1254         check_added_monitors!(nodes[0], 1);
1255         let commitment_update_2 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1256
1257         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_commitment_signed).unwrap();
1258         let bs_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1259         // No commitment_signed so get_event_msg's assert(len == 1) passes
1260         check_added_monitors!(nodes[0], 1);
1261
1262         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
1263         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1264         check_added_monitors!(nodes[1], 1);
1265
1266         expect_pending_htlcs_forwardable!(nodes[1]);
1267
1268         let ref payment_event_11 = expect_forward!(nodes[1]);
1269         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_11.msgs[0]).unwrap();
1270         commitment_signed_dance!(nodes[2], nodes[1], payment_event_11.commitment_msg, false);
1271
1272         expect_pending_htlcs_forwardable!(nodes[2]);
1273         expect_payment_received!(nodes[2], our_payment_hash_1, recv_value_1);
1274
1275         // flush the htlcs in the holding cell
1276         assert_eq!(commitment_update_2.update_add_htlcs.len(), 2);
1277         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &commitment_update_2.update_add_htlcs[0]).unwrap();
1278         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &commitment_update_2.update_add_htlcs[1]).unwrap();
1279         commitment_signed_dance!(nodes[1], nodes[0], &commitment_update_2.commitment_signed, false);
1280         expect_pending_htlcs_forwardable!(nodes[1]);
1281
1282         let ref payment_event_3 = expect_forward!(nodes[1]);
1283         assert_eq!(payment_event_3.msgs.len(), 2);
1284         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_3.msgs[0]).unwrap();
1285         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_3.msgs[1]).unwrap();
1286
1287         commitment_signed_dance!(nodes[2], nodes[1], &payment_event_3.commitment_msg, false);
1288         expect_pending_htlcs_forwardable!(nodes[2]);
1289
1290         let events = nodes[2].node.get_and_clear_pending_events();
1291         assert_eq!(events.len(), 2);
1292         match events[0] {
1293                 Event::PaymentReceived { ref payment_hash, amt } => {
1294                         assert_eq!(our_payment_hash_21, *payment_hash);
1295                         assert_eq!(recv_value_21, amt);
1296                 },
1297                 _ => panic!("Unexpected event"),
1298         }
1299         match events[1] {
1300                 Event::PaymentReceived { ref payment_hash, amt } => {
1301                         assert_eq!(our_payment_hash_22, *payment_hash);
1302                         assert_eq!(recv_value_22, amt);
1303                 },
1304                 _ => panic!("Unexpected event"),
1305         }
1306
1307         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_1);
1308         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_21);
1309         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_22);
1310
1311         let expected_value_to_self = stat01.value_to_self_msat - (recv_value_1 + total_fee_msat) - (recv_value_21 + total_fee_msat) - (recv_value_22 + total_fee_msat);
1312         let stat0 = get_channel_value_stat!(nodes[0], chan_1.2);
1313         assert_eq!(stat0.value_to_self_msat, expected_value_to_self);
1314         assert_eq!(stat0.value_to_self_msat, stat0.channel_reserve_msat);
1315
1316         let stat2 = get_channel_value_stat!(nodes[2], chan_2.2);
1317         assert_eq!(stat2.value_to_self_msat, stat22.value_to_self_msat + recv_value_1 + recv_value_21 + recv_value_22);
1318 }
1319
1320 #[test]
1321 fn channel_reserve_test() {
1322         do_channel_reserve_test(false);
1323         do_channel_reserve_test(true);
1324 }
1325
1326 #[test]
1327 fn channel_monitor_network_test() {
1328         // Simple test which builds a network of ChannelManagers, connects them to each other, and
1329         // tests that ChannelMonitor is able to recover from various states.
1330         let nodes = create_network(5);
1331
1332         // Create some initial channels
1333         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1334         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
1335         let chan_3 = create_announced_chan_between_nodes(&nodes, 2, 3);
1336         let chan_4 = create_announced_chan_between_nodes(&nodes, 3, 4);
1337
1338         // Rebalance the network a bit by relaying one payment through all the channels...
1339         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000);
1340         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000);
1341         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000);
1342         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000);
1343
1344         // Simple case with no pending HTLCs:
1345         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), true);
1346         {
1347                 let mut node_txn = test_txn_broadcast(&nodes[1], &chan_1, None, HTLCType::NONE);
1348                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1349                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn.drain(..).next().unwrap()] }, 1);
1350                 test_txn_broadcast(&nodes[0], &chan_1, None, HTLCType::NONE);
1351         }
1352         get_announce_close_broadcast_events(&nodes, 0, 1);
1353         assert_eq!(nodes[0].node.list_channels().len(), 0);
1354         assert_eq!(nodes[1].node.list_channels().len(), 1);
1355
1356         // One pending HTLC is discarded by the force-close:
1357         let payment_preimage_1 = route_payment(&nodes[1], &vec!(&nodes[2], &nodes[3])[..], 3000000).0;
1358
1359         // Simple case of one pending HTLC to HTLC-Timeout
1360         nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), true);
1361         {
1362                 let mut node_txn = test_txn_broadcast(&nodes[1], &chan_2, None, HTLCType::TIMEOUT);
1363                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1364                 nodes[2].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn.drain(..).next().unwrap()] }, 1);
1365                 test_txn_broadcast(&nodes[2], &chan_2, None, HTLCType::NONE);
1366         }
1367         get_announce_close_broadcast_events(&nodes, 1, 2);
1368         assert_eq!(nodes[1].node.list_channels().len(), 0);
1369         assert_eq!(nodes[2].node.list_channels().len(), 1);
1370
1371         macro_rules! claim_funds {
1372                 ($node: expr, $prev_node: expr, $preimage: expr) => {
1373                         {
1374                                 assert!($node.node.claim_funds($preimage));
1375                                 check_added_monitors!($node, 1);
1376
1377                                 let events = $node.node.get_and_clear_pending_msg_events();
1378                                 assert_eq!(events.len(), 1);
1379                                 match events[0] {
1380                                         MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, .. } } => {
1381                                                 assert!(update_add_htlcs.is_empty());
1382                                                 assert!(update_fail_htlcs.is_empty());
1383                                                 assert_eq!(*node_id, $prev_node.node.get_our_node_id());
1384                                         },
1385                                         _ => panic!("Unexpected event"),
1386                                 };
1387                         }
1388                 }
1389         }
1390
1391         // nodes[3] gets the preimage, but nodes[2] already disconnected, resulting in a nodes[2]
1392         // HTLC-Timeout and a nodes[3] claim against it (+ its own announces)
1393         nodes[2].node.peer_disconnected(&nodes[3].node.get_our_node_id(), true);
1394         {
1395                 let node_txn = test_txn_broadcast(&nodes[2], &chan_3, None, HTLCType::TIMEOUT);
1396
1397                 // Claim the payment on nodes[3], giving it knowledge of the preimage
1398                 claim_funds!(nodes[3], nodes[2], payment_preimage_1);
1399
1400                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1401                 nodes[3].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[0].clone()] }, 1);
1402
1403                 check_preimage_claim(&nodes[3], &node_txn);
1404         }
1405         get_announce_close_broadcast_events(&nodes, 2, 3);
1406         assert_eq!(nodes[2].node.list_channels().len(), 0);
1407         assert_eq!(nodes[3].node.list_channels().len(), 1);
1408
1409         { // Cheat and reset nodes[4]'s height to 1
1410                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1411                 nodes[4].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![] }, 1);
1412         }
1413
1414         assert_eq!(nodes[3].node.latest_block_height.load(Ordering::Acquire), 1);
1415         assert_eq!(nodes[4].node.latest_block_height.load(Ordering::Acquire), 1);
1416         // One pending HTLC to time out:
1417         let payment_preimage_2 = route_payment(&nodes[3], &vec!(&nodes[4])[..], 3000000).0;
1418         // CLTV expires at TEST_FINAL_CLTV + 1 (current height) + 1 (added in send_payment for
1419         // buffer space).
1420
1421         {
1422                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1423                 nodes[3].chain_monitor.block_connected_checked(&header, 2, &Vec::new()[..], &[0; 0]);
1424                 for i in 3..TEST_FINAL_CLTV + 2 + HTLC_FAIL_TIMEOUT_BLOCKS + 1 {
1425                         header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1426                         nodes[3].chain_monitor.block_connected_checked(&header, i, &Vec::new()[..], &[0; 0]);
1427                 }
1428
1429                 let node_txn = test_txn_broadcast(&nodes[3], &chan_4, None, HTLCType::TIMEOUT);
1430
1431                 // Claim the payment on nodes[4], giving it knowledge of the preimage
1432                 claim_funds!(nodes[4], nodes[3], payment_preimage_2);
1433
1434                 header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1435                 nodes[4].chain_monitor.block_connected_checked(&header, 2, &Vec::new()[..], &[0; 0]);
1436                 for i in 3..TEST_FINAL_CLTV + 2 - CLTV_CLAIM_BUFFER + 1 {
1437                         header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1438                         nodes[4].chain_monitor.block_connected_checked(&header, i, &Vec::new()[..], &[0; 0]);
1439                 }
1440
1441                 test_txn_broadcast(&nodes[4], &chan_4, None, HTLCType::SUCCESS);
1442
1443                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1444                 nodes[4].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[0].clone()] }, TEST_FINAL_CLTV - 5);
1445
1446                 check_preimage_claim(&nodes[4], &node_txn);
1447         }
1448         get_announce_close_broadcast_events(&nodes, 3, 4);
1449         assert_eq!(nodes[3].node.list_channels().len(), 0);
1450         assert_eq!(nodes[4].node.list_channels().len(), 0);
1451 }
1452
1453 #[test]
1454 fn test_justice_tx() {
1455         // Test justice txn built on revoked HTLC-Success tx, against both sides
1456
1457         let nodes = create_network(2);
1458         // Create some new channels:
1459         let chan_5 = create_announced_chan_between_nodes(&nodes, 0, 1);
1460
1461         // A pending HTLC which will be revoked:
1462         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
1463         // Get the will-be-revoked local txn from nodes[0]
1464         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.iter().next().unwrap().1.last_local_commitment_txn.clone();
1465         assert_eq!(revoked_local_txn.len(), 2); // First commitment tx, then HTLC tx
1466         assert_eq!(revoked_local_txn[0].input.len(), 1);
1467         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_5.3.txid());
1468         assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
1469         assert_eq!(revoked_local_txn[1].input.len(), 1);
1470         assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
1471         assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
1472         // Revoke the old state
1473         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
1474
1475         {
1476                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1477                 nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1478                 {
1479                         let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
1480                         assert_eq!(node_txn.len(), 3);
1481                         assert_eq!(node_txn.pop().unwrap(), node_txn[0]); // An outpoint registration will result in a 2nd block_connected
1482                         assert_eq!(node_txn[0].input.len(), 2); // We should claim the revoked output and the HTLC output
1483
1484                         check_spends!(node_txn[0], revoked_local_txn[0].clone());
1485                         node_txn.swap_remove(0);
1486                 }
1487                 test_txn_broadcast(&nodes[1], &chan_5, None, HTLCType::NONE);
1488
1489                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1490                 let node_txn = test_txn_broadcast(&nodes[0], &chan_5, Some(revoked_local_txn[0].clone()), HTLCType::TIMEOUT);
1491                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1492                 nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[1].clone()] }, 1);
1493                 test_revoked_htlc_claim_txn_broadcast(&nodes[1], node_txn[1].clone());
1494         }
1495         get_announce_close_broadcast_events(&nodes, 0, 1);
1496
1497         assert_eq!(nodes[0].node.list_channels().len(), 0);
1498         assert_eq!(nodes[1].node.list_channels().len(), 0);
1499
1500         // We test justice_tx build by A on B's revoked HTLC-Success tx
1501         // Create some new channels:
1502         let chan_6 = create_announced_chan_between_nodes(&nodes, 0, 1);
1503
1504         // A pending HTLC which will be revoked:
1505         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
1506         // Get the will-be-revoked local txn from B
1507         let revoked_local_txn = nodes[1].node.channel_state.lock().unwrap().by_id.iter().next().unwrap().1.last_local_commitment_txn.clone();
1508         assert_eq!(revoked_local_txn.len(), 1); // Only commitment tx
1509         assert_eq!(revoked_local_txn[0].input.len(), 1);
1510         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_6.3.txid());
1511         assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to A are present
1512         // Revoke the old state
1513         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_4);
1514         {
1515                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1516                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1517                 {
1518                         let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
1519                         assert_eq!(node_txn.len(), 3);
1520                         assert_eq!(node_txn.pop().unwrap(), node_txn[0]); // An outpoint registration will result in a 2nd block_connected
1521                         assert_eq!(node_txn[0].input.len(), 1); // We claim the received HTLC output
1522
1523                         check_spends!(node_txn[0], revoked_local_txn[0].clone());
1524                         node_txn.swap_remove(0);
1525                 }
1526                 test_txn_broadcast(&nodes[0], &chan_6, None, HTLCType::NONE);
1527
1528                 nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1529                 let node_txn = test_txn_broadcast(&nodes[1], &chan_6, Some(revoked_local_txn[0].clone()), HTLCType::SUCCESS);
1530                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1531                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[1].clone()] }, 1);
1532                 test_revoked_htlc_claim_txn_broadcast(&nodes[0], node_txn[1].clone());
1533         }
1534         get_announce_close_broadcast_events(&nodes, 0, 1);
1535         assert_eq!(nodes[0].node.list_channels().len(), 0);
1536         assert_eq!(nodes[1].node.list_channels().len(), 0);
1537 }
1538
1539 #[test]
1540 fn revoked_output_claim() {
1541         // Simple test to ensure a node will claim a revoked output when a stale remote commitment
1542         // transaction is broadcast by its counterparty
1543         let nodes = create_network(2);
1544         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1545         // node[0] is gonna to revoke an old state thus node[1] should be able to claim the revoked output
1546         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
1547         assert_eq!(revoked_local_txn.len(), 1);
1548         // Only output is the full channel value back to nodes[0]:
1549         assert_eq!(revoked_local_txn[0].output.len(), 1);
1550         // Send a payment through, updating everyone's latest commitment txn
1551         send_payment(&nodes[0], &vec!(&nodes[1])[..], 5000000);
1552
1553         // Inform nodes[1] that nodes[0] broadcast a stale tx
1554         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1555         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1556         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
1557         assert_eq!(node_txn.len(), 3); // nodes[1] will broadcast justice tx twice, and its own local state once
1558
1559         assert_eq!(node_txn[0], node_txn[2]);
1560
1561         check_spends!(node_txn[0], revoked_local_txn[0].clone());
1562         check_spends!(node_txn[1], chan_1.3.clone());
1563
1564         // Inform nodes[0] that a watchtower cheated on its behalf, so it will force-close the chan
1565         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1566         get_announce_close_broadcast_events(&nodes, 0, 1);
1567 }
1568
1569 #[test]
1570 fn claim_htlc_outputs_shared_tx() {
1571         // Node revoked old state, htlcs haven't time out yet, claim them in shared justice tx
1572         let nodes = create_network(2);
1573
1574         // Create some new channel:
1575         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1576
1577         // Rebalance the network to generate htlc in the two directions
1578         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
1579         // node[0] is gonna to revoke an old state thus node[1] should be able to claim both offered/received HTLC outputs on top of commitment tx
1580         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
1581         let (_payment_preimage_2, payment_hash_2) = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000);
1582
1583         // Get the will-be-revoked local txn from node[0]
1584         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
1585         assert_eq!(revoked_local_txn.len(), 2); // commitment tx + 1 HTLC-Timeout tx
1586         assert_eq!(revoked_local_txn[0].input.len(), 1);
1587         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
1588         assert_eq!(revoked_local_txn[1].input.len(), 1);
1589         assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
1590         assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
1591         check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
1592
1593         //Revoke the old state
1594         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_1);
1595
1596         {
1597                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1598                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1599                 nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
1600
1601                 let events = nodes[1].node.get_and_clear_pending_events();
1602                 assert_eq!(events.len(), 1);
1603                 match events[0] {
1604                         Event::PaymentFailed { payment_hash, .. } => {
1605                                 assert_eq!(payment_hash, payment_hash_2);
1606                         },
1607                         _ => panic!("Unexpected event"),
1608                 }
1609
1610                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
1611                 assert_eq!(node_txn.len(), 4);
1612
1613                 assert_eq!(node_txn[0].input.len(), 3); // Claim the revoked output + both revoked HTLC outputs
1614                 check_spends!(node_txn[0], revoked_local_txn[0].clone());
1615
1616                 assert_eq!(node_txn[0], node_txn[3]); // justice tx is duplicated due to block re-scanning
1617
1618                 let mut witness_lens = BTreeSet::new();
1619                 witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len());
1620                 witness_lens.insert(node_txn[0].input[1].witness.last().unwrap().len());
1621                 witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
1622                 assert_eq!(witness_lens.len(), 3);
1623                 assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
1624                 assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
1625                 assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
1626
1627                 // Next nodes[1] broadcasts its current local tx state:
1628                 assert_eq!(node_txn[1].input.len(), 1);
1629                 assert_eq!(node_txn[1].input[0].previous_output.txid, chan_1.3.txid()); //Spending funding tx unique txouput, tx broadcasted by ChannelManager
1630
1631                 assert_eq!(node_txn[2].input.len(), 1);
1632                 let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
1633                 assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
1634                 assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
1635                 assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
1636                 assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
1637         }
1638         get_announce_close_broadcast_events(&nodes, 0, 1);
1639         assert_eq!(nodes[0].node.list_channels().len(), 0);
1640         assert_eq!(nodes[1].node.list_channels().len(), 0);
1641 }
1642
1643 #[test]
1644 fn claim_htlc_outputs_single_tx() {
1645         // Node revoked old state, htlcs have timed out, claim each of them in separated justice tx
1646         let nodes = create_network(2);
1647
1648         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1649
1650         // Rebalance the network to generate htlc in the two directions
1651         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
1652         // node[0] is gonna to revoke an old state thus node[1] should be able to claim both offered/received HTLC outputs on top of commitment tx, but this
1653         // time as two different claim transactions as we're gonna to timeout htlc with given a high current height
1654         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
1655         let (_payment_preimage_2, payment_hash_2) = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000);
1656
1657         // Get the will-be-revoked local txn from node[0]
1658         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
1659
1660         //Revoke the old state
1661         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_1);
1662
1663         {
1664                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1665                 nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 200);
1666                 nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 200);
1667
1668                 let events = nodes[1].node.get_and_clear_pending_events();
1669                 assert_eq!(events.len(), 1);
1670                 match events[0] {
1671                         Event::PaymentFailed { payment_hash, .. } => {
1672                                 assert_eq!(payment_hash, payment_hash_2);
1673                         },
1674                         _ => panic!("Unexpected event"),
1675                 }
1676
1677                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
1678                 assert_eq!(node_txn.len(), 12); // ChannelManager : 2, ChannelMontitor: 8 (1 standard revoked output, 2 revocation htlc tx, 1 local commitment tx + 1 htlc timeout tx) * 2 (block-rescan)
1679
1680                 assert_eq!(node_txn[0], node_txn[7]);
1681                 assert_eq!(node_txn[1], node_txn[8]);
1682                 assert_eq!(node_txn[2], node_txn[9]);
1683                 assert_eq!(node_txn[3], node_txn[10]);
1684                 assert_eq!(node_txn[4], node_txn[11]);
1685                 assert_eq!(node_txn[3], node_txn[5]); //local commitment tx + htlc timeout tx broadcated by ChannelManger
1686                 assert_eq!(node_txn[4], node_txn[6]);
1687
1688                 assert_eq!(node_txn[0].input.len(), 1);
1689                 assert_eq!(node_txn[1].input.len(), 1);
1690                 assert_eq!(node_txn[2].input.len(), 1);
1691
1692                 let mut revoked_tx_map = HashMap::new();
1693                 revoked_tx_map.insert(revoked_local_txn[0].txid(), revoked_local_txn[0].clone());
1694                 node_txn[0].verify(&revoked_tx_map).unwrap();
1695                 node_txn[1].verify(&revoked_tx_map).unwrap();
1696                 node_txn[2].verify(&revoked_tx_map).unwrap();
1697
1698                 let mut witness_lens = BTreeSet::new();
1699                 witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len());
1700                 witness_lens.insert(node_txn[1].input[0].witness.last().unwrap().len());
1701                 witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
1702                 assert_eq!(witness_lens.len(), 3);
1703                 assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
1704                 assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
1705                 assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
1706
1707                 assert_eq!(node_txn[3].input.len(), 1);
1708                 check_spends!(node_txn[3], chan_1.3.clone());
1709
1710                 assert_eq!(node_txn[4].input.len(), 1);
1711                 let witness_script = node_txn[4].input[0].witness.last().unwrap();
1712                 assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
1713                 assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
1714                 assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
1715                 assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
1716         }
1717         get_announce_close_broadcast_events(&nodes, 0, 1);
1718         assert_eq!(nodes[0].node.list_channels().len(), 0);
1719         assert_eq!(nodes[1].node.list_channels().len(), 0);
1720 }
1721
1722 #[test]
1723 fn test_htlc_on_chain_success() {
1724         // Test that in case of an unilateral close onchain, we detect the state of output thanks to
1725         // ChainWatchInterface and pass the preimage backward accordingly. So here we test that ChannelManager is
1726         // broadcasting the right event to other nodes in payment path.
1727         // We test with two HTLCs simultaneously as that was not handled correctly in the past.
1728         // A --------------------> B ----------------------> C (preimage)
1729         // First, C should claim the HTLC outputs via HTLC-Success when its own latest local
1730         // commitment transaction was broadcast.
1731         // Then, B should learn the preimage from said transactions, attempting to claim backwards
1732         // towards B.
1733         // B should be able to claim via preimage if A then broadcasts its local tx.
1734         // Finally, when A sees B's latest local commitment transaction it should be able to claim
1735         // the HTLC outputs via the preimage it learned (which, once confirmed should generate a
1736         // PaymentSent event).
1737
1738         let nodes = create_network(3);
1739
1740         // Create some initial channels
1741         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1742         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
1743
1744         // Rebalance the network a bit by relaying one payment through all the channels...
1745         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
1746         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
1747
1748         let (our_payment_preimage, _payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
1749         let (our_payment_preimage_2, _payment_hash_2) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
1750         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
1751
1752         // Broadcast legit commitment tx from C on B's chain
1753         // Broadcast HTLC Success transation by C on received output from C's commitment tx on B's chain
1754         let commitment_tx = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
1755         assert_eq!(commitment_tx.len(), 1);
1756         check_spends!(commitment_tx[0], chan_2.3.clone());
1757         nodes[2].node.claim_funds(our_payment_preimage);
1758         nodes[2].node.claim_funds(our_payment_preimage_2);
1759         check_added_monitors!(nodes[2], 2);
1760         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1761         assert!(updates.update_add_htlcs.is_empty());
1762         assert!(updates.update_fail_htlcs.is_empty());
1763         assert!(updates.update_fail_malformed_htlcs.is_empty());
1764         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1765
1766         nodes[2].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
1767         check_closed_broadcast!(nodes[2]);
1768         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 1 (commitment tx), ChannelMonitor : 4 (2*2 * HTLC-Success tx)
1769         assert_eq!(node_txn.len(), 5);
1770         assert_eq!(node_txn[0], node_txn[3]);
1771         assert_eq!(node_txn[1], node_txn[4]);
1772         assert_eq!(node_txn[2], commitment_tx[0]);
1773         check_spends!(node_txn[0], commitment_tx[0].clone());
1774         check_spends!(node_txn[1], commitment_tx[0].clone());
1775         assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1776         assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1777         assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1778         assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1779         assert_eq!(node_txn[0].lock_time, 0);
1780         assert_eq!(node_txn[1].lock_time, 0);
1781
1782         // Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
1783         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: node_txn}, 1);
1784         let events = nodes[1].node.get_and_clear_pending_msg_events();
1785         {
1786                 let mut added_monitors = nodes[1].chan_monitor.added_monitors.lock().unwrap();
1787                 assert_eq!(added_monitors.len(), 2);
1788                 assert_eq!(added_monitors[0].0.txid, chan_1.3.txid());
1789                 assert_eq!(added_monitors[1].0.txid, chan_1.3.txid());
1790                 added_monitors.clear();
1791         }
1792         assert_eq!(events.len(), 2);
1793         match events[0] {
1794                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
1795                 _ => panic!("Unexpected event"),
1796         }
1797         match events[1] {
1798                 MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, ref update_fulfill_htlcs, ref update_fail_malformed_htlcs, .. } } => {
1799                         assert!(update_add_htlcs.is_empty());
1800                         assert!(update_fail_htlcs.is_empty());
1801                         assert_eq!(update_fulfill_htlcs.len(), 1);
1802                         assert!(update_fail_malformed_htlcs.is_empty());
1803                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
1804                 },
1805                 _ => panic!("Unexpected event"),
1806         };
1807         macro_rules! check_tx_local_broadcast {
1808                 ($node: expr, $htlc_offered: expr, $commitment_tx: expr, $chan_tx: expr) => { {
1809                         // ChannelManager : 3 (commitment tx, 2*HTLC-Timeout tx), ChannelMonitor : 2 (timeout tx) * 2 (block-rescan)
1810                         let mut node_txn = $node.tx_broadcaster.txn_broadcasted.lock().unwrap();
1811                         assert_eq!(node_txn.len(), 7);
1812                         assert_eq!(node_txn[0], node_txn[5]);
1813                         assert_eq!(node_txn[1], node_txn[6]);
1814                         check_spends!(node_txn[0], $commitment_tx.clone());
1815                         check_spends!(node_txn[1], $commitment_tx.clone());
1816                         assert_ne!(node_txn[0].lock_time, 0);
1817                         assert_ne!(node_txn[1].lock_time, 0);
1818                         if $htlc_offered {
1819                                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1820                                 assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1821                                 assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1822                                 assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1823                         } else {
1824                                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1825                                 assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1826                                 assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
1827                                 assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
1828                         }
1829                         check_spends!(node_txn[2], $chan_tx.clone());
1830                         check_spends!(node_txn[3], node_txn[2].clone());
1831                         check_spends!(node_txn[4], node_txn[2].clone());
1832                         assert_eq!(node_txn[2].input[0].witness.last().unwrap().len(), 71);
1833                         assert_eq!(node_txn[3].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1834                         assert_eq!(node_txn[4].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1835                         assert!(node_txn[3].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1836                         assert!(node_txn[4].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
1837                         assert_ne!(node_txn[3].lock_time, 0);
1838                         assert_ne!(node_txn[4].lock_time, 0);
1839                         node_txn.clear();
1840                 } }
1841         }
1842         // nodes[1] now broadcasts its own local state as a fallback, suggesting an alternate
1843         // commitment transaction with a corresponding HTLC-Timeout transactions, as well as a
1844         // timeout-claim of the output that nodes[2] just claimed via success.
1845         check_tx_local_broadcast!(nodes[1], false, commitment_tx[0], chan_2.3);
1846
1847         // Broadcast legit commitment tx from A on B's chain
1848         // Broadcast preimage tx by B on offered output from A commitment tx  on A's chain
1849         let commitment_tx = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
1850         check_spends!(commitment_tx[0], chan_1.3.clone());
1851         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
1852         check_closed_broadcast!(nodes[1]);
1853         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 1 (commitment tx), ChannelMonitor : 1 (HTLC-Success) * 2 (block-rescan)
1854         assert_eq!(node_txn.len(), 3);
1855         assert_eq!(node_txn[0], node_txn[2]);
1856         check_spends!(node_txn[0], commitment_tx[0].clone());
1857         assert_eq!(node_txn[0].input.len(), 2);
1858         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1859         assert_eq!(node_txn[0].input[1].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1860         assert_eq!(node_txn[0].lock_time, 0);
1861         assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
1862         check_spends!(node_txn[1], chan_1.3.clone());
1863         assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
1864         // We don't bother to check that B can claim the HTLC output on its commitment tx here as
1865         // we already checked the same situation with A.
1866
1867         // Verify that A's ChannelManager is able to extract preimage from preimage tx and generate PaymentSent
1868         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone(), node_txn[0].clone()] }, 1);
1869         check_closed_broadcast!(nodes[0]);
1870         let events = nodes[0].node.get_and_clear_pending_events();
1871         assert_eq!(events.len(), 2);
1872         let mut first_claimed = false;
1873         for event in events {
1874                 match event {
1875                         Event::PaymentSent { payment_preimage } => {
1876                                 if payment_preimage == our_payment_preimage {
1877                                         assert!(!first_claimed);
1878                                         first_claimed = true;
1879                                 } else {
1880                                         assert_eq!(payment_preimage, our_payment_preimage_2);
1881                                 }
1882                         },
1883                         _ => panic!("Unexpected event"),
1884                 }
1885         }
1886         check_tx_local_broadcast!(nodes[0], true, commitment_tx[0], chan_1.3);
1887 }
1888
1889 #[test]
1890 fn test_htlc_on_chain_timeout() {
1891         // Test that in case of an unilateral close onchain, we detect the state of output thanks to
1892         // ChainWatchInterface and timeout the HTLC  bacward accordingly. So here we test that ChannelManager is
1893         // broadcasting the right event to other nodes in payment path.
1894         // A ------------------> B ----------------------> C (timeout)
1895         //    B's commitment tx                 C's commitment tx
1896         //            \                                  \
1897         //         B's HTLC timeout tx               B's timeout tx
1898
1899         let nodes = create_network(3);
1900
1901         // Create some intial channels
1902         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
1903         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
1904
1905         // Rebalance the network a bit by relaying one payment thorugh all the channels...
1906         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
1907         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
1908
1909         let (_payment_preimage, payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
1910         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
1911
1912         // Brodacast legit commitment tx from C on B's chain
1913         let commitment_tx = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
1914         check_spends!(commitment_tx[0], chan_2.3.clone());
1915         nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
1916         check_added_monitors!(nodes[2], 0);
1917         expect_pending_htlcs_forwardable!(nodes[2]);
1918         check_added_monitors!(nodes[2], 1);
1919
1920         let events = nodes[2].node.get_and_clear_pending_msg_events();
1921         assert_eq!(events.len(), 1);
1922         match events[0] {
1923                 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, .. } } => {
1924                         assert!(update_add_htlcs.is_empty());
1925                         assert!(!update_fail_htlcs.is_empty());
1926                         assert!(update_fulfill_htlcs.is_empty());
1927                         assert!(update_fail_malformed_htlcs.is_empty());
1928                         assert_eq!(nodes[1].node.get_our_node_id(), *node_id);
1929                 },
1930                 _ => panic!("Unexpected event"),
1931         };
1932         nodes[2].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
1933         check_closed_broadcast!(nodes[2]);
1934         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 1 (commitment tx)
1935         assert_eq!(node_txn.len(), 1);
1936         check_spends!(node_txn[0], chan_2.3.clone());
1937         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 71);
1938
1939         // Broadcast timeout transaction by B on received output fron C's commitment tx on B's chain
1940         // Verify that B's ChannelManager is able to detect that HTLC is timeout by its own tx and react backward in consequence
1941         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 200);
1942         let timeout_tx;
1943         {
1944                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
1945                 assert_eq!(node_txn.len(), 8); // ChannelManager : 2 (commitment tx, HTLC-Timeout tx), ChannelMonitor : 6 (HTLC-Timeout tx, commitment tx, timeout tx) * 2 (block-rescan)
1946                 assert_eq!(node_txn[0], node_txn[5]);
1947                 assert_eq!(node_txn[1], node_txn[6]);
1948                 assert_eq!(node_txn[2], node_txn[7]);
1949                 check_spends!(node_txn[0], commitment_tx[0].clone());
1950                 assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1951                 check_spends!(node_txn[1], chan_2.3.clone());
1952                 check_spends!(node_txn[2], node_txn[1].clone());
1953                 assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
1954                 assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1955                 check_spends!(node_txn[3], chan_2.3.clone());
1956                 check_spends!(node_txn[4], node_txn[3].clone());
1957                 assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
1958                 assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1959                 timeout_tx = node_txn[0].clone();
1960                 node_txn.clear();
1961         }
1962
1963         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![timeout_tx]}, 1);
1964         check_added_monitors!(nodes[1], 0);
1965         check_closed_broadcast!(nodes[1]);
1966
1967         expect_pending_htlcs_forwardable!(nodes[1]);
1968         check_added_monitors!(nodes[1], 1);
1969         let events = nodes[1].node.get_and_clear_pending_msg_events();
1970         assert_eq!(events.len(), 1);
1971         match events[0] {
1972                 MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, ref update_fulfill_htlcs, ref update_fail_malformed_htlcs, .. } } => {
1973                         assert!(update_add_htlcs.is_empty());
1974                         assert!(!update_fail_htlcs.is_empty());
1975                         assert!(update_fulfill_htlcs.is_empty());
1976                         assert!(update_fail_malformed_htlcs.is_empty());
1977                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
1978                 },
1979                 _ => panic!("Unexpected event"),
1980         };
1981         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // Well... here we detect our own htlc_timeout_tx so no tx to be generated
1982         assert_eq!(node_txn.len(), 0);
1983
1984         // Broadcast legit commitment tx from B on A's chain
1985         let commitment_tx = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
1986         check_spends!(commitment_tx[0], chan_1.3.clone());
1987
1988         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 200);
1989         check_closed_broadcast!(nodes[0]);
1990         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Timeout tx), ChannelMonitor : 2 (timeout tx) * 2 block-rescan
1991         assert_eq!(node_txn.len(), 4);
1992         assert_eq!(node_txn[0], node_txn[3]);
1993         check_spends!(node_txn[0], commitment_tx[0].clone());
1994         assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
1995         check_spends!(node_txn[1], chan_1.3.clone());
1996         check_spends!(node_txn[2], node_txn[1].clone());
1997         assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
1998         assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
1999 }
2000
2001 #[test]
2002 fn test_simple_commitment_revoked_fail_backward() {
2003         // Test that in case of a revoked commitment tx, we detect the resolution of output by justice tx
2004         // and fail backward accordingly.
2005
2006         let nodes = create_network(3);
2007
2008         // Create some initial channels
2009         create_announced_chan_between_nodes(&nodes, 0, 1);
2010         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
2011
2012         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 3000000);
2013         // Get the will-be-revoked local txn from nodes[2]
2014         let revoked_local_txn = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
2015         // Revoke the old state
2016         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage);
2017
2018         route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 3000000);
2019
2020         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2021         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2022         check_added_monitors!(nodes[1], 0);
2023         check_closed_broadcast!(nodes[1]);
2024
2025         expect_pending_htlcs_forwardable!(nodes[1]);
2026         check_added_monitors!(nodes[1], 1);
2027         let events = nodes[1].node.get_and_clear_pending_msg_events();
2028         assert_eq!(events.len(), 1);
2029         match events[0] {
2030                 MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, ref update_fulfill_htlcs, ref update_fail_malformed_htlcs, ref commitment_signed, .. } } => {
2031                         assert!(update_add_htlcs.is_empty());
2032                         assert_eq!(update_fail_htlcs.len(), 1);
2033                         assert!(update_fulfill_htlcs.is_empty());
2034                         assert!(update_fail_malformed_htlcs.is_empty());
2035                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2036
2037                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[0]).unwrap();
2038                         commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true);
2039
2040                         let events = nodes[0].node.get_and_clear_pending_msg_events();
2041                         assert_eq!(events.len(), 1);
2042                         match events[0] {
2043                                 MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
2044                                 _ => panic!("Unexpected event"),
2045                         }
2046                         let events = nodes[0].node.get_and_clear_pending_events();
2047                         assert_eq!(events.len(), 1);
2048                         match events[0] {
2049                                 Event::PaymentFailed { .. } => {},
2050                                 _ => panic!("Unexpected event"),
2051                         }
2052                 },
2053                 _ => panic!("Unexpected event"),
2054         }
2055 }
2056
2057 fn do_test_commitment_revoked_fail_backward_exhaustive(deliver_bs_raa: bool, use_dust: bool, no_to_remote: bool) {
2058         // Test that if our counterparty broadcasts a revoked commitment transaction we fail all
2059         // pending HTLCs on that channel backwards even if the HTLCs aren't present in our latest
2060         // commitment transaction anymore.
2061         // To do this, we have the peer which will broadcast a revoked commitment transaction send
2062         // a number of update_fail/commitment_signed updates without ever sending the RAA in
2063         // response to our commitment_signed. This is somewhat misbehavior-y, though not
2064         // technically disallowed and we should probably handle it reasonably.
2065         // Note that this is pretty exhaustive as an outbound HTLC which we haven't yet
2066         // failed/fulfilled backwards must be in at least one of the latest two remote commitment
2067         // transactions:
2068         // * Once we move it out of our holding cell/add it, we will immediately include it in a
2069         //   commitment_signed (implying it will be in the latest remote commitment transaction).
2070         // * Once they remove it, we will send a (the first) commitment_signed without the HTLC,
2071         //   and once they revoke the previous commitment transaction (allowing us to send a new
2072         //   commitment_signed) we will be free to fail/fulfill the HTLC backwards.
2073         let mut nodes = create_network(3);
2074
2075         // Create some initial channels
2076         create_announced_chan_between_nodes(&nodes, 0, 1);
2077         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
2078
2079         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], if no_to_remote { 10_000 } else { 3_000_000 });
2080         // Get the will-be-revoked local txn from nodes[2]
2081         let revoked_local_txn = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
2082         assert_eq!(revoked_local_txn[0].output.len(), if no_to_remote { 1 } else { 2 });
2083         // Revoke the old state
2084         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage);
2085
2086         let value = if use_dust {
2087                 // The dust limit applied to HTLC outputs considers the fee of the HTLC transaction as
2088                 // well, so HTLCs at exactly the dust limit will not be included in commitment txn.
2089                 nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().our_dust_limit_satoshis * 1000
2090         } else { 3000000 };
2091
2092         let (_, first_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2093         let (_, second_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2094         let (_, third_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2095
2096         assert!(nodes[2].node.fail_htlc_backwards(&first_payment_hash, 0));
2097         expect_pending_htlcs_forwardable!(nodes[2]);
2098         check_added_monitors!(nodes[2], 1);
2099         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2100         assert!(updates.update_add_htlcs.is_empty());
2101         assert!(updates.update_fulfill_htlcs.is_empty());
2102         assert!(updates.update_fail_malformed_htlcs.is_empty());
2103         assert_eq!(updates.update_fail_htlcs.len(), 1);
2104         assert!(updates.update_fee.is_none());
2105         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
2106         let bs_raa = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
2107         // Drop the last RAA from 3 -> 2
2108
2109         assert!(nodes[2].node.fail_htlc_backwards(&second_payment_hash, 0));
2110         expect_pending_htlcs_forwardable!(nodes[2]);
2111         check_added_monitors!(nodes[2], 1);
2112         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2113         assert!(updates.update_add_htlcs.is_empty());
2114         assert!(updates.update_fulfill_htlcs.is_empty());
2115         assert!(updates.update_fail_malformed_htlcs.is_empty());
2116         assert_eq!(updates.update_fail_htlcs.len(), 1);
2117         assert!(updates.update_fee.is_none());
2118         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
2119         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &updates.commitment_signed).unwrap();
2120         check_added_monitors!(nodes[1], 1);
2121         // Note that nodes[1] is in AwaitingRAA, so won't send a CS
2122         let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
2123         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa).unwrap();
2124         check_added_monitors!(nodes[2], 1);
2125
2126         assert!(nodes[2].node.fail_htlc_backwards(&third_payment_hash, 0));
2127         expect_pending_htlcs_forwardable!(nodes[2]);
2128         check_added_monitors!(nodes[2], 1);
2129         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2130         assert!(updates.update_add_htlcs.is_empty());
2131         assert!(updates.update_fulfill_htlcs.is_empty());
2132         assert!(updates.update_fail_malformed_htlcs.is_empty());
2133         assert_eq!(updates.update_fail_htlcs.len(), 1);
2134         assert!(updates.update_fee.is_none());
2135         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
2136         // At this point first_payment_hash has dropped out of the latest two commitment
2137         // transactions that nodes[1] is tracking...
2138         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &updates.commitment_signed).unwrap();
2139         check_added_monitors!(nodes[1], 1);
2140         // Note that nodes[1] is (still) in AwaitingRAA, so won't send a CS
2141         let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
2142         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa).unwrap();
2143         check_added_monitors!(nodes[2], 1);
2144
2145         // Add a fourth HTLC, this one will get sequestered away in nodes[1]'s holding cell waiting
2146         // on nodes[2]'s RAA.
2147         let route = nodes[1].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2148         let (_, fourth_payment_hash) = get_payment_preimage_hash!(nodes[0]);
2149         nodes[1].node.send_payment(route, fourth_payment_hash).unwrap();
2150         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2151         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
2152         check_added_monitors!(nodes[1], 0);
2153
2154         if deliver_bs_raa {
2155                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_raa).unwrap();
2156                 // One monitor for the new revocation preimage, no second on as we won't generate a new
2157                 // commitment transaction for nodes[0] until process_pending_htlc_forwards().
2158                 check_added_monitors!(nodes[1], 1);
2159                 let events = nodes[1].node.get_and_clear_pending_events();
2160                 assert_eq!(events.len(), 1);
2161                 match events[0] {
2162                         Event::PendingHTLCsForwardable { .. } => { },
2163                         _ => panic!("Unexpected event"),
2164                 };
2165                 // Deliberately don't process the pending fail-back so they all fail back at once after
2166                 // block connection just like the !deliver_bs_raa case
2167         }
2168
2169         let mut failed_htlcs = HashSet::new();
2170         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
2171
2172         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2173         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2174
2175         let events = nodes[1].node.get_and_clear_pending_events();
2176         assert_eq!(events.len(), if deliver_bs_raa { 1 } else { 2 });
2177         match events[0] {
2178                 Event::PaymentFailed { ref payment_hash, .. } => {
2179                         assert_eq!(*payment_hash, fourth_payment_hash);
2180                 },
2181                 _ => panic!("Unexpected event"),
2182         }
2183         if !deliver_bs_raa {
2184                 match events[1] {
2185                         Event::PendingHTLCsForwardable { .. } => { },
2186                         _ => panic!("Unexpected event"),
2187                 };
2188         }
2189         nodes[1].node.channel_state.lock().unwrap().next_forward = Instant::now();
2190         nodes[1].node.process_pending_htlc_forwards();
2191         check_added_monitors!(nodes[1], 1);
2192
2193         let events = nodes[1].node.get_and_clear_pending_msg_events();
2194         assert_eq!(events.len(), if deliver_bs_raa { 3 } else { 2 });
2195         match events[if deliver_bs_raa { 1 } else { 0 }] {
2196                 MessageSendEvent::BroadcastChannelUpdate { msg: msgs::ChannelUpdate { .. } } => {},
2197                 _ => panic!("Unexpected event"),
2198         }
2199         if deliver_bs_raa {
2200                 match events[0] {
2201                         MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, ref update_fulfill_htlcs, ref update_fail_malformed_htlcs, .. } } => {
2202                                 assert_eq!(nodes[2].node.get_our_node_id(), *node_id);
2203                                 assert_eq!(update_add_htlcs.len(), 1);
2204                                 assert!(update_fulfill_htlcs.is_empty());
2205                                 assert!(update_fail_htlcs.is_empty());
2206                                 assert!(update_fail_malformed_htlcs.is_empty());
2207                         },
2208                         _ => panic!("Unexpected event"),
2209                 }
2210         }
2211         match events[if deliver_bs_raa { 2 } else { 1 }] {
2212                 MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, ref update_fulfill_htlcs, ref update_fail_malformed_htlcs, ref commitment_signed, .. } } => {
2213                         assert!(update_add_htlcs.is_empty());
2214                         assert_eq!(update_fail_htlcs.len(), 3);
2215                         assert!(update_fulfill_htlcs.is_empty());
2216                         assert!(update_fail_malformed_htlcs.is_empty());
2217                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2218
2219                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[0]).unwrap();
2220                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[1]).unwrap();
2221                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[2]).unwrap();
2222
2223                         commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true);
2224
2225                         let events = nodes[0].node.get_and_clear_pending_msg_events();
2226                         // If we delievered B's RAA we got an unknown preimage error, not something
2227                         // that we should update our routing table for.
2228                         assert_eq!(events.len(), if deliver_bs_raa { 2 } else { 3 });
2229                         for event in events {
2230                                 match event {
2231                                         MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
2232                                         _ => panic!("Unexpected event"),
2233                                 }
2234                         }
2235                         let events = nodes[0].node.get_and_clear_pending_events();
2236                         assert_eq!(events.len(), 3);
2237                         match events[0] {
2238                                 Event::PaymentFailed { ref payment_hash, .. } => {
2239                                         assert!(failed_htlcs.insert(payment_hash.0));
2240                                 },
2241                                 _ => panic!("Unexpected event"),
2242                         }
2243                         match events[1] {
2244                                 Event::PaymentFailed { ref payment_hash, .. } => {
2245                                         assert!(failed_htlcs.insert(payment_hash.0));
2246                                 },
2247                                 _ => panic!("Unexpected event"),
2248                         }
2249                         match events[2] {
2250                                 Event::PaymentFailed { ref payment_hash, .. } => {
2251                                         assert!(failed_htlcs.insert(payment_hash.0));
2252                                 },
2253                                 _ => panic!("Unexpected event"),
2254                         }
2255                 },
2256                 _ => panic!("Unexpected event"),
2257         }
2258
2259         assert!(failed_htlcs.contains(&first_payment_hash.0));
2260         assert!(failed_htlcs.contains(&second_payment_hash.0));
2261         assert!(failed_htlcs.contains(&third_payment_hash.0));
2262 }
2263
2264 #[test]
2265 fn test_commitment_revoked_fail_backward_exhaustive_a() {
2266         do_test_commitment_revoked_fail_backward_exhaustive(false, true, false);
2267         do_test_commitment_revoked_fail_backward_exhaustive(true, true, false);
2268         do_test_commitment_revoked_fail_backward_exhaustive(false, false, false);
2269         do_test_commitment_revoked_fail_backward_exhaustive(true, false, false);
2270 }
2271
2272 #[test]
2273 fn test_commitment_revoked_fail_backward_exhaustive_b() {
2274         do_test_commitment_revoked_fail_backward_exhaustive(false, true, true);
2275         do_test_commitment_revoked_fail_backward_exhaustive(true, true, true);
2276         do_test_commitment_revoked_fail_backward_exhaustive(false, false, true);
2277         do_test_commitment_revoked_fail_backward_exhaustive(true, false, true);
2278 }
2279
2280 #[test]
2281 fn test_htlc_ignore_latest_remote_commitment() {
2282         // Test that HTLC transactions spending the latest remote commitment transaction are simply
2283         // ignored if we cannot claim them. This originally tickled an invalid unwrap().
2284         let nodes = create_network(2);
2285         create_announced_chan_between_nodes(&nodes, 0, 1);
2286
2287         route_payment(&nodes[0], &[&nodes[1]], 10000000);
2288         nodes[0].node.force_close_channel(&nodes[0].node.list_channels()[0].channel_id);
2289         check_closed_broadcast!(nodes[0]);
2290
2291         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
2292         assert_eq!(node_txn.len(), 2);
2293
2294         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2295         nodes[1].chain_monitor.block_connected_checked(&header, 1, &[&node_txn[0], &node_txn[1]], &[1; 2]);
2296         check_closed_broadcast!(nodes[1]);
2297
2298         // Duplicate the block_connected call since this may happen due to other listeners
2299         // registering new transactions
2300         nodes[1].chain_monitor.block_connected_checked(&header, 1, &[&node_txn[0], &node_txn[1]], &[1; 2]);
2301 }
2302
2303 #[test]
2304 fn test_force_close_fail_back() {
2305         // Check which HTLCs are failed-backwards on channel force-closure
2306         let mut nodes = create_network(3);
2307         create_announced_chan_between_nodes(&nodes, 0, 1);
2308         create_announced_chan_between_nodes(&nodes, 1, 2);
2309
2310         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, 42).unwrap();
2311
2312         let (our_payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
2313
2314         let mut payment_event = {
2315                 nodes[0].node.send_payment(route, our_payment_hash).unwrap();
2316                 check_added_monitors!(nodes[0], 1);
2317
2318                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
2319                 assert_eq!(events.len(), 1);
2320                 SendEvent::from_event(events.remove(0))
2321         };
2322
2323         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
2324         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
2325
2326         expect_pending_htlcs_forwardable!(nodes[1]);
2327
2328         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
2329         assert_eq!(events_2.len(), 1);
2330         payment_event = SendEvent::from_event(events_2.remove(0));
2331         assert_eq!(payment_event.msgs.len(), 1);
2332
2333         check_added_monitors!(nodes[1], 1);
2334         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
2335         nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg).unwrap();
2336         check_added_monitors!(nodes[2], 1);
2337         let (_, _) = get_revoke_commit_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2338
2339         // nodes[2] now has the latest commitment transaction, but hasn't revoked its previous
2340         // state or updated nodes[1]' state. Now force-close and broadcast that commitment/HTLC
2341         // transaction and ensure nodes[1] doesn't fail-backwards (this was originally a bug!).
2342
2343         nodes[2].node.force_close_channel(&payment_event.commitment_msg.channel_id);
2344         check_closed_broadcast!(nodes[2]);
2345         let tx = {
2346                 let mut node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap();
2347                 // Note that we don't bother broadcasting the HTLC-Success transaction here as we don't
2348                 // have a use for it unless nodes[2] learns the preimage somehow, the funds will go
2349                 // back to nodes[1] upon timeout otherwise.
2350                 assert_eq!(node_txn.len(), 1);
2351                 node_txn.remove(0)
2352         };
2353
2354         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2355         nodes[1].chain_monitor.block_connected_checked(&header, 1, &[&tx], &[1]);
2356
2357         // Note no UpdateHTLCs event here from nodes[1] to nodes[0]!
2358         check_closed_broadcast!(nodes[1]);
2359
2360         // Now check that if we add the preimage to ChannelMonitor it broadcasts our HTLC-Success..
2361         {
2362                 let mut monitors = nodes[2].chan_monitor.simple_monitor.monitors.lock().unwrap();
2363                 monitors.get_mut(&OutPoint::new(Sha256dHash::from(&payment_event.commitment_msg.channel_id[..]), 0)).unwrap()
2364                         .provide_payment_preimage(&our_payment_hash, &our_payment_preimage);
2365         }
2366         nodes[2].chain_monitor.block_connected_checked(&header, 1, &[&tx], &[1]);
2367         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap();
2368         assert_eq!(node_txn.len(), 1);
2369         assert_eq!(node_txn[0].input.len(), 1);
2370         assert_eq!(node_txn[0].input[0].previous_output.txid, tx.txid());
2371         assert_eq!(node_txn[0].lock_time, 0); // Must be an HTLC-Success
2372         assert_eq!(node_txn[0].input[0].witness.len(), 5); // Must be an HTLC-Success
2373
2374         check_spends!(node_txn[0], tx);
2375 }
2376
2377 #[test]
2378 fn test_unconf_chan() {
2379         // After creating a chan between nodes, we disconnect all blocks previously seen to force a channel close on nodes[0] side
2380         let nodes = create_network(2);
2381         create_announced_chan_between_nodes(&nodes, 0, 1);
2382
2383         let channel_state = nodes[0].node.channel_state.lock().unwrap();
2384         assert_eq!(channel_state.by_id.len(), 1);
2385         assert_eq!(channel_state.short_to_id.len(), 1);
2386         mem::drop(channel_state);
2387
2388         let mut headers = Vec::new();
2389         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2390         headers.push(header.clone());
2391         for _i in 2..100 {
2392                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2393                 headers.push(header.clone());
2394         }
2395         while !headers.is_empty() {
2396                 nodes[0].node.block_disconnected(&headers.pop().unwrap());
2397         }
2398         check_closed_broadcast!(nodes[0]);
2399         let channel_state = nodes[0].node.channel_state.lock().unwrap();
2400         assert_eq!(channel_state.by_id.len(), 0);
2401         assert_eq!(channel_state.short_to_id.len(), 0);
2402 }
2403
2404 #[test]
2405 fn test_simple_peer_disconnect() {
2406         // Test that we can reconnect when there are no lost messages
2407         let nodes = create_network(3);
2408         create_announced_chan_between_nodes(&nodes, 0, 1);
2409         create_announced_chan_between_nodes(&nodes, 1, 2);
2410
2411         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2412         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2413         reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2414
2415         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
2416         let payment_hash_2 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
2417         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_hash_2);
2418         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_preimage_1);
2419
2420         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2421         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2422         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2423
2424         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
2425         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
2426         let payment_hash_5 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
2427         let payment_hash_6 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
2428
2429         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2430         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2431
2432         claim_payment_along_route(&nodes[0], &vec!(&nodes[1], &nodes[2]), true, payment_preimage_3);
2433         fail_payment_along_route(&nodes[0], &[&nodes[1], &nodes[2]], true, payment_hash_5);
2434
2435         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (1, 0), (1, 0), (false, false));
2436         {
2437                 let events = nodes[0].node.get_and_clear_pending_events();
2438                 assert_eq!(events.len(), 2);
2439                 match events[0] {
2440                         Event::PaymentSent { payment_preimage } => {
2441                                 assert_eq!(payment_preimage, payment_preimage_3);
2442                         },
2443                         _ => panic!("Unexpected event"),
2444                 }
2445                 match events[1] {
2446                         Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
2447                                 assert_eq!(payment_hash, payment_hash_5);
2448                                 assert!(rejected_by_dest);
2449                         },
2450                         _ => panic!("Unexpected event"),
2451                 }
2452         }
2453
2454         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_preimage_4);
2455         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_hash_6);
2456 }
2457
2458 fn do_test_drop_messages_peer_disconnect(messages_delivered: u8) {
2459         // Test that we can reconnect when in-flight HTLC updates get dropped
2460         let mut nodes = create_network(2);
2461         if messages_delivered == 0 {
2462                 create_chan_between_nodes_with_value_a(&nodes[0], &nodes[1], 100000, 10001);
2463                 // nodes[1] doesn't receive the funding_locked message (it'll be re-sent on reconnect)
2464         } else {
2465                 create_announced_chan_between_nodes(&nodes, 0, 1);
2466         }
2467
2468         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), Some(&nodes[0].node.list_usable_channels()), &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2469         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
2470
2471         let payment_event = {
2472                 nodes[0].node.send_payment(route.clone(), payment_hash_1).unwrap();
2473                 check_added_monitors!(nodes[0], 1);
2474
2475                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
2476                 assert_eq!(events.len(), 1);
2477                 SendEvent::from_event(events.remove(0))
2478         };
2479         assert_eq!(nodes[1].node.get_our_node_id(), payment_event.node_id);
2480
2481         if messages_delivered < 2 {
2482                 // Drop the payment_event messages, and let them get re-generated in reconnect_nodes!
2483         } else {
2484                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
2485                 if messages_delivered >= 3 {
2486                         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg).unwrap();
2487                         check_added_monitors!(nodes[1], 1);
2488                         let (bs_revoke_and_ack, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
2489
2490                         if messages_delivered >= 4 {
2491                                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
2492                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2493                                 check_added_monitors!(nodes[0], 1);
2494
2495                                 if messages_delivered >= 5 {
2496                                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment_signed).unwrap();
2497                                         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
2498                                         // No commitment_signed so get_event_msg's assert(len == 1) passes
2499                                         check_added_monitors!(nodes[0], 1);
2500
2501                                         if messages_delivered >= 6 {
2502                                                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack).unwrap();
2503                                                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2504                                                 check_added_monitors!(nodes[1], 1);
2505                                         }
2506                                 }
2507                         }
2508                 }
2509         }
2510
2511         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2512         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2513         if messages_delivered < 3 {
2514                 // Even if the funding_locked messages get exchanged, as long as nothing further was
2515                 // received on either side, both sides will need to resend them.
2516                 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 1), (0, 0), (0, 0), (0, 0), (false, false));
2517         } else if messages_delivered == 3 {
2518                 // nodes[0] still wants its RAA + commitment_signed
2519                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (-1, 0), (0, 0), (0, 0), (0, 0), (true, false));
2520         } else if messages_delivered == 4 {
2521                 // nodes[0] still wants its commitment_signed
2522                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (-1, 0), (0, 0), (0, 0), (0, 0), (false, false));
2523         } else if messages_delivered == 5 {
2524                 // nodes[1] still wants its final RAA
2525                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, true));
2526         } else if messages_delivered == 6 {
2527                 // Everything was delivered...
2528                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2529         }
2530
2531         let events_1 = nodes[1].node.get_and_clear_pending_events();
2532         assert_eq!(events_1.len(), 1);
2533         match events_1[0] {
2534                 Event::PendingHTLCsForwardable { .. } => { },
2535                 _ => panic!("Unexpected event"),
2536         };
2537
2538         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2539         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2540         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2541
2542         nodes[1].node.channel_state.lock().unwrap().next_forward = Instant::now();
2543         nodes[1].node.process_pending_htlc_forwards();
2544
2545         let events_2 = nodes[1].node.get_and_clear_pending_events();
2546         assert_eq!(events_2.len(), 1);
2547         match events_2[0] {
2548                 Event::PaymentReceived { ref payment_hash, amt } => {
2549                         assert_eq!(payment_hash_1, *payment_hash);
2550                         assert_eq!(amt, 1000000);
2551                 },
2552                 _ => panic!("Unexpected event"),
2553         }
2554
2555         nodes[1].node.claim_funds(payment_preimage_1);
2556         check_added_monitors!(nodes[1], 1);
2557
2558         let events_3 = nodes[1].node.get_and_clear_pending_msg_events();
2559         assert_eq!(events_3.len(), 1);
2560         let (update_fulfill_htlc, commitment_signed) = match events_3[0] {
2561                 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
2562                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
2563                         assert!(updates.update_add_htlcs.is_empty());
2564                         assert!(updates.update_fail_htlcs.is_empty());
2565                         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
2566                         assert!(updates.update_fail_malformed_htlcs.is_empty());
2567                         assert!(updates.update_fee.is_none());
2568                         (updates.update_fulfill_htlcs[0].clone(), updates.commitment_signed.clone())
2569                 },
2570                 _ => panic!("Unexpected event"),
2571         };
2572
2573         if messages_delivered >= 1 {
2574                 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlc).unwrap();
2575
2576                 let events_4 = nodes[0].node.get_and_clear_pending_events();
2577                 assert_eq!(events_4.len(), 1);
2578                 match events_4[0] {
2579                         Event::PaymentSent { ref payment_preimage } => {
2580                                 assert_eq!(payment_preimage_1, *payment_preimage);
2581                         },
2582                         _ => panic!("Unexpected event"),
2583                 }
2584
2585                 if messages_delivered >= 2 {
2586                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed).unwrap();
2587                         check_added_monitors!(nodes[0], 1);
2588                         let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
2589
2590                         if messages_delivered >= 3 {
2591                                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack).unwrap();
2592                                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2593                                 check_added_monitors!(nodes[1], 1);
2594
2595                                 if messages_delivered >= 4 {
2596                                         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_signed).unwrap();
2597                                         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
2598                                         // No commitment_signed so get_event_msg's assert(len == 1) passes
2599                                         check_added_monitors!(nodes[1], 1);
2600
2601                                         if messages_delivered >= 5 {
2602                                                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
2603                                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2604                                                 check_added_monitors!(nodes[0], 1);
2605                                         }
2606                                 }
2607                         }
2608                 }
2609         }
2610
2611         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2612         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2613         if messages_delivered < 2 {
2614                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (1, 0), (0, 0), (0, 0), (false, false));
2615                 //TODO: Deduplicate PaymentSent events, then enable this if:
2616                 //if messages_delivered < 1 {
2617                         let events_4 = nodes[0].node.get_and_clear_pending_events();
2618                         assert_eq!(events_4.len(), 1);
2619                         match events_4[0] {
2620                                 Event::PaymentSent { ref payment_preimage } => {
2621                                         assert_eq!(payment_preimage_1, *payment_preimage);
2622                                 },
2623                                 _ => panic!("Unexpected event"),
2624                         }
2625                 //}
2626         } else if messages_delivered == 2 {
2627                 // nodes[0] still wants its RAA + commitment_signed
2628                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, -1), (0, 0), (0, 0), (0, 0), (false, true));
2629         } else if messages_delivered == 3 {
2630                 // nodes[0] still wants its commitment_signed
2631                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, -1), (0, 0), (0, 0), (0, 0), (false, false));
2632         } else if messages_delivered == 4 {
2633                 // nodes[1] still wants its final RAA
2634                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (true, false));
2635         } else if messages_delivered == 5 {
2636                 // Everything was delivered...
2637                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2638         }
2639
2640         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2641         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2642         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2643
2644         // Channel should still work fine...
2645         let payment_preimage_2 = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000).0;
2646         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
2647 }
2648
2649 #[test]
2650 fn test_drop_messages_peer_disconnect_a() {
2651         do_test_drop_messages_peer_disconnect(0);
2652         do_test_drop_messages_peer_disconnect(1);
2653         do_test_drop_messages_peer_disconnect(2);
2654         do_test_drop_messages_peer_disconnect(3);
2655 }
2656
2657 #[test]
2658 fn test_drop_messages_peer_disconnect_b() {
2659         do_test_drop_messages_peer_disconnect(4);
2660         do_test_drop_messages_peer_disconnect(5);
2661         do_test_drop_messages_peer_disconnect(6);
2662 }
2663
2664 #[test]
2665 fn test_funding_peer_disconnect() {
2666         // Test that we can lock in our funding tx while disconnected
2667         let nodes = create_network(2);
2668         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001);
2669
2670         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2671         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2672
2673         confirm_transaction(&nodes[0].chain_monitor, &tx, tx.version);
2674         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
2675         assert_eq!(events_1.len(), 1);
2676         match events_1[0] {
2677                 MessageSendEvent::SendFundingLocked { ref node_id, msg: _ } => {
2678                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
2679                 },
2680                 _ => panic!("Unexpected event"),
2681         }
2682
2683         reconnect_nodes(&nodes[0], &nodes[1], (false, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2684
2685         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2686         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2687
2688         confirm_transaction(&nodes[1].chain_monitor, &tx, tx.version);
2689         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
2690         assert_eq!(events_2.len(), 2);
2691         match events_2[0] {
2692                 MessageSendEvent::SendFundingLocked { ref node_id, msg: _ } => {
2693                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
2694                 },
2695                 _ => panic!("Unexpected event"),
2696         }
2697         match events_2[1] {
2698                 MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ } => {
2699                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
2700                 },
2701                 _ => panic!("Unexpected event"),
2702         }
2703
2704         reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2705
2706         // TODO: We shouldn't need to manually pass list_usable_chanels here once we support
2707         // rebroadcasting announcement_signatures upon reconnect.
2708
2709         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), Some(&nodes[0].node.list_usable_channels()), &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2710         let (payment_preimage, _) = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000);
2711         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage);
2712 }
2713
2714 #[test]
2715 fn test_drop_messages_peer_disconnect_dual_htlc() {
2716         // Test that we can handle reconnecting when both sides of a channel have pending
2717         // commitment_updates when we disconnect.
2718         let mut nodes = create_network(2);
2719         create_announced_chan_between_nodes(&nodes, 0, 1);
2720
2721         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
2722
2723         // Now try to send a second payment which will fail to send
2724         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2725         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
2726
2727         nodes[0].node.send_payment(route.clone(), payment_hash_2).unwrap();
2728         check_added_monitors!(nodes[0], 1);
2729
2730         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
2731         assert_eq!(events_1.len(), 1);
2732         match events_1[0] {
2733                 MessageSendEvent::UpdateHTLCs { .. } => {},
2734                 _ => panic!("Unexpected event"),
2735         }
2736
2737         assert!(nodes[1].node.claim_funds(payment_preimage_1));
2738         check_added_monitors!(nodes[1], 1);
2739
2740         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
2741         assert_eq!(events_2.len(), 1);
2742         match events_2[0] {
2743                 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 } } => {
2744                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
2745                         assert!(update_add_htlcs.is_empty());
2746                         assert_eq!(update_fulfill_htlcs.len(), 1);
2747                         assert!(update_fail_htlcs.is_empty());
2748                         assert!(update_fail_malformed_htlcs.is_empty());
2749                         assert!(update_fee.is_none());
2750
2751                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]).unwrap();
2752                         let events_3 = nodes[0].node.get_and_clear_pending_events();
2753                         assert_eq!(events_3.len(), 1);
2754                         match events_3[0] {
2755                                 Event::PaymentSent { ref payment_preimage } => {
2756                                         assert_eq!(*payment_preimage, payment_preimage_1);
2757                                 },
2758                                 _ => panic!("Unexpected event"),
2759                         }
2760
2761                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed).unwrap();
2762                         let _ = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
2763                         // No commitment_signed so get_event_msg's assert(len == 1) passes
2764                         check_added_monitors!(nodes[0], 1);
2765                 },
2766                 _ => panic!("Unexpected event"),
2767         }
2768
2769         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2770         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2771
2772         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
2773         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
2774         assert_eq!(reestablish_1.len(), 1);
2775         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
2776         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
2777         assert_eq!(reestablish_2.len(), 1);
2778
2779         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
2780         let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
2781         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
2782         let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
2783
2784         assert!(as_resp.0.is_none());
2785         assert!(bs_resp.0.is_none());
2786
2787         assert!(bs_resp.1.is_none());
2788         assert!(bs_resp.2.is_none());
2789
2790         assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
2791
2792         assert_eq!(as_resp.2.as_ref().unwrap().update_add_htlcs.len(), 1);
2793         assert!(as_resp.2.as_ref().unwrap().update_fulfill_htlcs.is_empty());
2794         assert!(as_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
2795         assert!(as_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
2796         assert!(as_resp.2.as_ref().unwrap().update_fee.is_none());
2797         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &as_resp.2.as_ref().unwrap().update_add_htlcs[0]).unwrap();
2798         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_resp.2.as_ref().unwrap().commitment_signed).unwrap();
2799         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
2800         // No commitment_signed so get_event_msg's assert(len == 1) passes
2801         check_added_monitors!(nodes[1], 1);
2802
2803         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), as_resp.1.as_ref().unwrap()).unwrap();
2804         let bs_second_commitment_signed = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
2805         assert!(bs_second_commitment_signed.update_add_htlcs.is_empty());
2806         assert!(bs_second_commitment_signed.update_fulfill_htlcs.is_empty());
2807         assert!(bs_second_commitment_signed.update_fail_htlcs.is_empty());
2808         assert!(bs_second_commitment_signed.update_fail_malformed_htlcs.is_empty());
2809         assert!(bs_second_commitment_signed.update_fee.is_none());
2810         check_added_monitors!(nodes[1], 1);
2811
2812         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
2813         let as_commitment_signed = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
2814         assert!(as_commitment_signed.update_add_htlcs.is_empty());
2815         assert!(as_commitment_signed.update_fulfill_htlcs.is_empty());
2816         assert!(as_commitment_signed.update_fail_htlcs.is_empty());
2817         assert!(as_commitment_signed.update_fail_malformed_htlcs.is_empty());
2818         assert!(as_commitment_signed.update_fee.is_none());
2819         check_added_monitors!(nodes[0], 1);
2820
2821         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_signed.commitment_signed).unwrap();
2822         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
2823         // No commitment_signed so get_event_msg's assert(len == 1) passes
2824         check_added_monitors!(nodes[0], 1);
2825
2826         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_signed.commitment_signed).unwrap();
2827         let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
2828         // No commitment_signed so get_event_msg's assert(len == 1) passes
2829         check_added_monitors!(nodes[1], 1);
2830
2831         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack).unwrap();
2832         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2833         check_added_monitors!(nodes[1], 1);
2834
2835         expect_pending_htlcs_forwardable!(nodes[1]);
2836
2837         let events_5 = nodes[1].node.get_and_clear_pending_events();
2838         assert_eq!(events_5.len(), 1);
2839         match events_5[0] {
2840                 Event::PaymentReceived { ref payment_hash, amt: _ } => {
2841                         assert_eq!(payment_hash_2, *payment_hash);
2842                 },
2843                 _ => panic!("Unexpected event"),
2844         }
2845
2846         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack).unwrap();
2847         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2848         check_added_monitors!(nodes[0], 1);
2849
2850         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
2851 }
2852
2853 #[test]
2854 fn test_simple_monitor_permanent_update_fail() {
2855         // Test that we handle a simple permanent monitor update failure
2856         let mut nodes = create_network(2);
2857         create_announced_chan_between_nodes(&nodes, 0, 1);
2858
2859         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2860         let (_, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
2861
2862         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::PermanentFailure);
2863         if let Err(APIError::ChannelUnavailable {..}) = nodes[0].node.send_payment(route, payment_hash_1) {} else { panic!(); }
2864         check_added_monitors!(nodes[0], 1);
2865
2866         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
2867         assert_eq!(events_1.len(), 2);
2868         match events_1[0] {
2869                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
2870                 _ => panic!("Unexpected event"),
2871         };
2872         match events_1[1] {
2873                 MessageSendEvent::HandleError { node_id, .. } => assert_eq!(node_id, nodes[1].node.get_our_node_id()),
2874                 _ => panic!("Unexpected event"),
2875         };
2876
2877         // TODO: Once we hit the chain with the failure transaction we should check that we get a
2878         // PaymentFailed event
2879
2880         assert_eq!(nodes[0].node.list_channels().len(), 0);
2881 }
2882
2883 fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
2884         // Test that we can recover from a simple temporary monitor update failure optionally with
2885         // a disconnect in between
2886         let mut nodes = create_network(2);
2887         create_announced_chan_between_nodes(&nodes, 0, 1);
2888
2889         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2890         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
2891
2892         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
2893         if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route.clone(), payment_hash_1) {} else { panic!(); }
2894         check_added_monitors!(nodes[0], 1);
2895
2896         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
2897         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2898         assert_eq!(nodes[0].node.list_channels().len(), 1);
2899
2900         if disconnect {
2901                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2902                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2903                 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2904         }
2905
2906         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
2907         nodes[0].node.test_restore_channel_monitor();
2908         check_added_monitors!(nodes[0], 1);
2909
2910         let mut events_2 = nodes[0].node.get_and_clear_pending_msg_events();
2911         assert_eq!(events_2.len(), 1);
2912         let payment_event = SendEvent::from_event(events_2.pop().unwrap());
2913         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
2914         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
2915         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
2916
2917         expect_pending_htlcs_forwardable!(nodes[1]);
2918
2919         let events_3 = nodes[1].node.get_and_clear_pending_events();
2920         assert_eq!(events_3.len(), 1);
2921         match events_3[0] {
2922                 Event::PaymentReceived { ref payment_hash, amt } => {
2923                         assert_eq!(payment_hash_1, *payment_hash);
2924                         assert_eq!(amt, 1000000);
2925                 },
2926                 _ => panic!("Unexpected event"),
2927         }
2928
2929         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
2930
2931         // Now set it to failed again...
2932         let (_, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
2933         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
2934         if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route, payment_hash_2) {} else { panic!(); }
2935         check_added_monitors!(nodes[0], 1);
2936
2937         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
2938         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2939         assert_eq!(nodes[0].node.list_channels().len(), 1);
2940
2941         if disconnect {
2942                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2943                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2944                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
2945         }
2946
2947         // ...and make sure we can force-close a TemporaryFailure channel with a PermanentFailure
2948         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::PermanentFailure);
2949         nodes[0].node.test_restore_channel_monitor();
2950         check_added_monitors!(nodes[0], 1);
2951         check_closed_broadcast!(nodes[0]);
2952
2953         // TODO: Once we hit the chain with the failure transaction we should check that we get a
2954         // PaymentFailed event
2955
2956         assert_eq!(nodes[0].node.list_channels().len(), 0);
2957 }
2958
2959 #[test]
2960 fn test_simple_monitor_temporary_update_fail() {
2961         do_test_simple_monitor_temporary_update_fail(false);
2962         do_test_simple_monitor_temporary_update_fail(true);
2963 }
2964
2965 fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
2966         let disconnect_flags = 8 | 16;
2967
2968         // Test that we can recover from a temporary monitor update failure with some in-flight
2969         // HTLCs going on at the same time potentially with some disconnection thrown in.
2970         // * First we route a payment, then get a temporary monitor update failure when trying to
2971         //   route a second payment. We then claim the first payment.
2972         // * If disconnect_count is set, we will disconnect at this point (which is likely as
2973         //   TemporaryFailure likely indicates net disconnect which resulted in failing to update
2974         //   the ChannelMonitor on a watchtower).
2975         // * If !(disconnect_count & 16) we deliver a update_fulfill_htlc/CS for the first payment
2976         //   immediately, otherwise we wait sconnect and deliver them via the reconnect
2977         //   channel_reestablish processing (ie disconnect_count & 16 makes no sense if
2978         //   disconnect_count & !disconnect_flags is 0).
2979         // * We then update the channel monitor, reconnecting if disconnect_count is set and walk
2980         //   through message sending, potentially disconnect/reconnecting multiple times based on
2981         //   disconnect_count, to get the update_fulfill_htlc through.
2982         // * We then walk through more message exchanges to get the original update_add_htlc
2983         //   through, swapping message ordering based on disconnect_count & 8 and optionally
2984         //   disconnect/reconnecting based on disconnect_count.
2985         let mut nodes = create_network(2);
2986         create_announced_chan_between_nodes(&nodes, 0, 1);
2987
2988         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
2989
2990         // Now try to send a second payment which will fail to send
2991         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2992         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
2993
2994         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
2995         if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route.clone(), payment_hash_2) {} else { panic!(); }
2996         check_added_monitors!(nodes[0], 1);
2997
2998         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
2999         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3000         assert_eq!(nodes[0].node.list_channels().len(), 1);
3001
3002         // Claim the previous payment, which will result in a update_fulfill_htlc/CS from nodes[1]
3003         // but nodes[0] won't respond since it is frozen.
3004         assert!(nodes[1].node.claim_funds(payment_preimage_1));
3005         check_added_monitors!(nodes[1], 1);
3006         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
3007         assert_eq!(events_2.len(), 1);
3008         let (bs_initial_fulfill, bs_initial_commitment_signed) = match events_2[0] {
3009                 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 } } => {
3010                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3011                         assert!(update_add_htlcs.is_empty());
3012                         assert_eq!(update_fulfill_htlcs.len(), 1);
3013                         assert!(update_fail_htlcs.is_empty());
3014                         assert!(update_fail_malformed_htlcs.is_empty());
3015                         assert!(update_fee.is_none());
3016
3017                         if (disconnect_count & 16) == 0 {
3018                                 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]).unwrap();
3019                                 let events_3 = nodes[0].node.get_and_clear_pending_events();
3020                                 assert_eq!(events_3.len(), 1);
3021                                 match events_3[0] {
3022                                         Event::PaymentSent { ref payment_preimage } => {
3023                                                 assert_eq!(*payment_preimage, payment_preimage_1);
3024                                         },
3025                                         _ => panic!("Unexpected event"),
3026                                 }
3027
3028                                 if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::IgnoreError) }) = nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed) {
3029                                         assert_eq!(err, "Previous monitor update failure prevented generation of RAA");
3030                                 } else { panic!(); }
3031                         }
3032
3033                         (update_fulfill_htlcs[0].clone(), commitment_signed.clone())
3034                 },
3035                 _ => panic!("Unexpected event"),
3036         };
3037
3038         if disconnect_count & !disconnect_flags > 0 {
3039                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3040                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3041         }
3042
3043         // Now fix monitor updating...
3044         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
3045         nodes[0].node.test_restore_channel_monitor();
3046         check_added_monitors!(nodes[0], 1);
3047
3048         macro_rules! disconnect_reconnect_peers { () => { {
3049                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3050                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3051
3052                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3053                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3054                 assert_eq!(reestablish_1.len(), 1);
3055                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3056                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
3057                 assert_eq!(reestablish_2.len(), 1);
3058
3059                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
3060                 let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
3061                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
3062                 let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
3063
3064                 assert!(as_resp.0.is_none());
3065                 assert!(bs_resp.0.is_none());
3066
3067                 (reestablish_1, reestablish_2, as_resp, bs_resp)
3068         } } }
3069
3070         let (payment_event, initial_revoke_and_ack) = if disconnect_count & !disconnect_flags > 0 {
3071                 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
3072                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3073
3074                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3075                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3076                 assert_eq!(reestablish_1.len(), 1);
3077                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3078                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
3079                 assert_eq!(reestablish_2.len(), 1);
3080
3081                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
3082                 check_added_monitors!(nodes[0], 0);
3083                 let mut as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
3084                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
3085                 check_added_monitors!(nodes[1], 0);
3086                 let mut bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
3087
3088                 assert!(as_resp.0.is_none());
3089                 assert!(bs_resp.0.is_none());
3090
3091                 assert!(bs_resp.1.is_none());
3092                 if (disconnect_count & 16) == 0 {
3093                         assert!(bs_resp.2.is_none());
3094
3095                         assert!(as_resp.1.is_some());
3096                         assert!(as_resp.2.is_some());
3097                         assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
3098                 } else {
3099                         assert!(bs_resp.2.as_ref().unwrap().update_add_htlcs.is_empty());
3100                         assert!(bs_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
3101                         assert!(bs_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
3102                         assert!(bs_resp.2.as_ref().unwrap().update_fee.is_none());
3103                         assert!(bs_resp.2.as_ref().unwrap().update_fulfill_htlcs == vec![bs_initial_fulfill]);
3104                         assert!(bs_resp.2.as_ref().unwrap().commitment_signed == bs_initial_commitment_signed);
3105
3106                         assert!(as_resp.1.is_none());
3107
3108                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().update_fulfill_htlcs[0]).unwrap();
3109                         let events_3 = nodes[0].node.get_and_clear_pending_events();
3110                         assert_eq!(events_3.len(), 1);
3111                         match events_3[0] {
3112                                 Event::PaymentSent { ref payment_preimage } => {
3113                                         assert_eq!(*payment_preimage, payment_preimage_1);
3114                                 },
3115                                 _ => panic!("Unexpected event"),
3116                         }
3117
3118                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().commitment_signed).unwrap();
3119                         let as_resp_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3120                         // No commitment_signed so get_event_msg's assert(len == 1) passes
3121                         check_added_monitors!(nodes[0], 1);
3122
3123                         as_resp.1 = Some(as_resp_raa);
3124                         bs_resp.2 = None;
3125                 }
3126
3127                 if disconnect_count & !disconnect_flags > 1 {
3128                         let (second_reestablish_1, second_reestablish_2, second_as_resp, second_bs_resp) = disconnect_reconnect_peers!();
3129
3130                         if (disconnect_count & 16) == 0 {
3131                                 assert!(reestablish_1 == second_reestablish_1);
3132                                 assert!(reestablish_2 == second_reestablish_2);
3133                         }
3134                         assert!(as_resp == second_as_resp);
3135                         assert!(bs_resp == second_bs_resp);
3136                 }
3137
3138                 (SendEvent::from_commitment_update(nodes[1].node.get_our_node_id(), as_resp.2.unwrap()), as_resp.1.unwrap())
3139         } else {
3140                 let mut events_4 = nodes[0].node.get_and_clear_pending_msg_events();
3141                 assert_eq!(events_4.len(), 2);
3142                 (SendEvent::from_event(events_4.remove(0)), match events_4[0] {
3143                         MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
3144                                 assert_eq!(*node_id, nodes[1].node.get_our_node_id());
3145                                 msg.clone()
3146                         },
3147                         _ => panic!("Unexpected event"),
3148                 })
3149         };
3150
3151         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
3152
3153         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
3154         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg).unwrap();
3155         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3156         // nodes[1] is awaiting an RAA from nodes[0] still so get_event_msg's assert(len == 1) passes
3157         check_added_monitors!(nodes[1], 1);
3158
3159         if disconnect_count & !disconnect_flags > 2 {
3160                 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
3161
3162                 assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
3163                 assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
3164
3165                 assert!(as_resp.2.is_none());
3166                 assert!(bs_resp.2.is_none());
3167         }
3168
3169         let as_commitment_update;
3170         let bs_second_commitment_update;
3171
3172         macro_rules! handle_bs_raa { () => {
3173                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
3174                 as_commitment_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
3175                 assert!(as_commitment_update.update_add_htlcs.is_empty());
3176                 assert!(as_commitment_update.update_fulfill_htlcs.is_empty());
3177                 assert!(as_commitment_update.update_fail_htlcs.is_empty());
3178                 assert!(as_commitment_update.update_fail_malformed_htlcs.is_empty());
3179                 assert!(as_commitment_update.update_fee.is_none());
3180                 check_added_monitors!(nodes[0], 1);
3181         } }
3182
3183         macro_rules! handle_initial_raa { () => {
3184                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &initial_revoke_and_ack).unwrap();
3185                 bs_second_commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
3186                 assert!(bs_second_commitment_update.update_add_htlcs.is_empty());
3187                 assert!(bs_second_commitment_update.update_fulfill_htlcs.is_empty());
3188                 assert!(bs_second_commitment_update.update_fail_htlcs.is_empty());
3189                 assert!(bs_second_commitment_update.update_fail_malformed_htlcs.is_empty());
3190                 assert!(bs_second_commitment_update.update_fee.is_none());
3191                 check_added_monitors!(nodes[1], 1);
3192         } }
3193
3194         if (disconnect_count & 8) == 0 {
3195                 handle_bs_raa!();
3196
3197                 if disconnect_count & !disconnect_flags > 3 {
3198                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
3199
3200                         assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
3201                         assert!(bs_resp.1.is_none());
3202
3203                         assert!(as_resp.2.unwrap() == as_commitment_update);
3204                         assert!(bs_resp.2.is_none());
3205
3206                         assert!(as_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
3207                 }
3208
3209                 handle_initial_raa!();
3210
3211                 if disconnect_count & !disconnect_flags > 4 {
3212                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
3213
3214                         assert!(as_resp.1.is_none());
3215                         assert!(bs_resp.1.is_none());
3216
3217                         assert!(as_resp.2.unwrap() == as_commitment_update);
3218                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
3219                 }
3220         } else {
3221                 handle_initial_raa!();
3222
3223                 if disconnect_count & !disconnect_flags > 3 {
3224                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
3225
3226                         assert!(as_resp.1.is_none());
3227                         assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
3228
3229                         assert!(as_resp.2.is_none());
3230                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
3231
3232                         assert!(bs_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
3233                 }
3234
3235                 handle_bs_raa!();
3236
3237                 if disconnect_count & !disconnect_flags > 4 {
3238                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
3239
3240                         assert!(as_resp.1.is_none());
3241                         assert!(bs_resp.1.is_none());
3242
3243                         assert!(as_resp.2.unwrap() == as_commitment_update);
3244                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
3245                 }
3246         }
3247
3248         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_update.commitment_signed).unwrap();
3249         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3250         // No commitment_signed so get_event_msg's assert(len == 1) passes
3251         check_added_monitors!(nodes[0], 1);
3252
3253         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_update.commitment_signed).unwrap();
3254         let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3255         // No commitment_signed so get_event_msg's assert(len == 1) passes
3256         check_added_monitors!(nodes[1], 1);
3257
3258         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack).unwrap();
3259         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3260         check_added_monitors!(nodes[1], 1);
3261
3262         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack).unwrap();
3263         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3264         check_added_monitors!(nodes[0], 1);
3265
3266         expect_pending_htlcs_forwardable!(nodes[1]);
3267
3268         let events_5 = nodes[1].node.get_and_clear_pending_events();
3269         assert_eq!(events_5.len(), 1);
3270         match events_5[0] {
3271                 Event::PaymentReceived { ref payment_hash, amt } => {
3272                         assert_eq!(payment_hash_2, *payment_hash);
3273                         assert_eq!(amt, 1000000);
3274                 },
3275                 _ => panic!("Unexpected event"),
3276         }
3277
3278         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);
3279 }
3280
3281 #[test]
3282 fn test_monitor_temporary_update_fail_a() {
3283         do_test_monitor_temporary_update_fail(0);
3284         do_test_monitor_temporary_update_fail(1);
3285         do_test_monitor_temporary_update_fail(2);
3286         do_test_monitor_temporary_update_fail(3);
3287         do_test_monitor_temporary_update_fail(4);
3288         do_test_monitor_temporary_update_fail(5);
3289 }
3290
3291 #[test]
3292 fn test_monitor_temporary_update_fail_b() {
3293         do_test_monitor_temporary_update_fail(2 | 8);
3294         do_test_monitor_temporary_update_fail(3 | 8);
3295         do_test_monitor_temporary_update_fail(4 | 8);
3296         do_test_monitor_temporary_update_fail(5 | 8);
3297 }
3298
3299 #[test]
3300 fn test_monitor_temporary_update_fail_c() {
3301         do_test_monitor_temporary_update_fail(1 | 16);
3302         do_test_monitor_temporary_update_fail(2 | 16);
3303         do_test_monitor_temporary_update_fail(3 | 16);
3304         do_test_monitor_temporary_update_fail(2 | 8 | 16);
3305         do_test_monitor_temporary_update_fail(3 | 8 | 16);
3306 }
3307
3308 #[test]
3309 fn test_monitor_update_fail_cs() {
3310         // Tests handling of a monitor update failure when processing an incoming commitment_signed
3311         let mut nodes = create_network(2);
3312         create_announced_chan_between_nodes(&nodes, 0, 1);
3313
3314         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3315         let (payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
3316         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
3317         check_added_monitors!(nodes[0], 1);
3318
3319         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
3320         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3321
3322         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3323         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event.commitment_msg).unwrap_err() {
3324                 assert_eq!(err, "Failed to update ChannelMonitor");
3325         } else { panic!(); }
3326         check_added_monitors!(nodes[1], 1);
3327         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3328
3329         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
3330         nodes[1].node.test_restore_channel_monitor();
3331         check_added_monitors!(nodes[1], 1);
3332         let responses = nodes[1].node.get_and_clear_pending_msg_events();
3333         assert_eq!(responses.len(), 2);
3334
3335         match responses[0] {
3336                 MessageSendEvent::SendRevokeAndACK { ref msg, ref node_id } => {
3337                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3338                         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &msg).unwrap();
3339                         check_added_monitors!(nodes[0], 1);
3340                 },
3341                 _ => panic!("Unexpected event"),
3342         }
3343         match responses[1] {
3344                 MessageSendEvent::UpdateHTLCs { ref updates, ref node_id } => {
3345                         assert!(updates.update_add_htlcs.is_empty());
3346                         assert!(updates.update_fulfill_htlcs.is_empty());
3347                         assert!(updates.update_fail_htlcs.is_empty());
3348                         assert!(updates.update_fail_malformed_htlcs.is_empty());
3349                         assert!(updates.update_fee.is_none());
3350                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3351
3352                         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3353                         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed).unwrap_err() {
3354                                 assert_eq!(err, "Failed to update ChannelMonitor");
3355                         } else { panic!(); }
3356                         check_added_monitors!(nodes[0], 1);
3357                         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3358                 },
3359                 _ => panic!("Unexpected event"),
3360         }
3361
3362         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
3363         nodes[0].node.test_restore_channel_monitor();
3364         check_added_monitors!(nodes[0], 1);
3365
3366         let final_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3367         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &final_raa).unwrap();
3368         check_added_monitors!(nodes[1], 1);
3369
3370         expect_pending_htlcs_forwardable!(nodes[1]);
3371
3372         let events = nodes[1].node.get_and_clear_pending_events();
3373         assert_eq!(events.len(), 1);
3374         match events[0] {
3375                 Event::PaymentReceived { payment_hash, amt } => {
3376                         assert_eq!(payment_hash, our_payment_hash);
3377                         assert_eq!(amt, 1000000);
3378                 },
3379                 _ => panic!("Unexpected event"),
3380         };
3381
3382         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage);
3383 }
3384
3385 #[test]
3386 fn test_monitor_update_fail_no_rebroadcast() {
3387         // Tests handling of a monitor update failure when no message rebroadcasting on
3388         // test_restore_channel_monitor() is required. Backported from
3389         // chanmon_fail_consistency fuzz tests.
3390         let mut nodes = create_network(2);
3391         create_announced_chan_between_nodes(&nodes, 0, 1);
3392
3393         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3394         let (payment_preimage_1, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
3395         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
3396         check_added_monitors!(nodes[0], 1);
3397
3398         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
3399         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3400         let bs_raa = commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true, false, true);
3401
3402         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3403         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_raa).unwrap_err() {
3404                 assert_eq!(err, "Failed to update ChannelMonitor");
3405         } else { panic!(); }
3406         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3407         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
3408         check_added_monitors!(nodes[1], 1);
3409
3410         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
3411         nodes[1].node.test_restore_channel_monitor();
3412         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3413         check_added_monitors!(nodes[1], 1);
3414         expect_pending_htlcs_forwardable!(nodes[1]);
3415
3416         let events = nodes[1].node.get_and_clear_pending_events();
3417         assert_eq!(events.len(), 1);
3418         match events[0] {
3419                 Event::PaymentReceived { payment_hash, .. } => {
3420                         assert_eq!(payment_hash, our_payment_hash);
3421                 },
3422                 _ => panic!("Unexpected event"),
3423         }
3424
3425         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
3426 }
3427
3428 #[test]
3429 fn test_monitor_update_raa_while_paused() {
3430         // Tests handling of an RAA while monitor updating has already been marked failed.
3431         // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
3432         let mut nodes = create_network(2);
3433         create_announced_chan_between_nodes(&nodes, 0, 1);
3434
3435         send_payment(&nodes[0], &[&nodes[1]], 5000000);
3436
3437         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3438         let (payment_preimage_1, our_payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
3439         nodes[0].node.send_payment(route, our_payment_hash_1).unwrap();
3440         check_added_monitors!(nodes[0], 1);
3441         let send_event_1 = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
3442
3443         let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3444         let (payment_preimage_2, our_payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
3445         nodes[1].node.send_payment(route, our_payment_hash_2).unwrap();
3446         check_added_monitors!(nodes[1], 1);
3447         let send_event_2 = SendEvent::from_event(nodes[1].node.get_and_clear_pending_msg_events().remove(0));
3448
3449         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event_1.msgs[0]).unwrap();
3450         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event_1.commitment_msg).unwrap();
3451         check_added_monitors!(nodes[1], 1);
3452         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3453
3454         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3455         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_2.msgs[0]).unwrap();
3456         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_2.commitment_msg).unwrap_err() {
3457                 assert_eq!(err, "Failed to update ChannelMonitor");
3458         } else { panic!(); }
3459         check_added_monitors!(nodes[0], 1);
3460
3461         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa).unwrap_err() {
3462                 assert_eq!(err, "Previous monitor update failure prevented responses to RAA");
3463         } else { panic!(); }
3464         check_added_monitors!(nodes[0], 1);
3465
3466         *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
3467         nodes[0].node.test_restore_channel_monitor();
3468         check_added_monitors!(nodes[0], 1);
3469
3470         let as_update_raa = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
3471         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_update_raa.0).unwrap();
3472         check_added_monitors!(nodes[1], 1);
3473         let bs_cs = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
3474
3475         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update_raa.1).unwrap();
3476         check_added_monitors!(nodes[1], 1);
3477         let bs_second_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3478
3479         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs.commitment_signed).unwrap();
3480         check_added_monitors!(nodes[0], 1);
3481         let as_second_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3482
3483         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_raa).unwrap();
3484         check_added_monitors!(nodes[0], 1);
3485         expect_pending_htlcs_forwardable!(nodes[0]);
3486         expect_payment_received!(nodes[0], our_payment_hash_2, 1000000);
3487
3488         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_raa).unwrap();
3489         check_added_monitors!(nodes[1], 1);
3490         expect_pending_htlcs_forwardable!(nodes[1]);
3491         expect_payment_received!(nodes[1], our_payment_hash_1, 1000000);
3492
3493         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1);
3494         claim_payment(&nodes[1], &[&nodes[0]], payment_preimage_2);
3495 }
3496
3497 fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
3498         // Tests handling of a monitor update failure when processing an incoming RAA
3499         let mut nodes = create_network(3);
3500         create_announced_chan_between_nodes(&nodes, 0, 1);
3501         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
3502
3503         // Rebalance a bit so that we can send backwards from 2 to 1.
3504         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000);
3505
3506         // Route a first payment that we'll fail backwards
3507         let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
3508
3509         // Fail the payment backwards, failing the monitor update on nodes[1]'s receipt of the RAA
3510         assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1, 0));
3511         expect_pending_htlcs_forwardable!(nodes[2]);
3512         check_added_monitors!(nodes[2], 1);
3513
3514         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
3515         assert!(updates.update_add_htlcs.is_empty());
3516         assert!(updates.update_fulfill_htlcs.is_empty());
3517         assert_eq!(updates.update_fail_htlcs.len(), 1);
3518         assert!(updates.update_fail_malformed_htlcs.is_empty());
3519         assert!(updates.update_fee.is_none());
3520         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
3521
3522         let bs_revoke_and_ack = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
3523         check_added_monitors!(nodes[0], 0);
3524
3525         // While the second channel is AwaitingRAA, forward a second payment to get it into the
3526         // holding cell.
3527         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
3528         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3529         nodes[0].node.send_payment(route, payment_hash_2).unwrap();
3530         check_added_monitors!(nodes[0], 1);
3531
3532         let mut send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
3533         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3534         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false);
3535
3536         expect_pending_htlcs_forwardable!(nodes[1]);
3537         check_added_monitors!(nodes[1], 0);
3538         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3539
3540         // Now fail monitor updating.
3541         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3542         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack).unwrap_err() {
3543                 assert_eq!(err, "Failed to update ChannelMonitor");
3544         } else { panic!(); }
3545         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
3546         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3547         check_added_monitors!(nodes[1], 1);
3548
3549         // Attempt to forward a third payment but fail due to the second channel being unavailable
3550         // for forwarding.
3551
3552         let (_, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
3553         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3554         nodes[0].node.send_payment(route, payment_hash_3).unwrap();
3555         check_added_monitors!(nodes[0], 1);
3556
3557         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(()); // We succeed in updating the monitor for the first channel
3558         send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
3559         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3560         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true);
3561         check_added_monitors!(nodes[1], 0);
3562
3563         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
3564         assert_eq!(events_2.len(), 1);
3565         match events_2.remove(0) {
3566                 MessageSendEvent::UpdateHTLCs { node_id, updates } => {
3567                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
3568                         assert!(updates.update_fulfill_htlcs.is_empty());
3569                         assert_eq!(updates.update_fail_htlcs.len(), 1);
3570                         assert!(updates.update_fail_malformed_htlcs.is_empty());
3571                         assert!(updates.update_add_htlcs.is_empty());
3572                         assert!(updates.update_fee.is_none());
3573
3574                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
3575                         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true);
3576
3577                         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
3578                         assert_eq!(msg_events.len(), 1);
3579                         match msg_events[0] {
3580                                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
3581                                         assert_eq!(msg.contents.short_channel_id, chan_2.0.contents.short_channel_id);
3582                                         assert_eq!(msg.contents.flags & 2, 2); // temp disabled
3583                                 },
3584                                 _ => panic!("Unexpected event"),
3585                         }
3586
3587                         let events = nodes[0].node.get_and_clear_pending_events();
3588                         assert_eq!(events.len(), 1);
3589                         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
3590                                 assert_eq!(payment_hash, payment_hash_3);
3591                                 assert!(!rejected_by_dest);
3592                         } else { panic!("Unexpected event!"); }
3593                 },
3594                 _ => panic!("Unexpected event type!"),
3595         };
3596
3597         let (payment_preimage_4, payment_hash_4) = if test_ignore_second_cs {
3598                 // Try to route another payment backwards from 2 to make sure 1 holds off on responding
3599                 let (payment_preimage_4, payment_hash_4) = get_payment_preimage_hash!(nodes[0]);
3600                 let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3601                 nodes[2].node.send_payment(route, payment_hash_4).unwrap();
3602                 check_added_monitors!(nodes[2], 1);
3603
3604                 send_event = SendEvent::from_event(nodes[2].node.get_and_clear_pending_msg_events().remove(0));
3605                 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3606                 if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::IgnoreError) }) = nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &send_event.commitment_msg) {
3607                         assert_eq!(err, "Previous monitor update failure prevented generation of RAA");
3608                 } else { panic!(); }
3609                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3610                 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
3611                 (Some(payment_preimage_4), Some(payment_hash_4))
3612         } else { (None, None) };
3613
3614         // Restore monitor updating, ensuring we immediately get a fail-back update and a
3615         // update_add update.
3616         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
3617         nodes[1].node.test_restore_channel_monitor();
3618         check_added_monitors!(nodes[1], 1);
3619         expect_pending_htlcs_forwardable!(nodes[1]);
3620         check_added_monitors!(nodes[1], 1);
3621
3622         let mut events_3 = nodes[1].node.get_and_clear_pending_msg_events();
3623         if test_ignore_second_cs {
3624                 assert_eq!(events_3.len(), 3);
3625         } else {
3626                 assert_eq!(events_3.len(), 2);
3627         }
3628
3629         // Note that the ordering of the events for different nodes is non-prescriptive, though the
3630         // ordering of the two events that both go to nodes[2] have to stay in the same order.
3631         let messages_a = match events_3.pop().unwrap() {
3632                 MessageSendEvent::UpdateHTLCs { node_id, mut updates } => {
3633                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
3634                         assert!(updates.update_fulfill_htlcs.is_empty());
3635                         assert_eq!(updates.update_fail_htlcs.len(), 1);
3636                         assert!(updates.update_fail_malformed_htlcs.is_empty());
3637                         assert!(updates.update_add_htlcs.is_empty());
3638                         assert!(updates.update_fee.is_none());
3639                         (updates.update_fail_htlcs.remove(0), updates.commitment_signed)
3640                 },
3641                 _ => panic!("Unexpected event type!"),
3642         };
3643         let raa = if test_ignore_second_cs {
3644                 match events_3.remove(1) {
3645                         MessageSendEvent::SendRevokeAndACK { node_id, msg } => {
3646                                 assert_eq!(node_id, nodes[2].node.get_our_node_id());
3647                                 Some(msg.clone())
3648                         },
3649                         _ => panic!("Unexpected event"),
3650                 }
3651         } else { None };
3652         let send_event_b = SendEvent::from_event(events_3.remove(0));
3653         assert_eq!(send_event_b.node_id, nodes[2].node.get_our_node_id());
3654
3655         // Now deliver the new messages...
3656
3657         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &messages_a.0).unwrap();
3658         commitment_signed_dance!(nodes[0], nodes[1], messages_a.1, false);
3659         let events_4 = nodes[0].node.get_and_clear_pending_events();
3660         assert_eq!(events_4.len(), 1);
3661         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events_4[0] {
3662                 assert_eq!(payment_hash, payment_hash_1);
3663                 assert!(rejected_by_dest);
3664         } else { panic!("Unexpected event!"); }
3665
3666         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_b.msgs[0]).unwrap();
3667         if test_ignore_second_cs {
3668                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_b.commitment_msg).unwrap();
3669                 check_added_monitors!(nodes[2], 1);
3670                 let bs_revoke_and_ack = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3671                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &raa.unwrap()).unwrap();
3672                 check_added_monitors!(nodes[2], 1);
3673                 let bs_cs = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
3674                 assert!(bs_cs.update_add_htlcs.is_empty());
3675                 assert!(bs_cs.update_fail_htlcs.is_empty());
3676                 assert!(bs_cs.update_fail_malformed_htlcs.is_empty());
3677                 assert!(bs_cs.update_fulfill_htlcs.is_empty());
3678                 assert!(bs_cs.update_fee.is_none());
3679
3680                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
3681                 check_added_monitors!(nodes[1], 1);
3682                 let as_cs = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
3683                 assert!(as_cs.update_add_htlcs.is_empty());
3684                 assert!(as_cs.update_fail_htlcs.is_empty());
3685                 assert!(as_cs.update_fail_malformed_htlcs.is_empty());
3686                 assert!(as_cs.update_fulfill_htlcs.is_empty());
3687                 assert!(as_cs.update_fee.is_none());
3688
3689                 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_cs.commitment_signed).unwrap();
3690                 check_added_monitors!(nodes[1], 1);
3691                 let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
3692
3693                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_cs.commitment_signed).unwrap();
3694                 check_added_monitors!(nodes[2], 1);
3695                 let bs_second_raa = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3696
3697                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa).unwrap();
3698                 check_added_monitors!(nodes[2], 1);
3699                 assert!(nodes[2].node.get_and_clear_pending_msg_events().is_empty());
3700
3701                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_second_raa).unwrap();
3702                 check_added_monitors!(nodes[1], 1);
3703                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3704         } else {
3705                 commitment_signed_dance!(nodes[2], nodes[1], send_event_b.commitment_msg, false);
3706         }
3707
3708         expect_pending_htlcs_forwardable!(nodes[2]);
3709
3710         let events_6 = nodes[2].node.get_and_clear_pending_events();
3711         assert_eq!(events_6.len(), 1);
3712         match events_6[0] {
3713                 Event::PaymentReceived { payment_hash, .. } => { assert_eq!(payment_hash, payment_hash_2); },
3714                 _ => panic!("Unexpected event"),
3715         };
3716
3717         if test_ignore_second_cs {
3718                 expect_pending_htlcs_forwardable!(nodes[1]);
3719                 check_added_monitors!(nodes[1], 1);
3720
3721                 send_event = SendEvent::from_node(&nodes[1]);
3722                 assert_eq!(send_event.node_id, nodes[0].node.get_our_node_id());
3723                 assert_eq!(send_event.msgs.len(), 1);
3724                 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event.msgs[0]).unwrap();
3725                 commitment_signed_dance!(nodes[0], nodes[1], send_event.commitment_msg, false);
3726
3727                 expect_pending_htlcs_forwardable!(nodes[0]);
3728
3729                 let events_9 = nodes[0].node.get_and_clear_pending_events();
3730                 assert_eq!(events_9.len(), 1);
3731                 match events_9[0] {
3732                         Event::PaymentReceived { payment_hash, .. } => assert_eq!(payment_hash, payment_hash_4.unwrap()),
3733                         _ => panic!("Unexpected event"),
3734                 };
3735                 claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_4.unwrap());
3736         }
3737
3738         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_2);
3739 }
3740
3741 #[test]
3742 fn test_monitor_update_fail_raa() {
3743         do_test_monitor_update_fail_raa(false);
3744         do_test_monitor_update_fail_raa(true);
3745 }
3746
3747 #[test]
3748 fn test_monitor_update_fail_reestablish() {
3749         // Simple test for message retransmission after monitor update failure on
3750         // channel_reestablish generating a monitor update (which comes from freeing holding cell
3751         // HTLCs).
3752         let mut nodes = create_network(3);
3753         create_announced_chan_between_nodes(&nodes, 0, 1);
3754         create_announced_chan_between_nodes(&nodes, 1, 2);
3755
3756         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
3757
3758         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3759         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3760
3761         assert!(nodes[2].node.claim_funds(our_payment_preimage));
3762         check_added_monitors!(nodes[2], 1);
3763         let mut updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
3764         assert!(updates.update_add_htlcs.is_empty());
3765         assert!(updates.update_fail_htlcs.is_empty());
3766         assert!(updates.update_fail_malformed_htlcs.is_empty());
3767         assert!(updates.update_fee.is_none());
3768         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
3769         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]).unwrap();
3770         check_added_monitors!(nodes[1], 1);
3771         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3772         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
3773
3774         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
3775         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3776         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3777
3778         let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
3779         let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
3780
3781         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish).unwrap();
3782
3783         if let msgs::HandleError { err, action: Some(msgs::ErrorAction::IgnoreError) } = nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish).unwrap_err() {
3784                 assert_eq!(err, "Failed to update ChannelMonitor");
3785         } else { panic!(); }
3786         check_added_monitors!(nodes[1], 1);
3787
3788         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3789         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3790
3791         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3792         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3793
3794         assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
3795         assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
3796
3797         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish).unwrap();
3798
3799         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish).unwrap();
3800         check_added_monitors!(nodes[1], 0);
3801         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3802
3803         *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
3804         nodes[1].node.test_restore_channel_monitor();
3805         check_added_monitors!(nodes[1], 1);
3806
3807         updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
3808         assert!(updates.update_add_htlcs.is_empty());
3809         assert!(updates.update_fail_htlcs.is_empty());
3810         assert!(updates.update_fail_malformed_htlcs.is_empty());
3811         assert!(updates.update_fee.is_none());
3812         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
3813         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]).unwrap();
3814         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false);
3815
3816         let events = nodes[0].node.get_and_clear_pending_events();
3817         assert_eq!(events.len(), 1);
3818         match events[0] {
3819                 Event::PaymentSent { payment_preimage, .. } => assert_eq!(payment_preimage, our_payment_preimage),
3820                 _ => panic!("Unexpected event"),
3821         }
3822 }
3823
3824 #[test]
3825 fn test_invalid_channel_announcement() {
3826         //Test BOLT 7 channel_announcement msg requirement for final node, gather data to build customed channel_announcement msgs
3827         let secp_ctx = Secp256k1::new();
3828         let nodes = create_network(2);
3829
3830         let chan_announcement = create_chan_between_nodes(&nodes[0], &nodes[1]);
3831
3832         let a_channel_lock = nodes[0].node.channel_state.lock().unwrap();
3833         let b_channel_lock = nodes[1].node.channel_state.lock().unwrap();
3834         let as_chan = a_channel_lock.by_id.get(&chan_announcement.3).unwrap();
3835         let bs_chan = b_channel_lock.by_id.get(&chan_announcement.3).unwrap();
3836
3837         let _ = nodes[0].router.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id : as_chan.get_short_channel_id().unwrap(), is_permanent: false } );
3838
3839         let as_bitcoin_key = PublicKey::from_secret_key(&secp_ctx, &as_chan.get_local_keys().funding_key);
3840         let bs_bitcoin_key = PublicKey::from_secret_key(&secp_ctx, &bs_chan.get_local_keys().funding_key);
3841
3842         let as_network_key = nodes[0].node.get_our_node_id();
3843         let bs_network_key = nodes[1].node.get_our_node_id();
3844
3845         let were_node_one = as_bitcoin_key.serialize()[..] < bs_bitcoin_key.serialize()[..];
3846
3847         let mut chan_announcement;
3848
3849         macro_rules! dummy_unsigned_msg {
3850                 () => {
3851                         msgs::UnsignedChannelAnnouncement {
3852                                 features: msgs::GlobalFeatures::new(),
3853                                 chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
3854                                 short_channel_id: as_chan.get_short_channel_id().unwrap(),
3855                                 node_id_1: if were_node_one { as_network_key } else { bs_network_key },
3856                                 node_id_2: if were_node_one { bs_network_key } else { as_network_key },
3857                                 bitcoin_key_1: if were_node_one { as_bitcoin_key } else { bs_bitcoin_key },
3858                                 bitcoin_key_2: if were_node_one { bs_bitcoin_key } else { as_bitcoin_key },
3859                                 excess_data: Vec::new(),
3860                         };
3861                 }
3862         }
3863
3864         macro_rules! sign_msg {
3865                 ($unsigned_msg: expr) => {
3866                         let msghash = Message::from_slice(&Sha256dHash::from_data(&$unsigned_msg.encode()[..])[..]).unwrap();
3867                         let as_bitcoin_sig = secp_ctx.sign(&msghash, &as_chan.get_local_keys().funding_key);
3868                         let bs_bitcoin_sig = secp_ctx.sign(&msghash, &bs_chan.get_local_keys().funding_key);
3869                         let as_node_sig = secp_ctx.sign(&msghash, &nodes[0].keys_manager.get_node_secret());
3870                         let bs_node_sig = secp_ctx.sign(&msghash, &nodes[1].keys_manager.get_node_secret());
3871                         chan_announcement = msgs::ChannelAnnouncement {
3872                                 node_signature_1 : if were_node_one { as_node_sig } else { bs_node_sig},
3873                                 node_signature_2 : if were_node_one { bs_node_sig } else { as_node_sig},
3874                                 bitcoin_signature_1: if were_node_one { as_bitcoin_sig } else { bs_bitcoin_sig },
3875                                 bitcoin_signature_2 : if were_node_one { bs_bitcoin_sig } else { as_bitcoin_sig },
3876                                 contents: $unsigned_msg
3877                         }
3878                 }
3879         }
3880
3881         let unsigned_msg = dummy_unsigned_msg!();
3882         sign_msg!(unsigned_msg);
3883         assert_eq!(nodes[0].router.handle_channel_announcement(&chan_announcement).unwrap(), true);
3884         let _ = nodes[0].router.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id : as_chan.get_short_channel_id().unwrap(), is_permanent: false } );
3885
3886         // Configured with Network::Testnet
3887         let mut unsigned_msg = dummy_unsigned_msg!();
3888         unsigned_msg.chain_hash = genesis_block(Network::Bitcoin).header.bitcoin_hash();
3889         sign_msg!(unsigned_msg);
3890         assert!(nodes[0].router.handle_channel_announcement(&chan_announcement).is_err());
3891
3892         let mut unsigned_msg = dummy_unsigned_msg!();
3893         unsigned_msg.chain_hash = Sha256dHash::from_data(&[1,2,3,4,5,6,7,8,9]);
3894         sign_msg!(unsigned_msg);
3895         assert!(nodes[0].router.handle_channel_announcement(&chan_announcement).is_err());
3896 }
3897
3898 #[test]
3899 fn test_no_txn_manager_serialize_deserialize() {
3900         let mut nodes = create_network(2);
3901
3902         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001);
3903
3904         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3905
3906         let nodes_0_serialized = nodes[0].node.encode();
3907         let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
3908         nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
3909
3910         nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new())));
3911         let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
3912         let (_, chan_0_monitor) = <(Sha256dHash, ChannelMonitor)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
3913         assert!(chan_0_monitor_read.is_empty());
3914
3915         let mut nodes_0_read = &nodes_0_serialized[..];
3916         let config = UserConfig::new();
3917         let keys_manager = Arc::new(keysinterface::KeysManager::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new())));
3918         let (_, nodes_0_deserialized) = {
3919                 let mut channel_monitors = HashMap::new();
3920                 channel_monitors.insert(chan_0_monitor.get_funding_txo().unwrap(), &chan_0_monitor);
3921                 <(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3922                         default_config: config,
3923                         keys_manager,
3924                         fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
3925                         monitor: nodes[0].chan_monitor.clone(),
3926                         chain_monitor: nodes[0].chain_monitor.clone(),
3927                         tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3928                         logger: Arc::new(test_utils::TestLogger::new()),
3929                         channel_monitors: &channel_monitors,
3930                 }).unwrap()
3931         };
3932         assert!(nodes_0_read.is_empty());
3933
3934         assert!(nodes[0].chan_monitor.add_update_monitor(chan_0_monitor.get_funding_txo().unwrap(), chan_0_monitor).is_ok());
3935         nodes[0].node = Arc::new(nodes_0_deserialized);
3936         let nodes_0_as_listener: Arc<ChainListener> = nodes[0].node.clone();
3937         nodes[0].chain_monitor.register_listener(Arc::downgrade(&nodes_0_as_listener));
3938         assert_eq!(nodes[0].node.list_channels().len(), 1);
3939         check_added_monitors!(nodes[0], 1);
3940
3941         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3942         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3943         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3944         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
3945
3946         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
3947         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3948         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
3949         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3950
3951         let (funding_locked, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
3952         let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked);
3953         for node in nodes.iter() {
3954                 assert!(node.router.handle_channel_announcement(&announcement).unwrap());
3955                 node.router.handle_channel_update(&as_update).unwrap();
3956                 node.router.handle_channel_update(&bs_update).unwrap();
3957         }
3958
3959         send_payment(&nodes[0], &[&nodes[1]], 1000000);
3960 }
3961
3962 #[test]
3963 fn test_simple_manager_serialize_deserialize() {
3964         let mut nodes = create_network(2);
3965         create_announced_chan_between_nodes(&nodes, 0, 1);
3966
3967         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
3968         let (_, our_payment_hash) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
3969
3970         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3971
3972         let nodes_0_serialized = nodes[0].node.encode();
3973         let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
3974         nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
3975
3976         nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new())));
3977         let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
3978         let (_, chan_0_monitor) = <(Sha256dHash, ChannelMonitor)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
3979         assert!(chan_0_monitor_read.is_empty());
3980
3981         let mut nodes_0_read = &nodes_0_serialized[..];
3982         let keys_manager = Arc::new(keysinterface::KeysManager::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new())));
3983         let (_, nodes_0_deserialized) = {
3984                 let mut channel_monitors = HashMap::new();
3985                 channel_monitors.insert(chan_0_monitor.get_funding_txo().unwrap(), &chan_0_monitor);
3986                 <(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3987                         default_config: UserConfig::new(),
3988                         keys_manager,
3989                         fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
3990                         monitor: nodes[0].chan_monitor.clone(),
3991                         chain_monitor: nodes[0].chain_monitor.clone(),
3992                         tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3993                         logger: Arc::new(test_utils::TestLogger::new()),
3994                         channel_monitors: &channel_monitors,
3995                 }).unwrap()
3996         };
3997         assert!(nodes_0_read.is_empty());
3998
3999         assert!(nodes[0].chan_monitor.add_update_monitor(chan_0_monitor.get_funding_txo().unwrap(), chan_0_monitor).is_ok());
4000         nodes[0].node = Arc::new(nodes_0_deserialized);
4001         check_added_monitors!(nodes[0], 1);
4002
4003         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
4004
4005         fail_payment(&nodes[0], &[&nodes[1]], our_payment_hash);
4006         claim_payment(&nodes[0], &[&nodes[1]], our_payment_preimage);
4007 }
4008
4009 #[test]
4010 fn test_manager_serialize_deserialize_inconsistent_monitor() {
4011         // Test deserializing a ChannelManager with a out-of-date ChannelMonitor
4012         let mut nodes = create_network(4);
4013         create_announced_chan_between_nodes(&nodes, 0, 1);
4014         create_announced_chan_between_nodes(&nodes, 2, 0);
4015         let (_, _, channel_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 3);
4016
4017         let (our_payment_preimage, _) = route_payment(&nodes[2], &[&nodes[0], &nodes[1]], 1000000);
4018
4019         // Serialize the ChannelManager here, but the monitor we keep up-to-date
4020         let nodes_0_serialized = nodes[0].node.encode();
4021
4022         route_payment(&nodes[0], &[&nodes[3]], 1000000);
4023         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
4024         nodes[2].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
4025         nodes[3].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
4026
4027         // Now the ChannelMonitor (which is now out-of-sync with ChannelManager for channel w/
4028         // nodes[3])
4029         let mut node_0_monitors_serialized = Vec::new();
4030         for monitor in nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter() {
4031                 let mut writer = test_utils::TestVecWriter(Vec::new());
4032                 monitor.1.write_for_disk(&mut writer).unwrap();
4033                 node_0_monitors_serialized.push(writer.0);
4034         }
4035
4036         nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new())));
4037         let mut node_0_monitors = Vec::new();
4038         for serialized in node_0_monitors_serialized.iter() {
4039                 let mut read = &serialized[..];
4040                 let (_, monitor) = <(Sha256dHash, ChannelMonitor)>::read(&mut read, Arc::new(test_utils::TestLogger::new())).unwrap();
4041                 assert!(read.is_empty());
4042                 node_0_monitors.push(monitor);
4043         }
4044
4045         let mut nodes_0_read = &nodes_0_serialized[..];
4046         let keys_manager = Arc::new(keysinterface::KeysManager::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new())));
4047         let (_, nodes_0_deserialized) = <(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
4048                 default_config: UserConfig::new(),
4049                 keys_manager,
4050                 fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
4051                 monitor: nodes[0].chan_monitor.clone(),
4052                 chain_monitor: nodes[0].chain_monitor.clone(),
4053                 tx_broadcaster: nodes[0].tx_broadcaster.clone(),
4054                 logger: Arc::new(test_utils::TestLogger::new()),
4055                 channel_monitors: &node_0_monitors.iter().map(|monitor| { (monitor.get_funding_txo().unwrap(), monitor) }).collect(),
4056         }).unwrap();
4057         assert!(nodes_0_read.is_empty());
4058
4059         { // Channel close should result in a commitment tx and an HTLC tx
4060                 let txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4061                 assert_eq!(txn.len(), 2);
4062                 assert_eq!(txn[0].input[0].previous_output.txid, funding_tx.txid());
4063                 assert_eq!(txn[1].input[0].previous_output.txid, txn[0].txid());
4064         }
4065
4066         for monitor in node_0_monitors.drain(..) {
4067                 assert!(nodes[0].chan_monitor.add_update_monitor(monitor.get_funding_txo().unwrap(), monitor).is_ok());
4068                 check_added_monitors!(nodes[0], 1);
4069         }
4070         nodes[0].node = Arc::new(nodes_0_deserialized);
4071
4072         // nodes[1] and nodes[2] have no lost state with nodes[0]...
4073         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
4074         reconnect_nodes(&nodes[0], &nodes[2], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
4075         //... and we can even still claim the payment!
4076         claim_payment(&nodes[2], &[&nodes[0], &nodes[1]], our_payment_preimage);
4077
4078         nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id());
4079         let reestablish = get_event_msg!(nodes[3], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
4080         nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id());
4081         if let Err(msgs::HandleError { action: Some(msgs::ErrorAction::SendErrorMessage { msg }), .. }) = nodes[0].node.handle_channel_reestablish(&nodes[3].node.get_our_node_id(), &reestablish) {
4082                 assert_eq!(msg.channel_id, channel_id);
4083         } else { panic!("Unexpected result"); }
4084 }
4085
4086 macro_rules! check_spendable_outputs {
4087         ($node: expr, $der_idx: expr) => {
4088                 {
4089                         let events = $node.chan_monitor.simple_monitor.get_and_clear_pending_events();
4090                         let mut txn = Vec::new();
4091                         for event in events {
4092                                 match event {
4093                                         Event::SpendableOutputs { ref outputs } => {
4094                                                 for outp in outputs {
4095                                                         match *outp {
4096                                                                 SpendableOutputDescriptor::DynamicOutputP2WPKH { ref outpoint, ref key, ref output } => {
4097                                                                         let input = TxIn {
4098                                                                                 previous_output: outpoint.clone(),
4099                                                                                 script_sig: Script::new(),
4100                                                                                 sequence: 0,
4101                                                                                 witness: Vec::new(),
4102                                                                         };
4103                                                                         let outp = TxOut {
4104                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4105                                                                                 value: output.value,
4106                                                                         };
4107                                                                         let mut spend_tx = Transaction {
4108                                                                                 version: 2,
4109                                                                                 lock_time: 0,
4110                                                                                 input: vec![input],
4111                                                                                 output: vec![outp],
4112                                                                         };
4113                                                                         let secp_ctx = Secp256k1::new();
4114                                                                         let remotepubkey = PublicKey::from_secret_key(&secp_ctx, &key);
4115                                                                         let witness_script = Address::p2pkh(&remotepubkey, Network::Testnet).script_pubkey();
4116                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], &witness_script, output.value)[..]).unwrap();
4117                                                                         let remotesig = secp_ctx.sign(&sighash, key);
4118                                                                         spend_tx.input[0].witness.push(remotesig.serialize_der().to_vec());
4119                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4120                                                                         spend_tx.input[0].witness.push(remotepubkey.serialize().to_vec());
4121                                                                         txn.push(spend_tx);
4122                                                                 },
4123                                                                 SpendableOutputDescriptor::DynamicOutputP2WSH { ref outpoint, ref key, ref witness_script, ref to_self_delay, ref output } => {
4124                                                                         let input = TxIn {
4125                                                                                 previous_output: outpoint.clone(),
4126                                                                                 script_sig: Script::new(),
4127                                                                                 sequence: *to_self_delay as u32,
4128                                                                                 witness: Vec::new(),
4129                                                                         };
4130                                                                         let outp = TxOut {
4131                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4132                                                                                 value: output.value,
4133                                                                         };
4134                                                                         let mut spend_tx = Transaction {
4135                                                                                 version: 2,
4136                                                                                 lock_time: 0,
4137                                                                                 input: vec![input],
4138                                                                                 output: vec![outp],
4139                                                                         };
4140                                                                         let secp_ctx = Secp256k1::new();
4141                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], witness_script, output.value)[..]).unwrap();
4142                                                                         let local_delaysig = secp_ctx.sign(&sighash, key);
4143                                                                         spend_tx.input[0].witness.push(local_delaysig.serialize_der().to_vec());
4144                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4145                                                                         spend_tx.input[0].witness.push(vec!(0));
4146                                                                         spend_tx.input[0].witness.push(witness_script.clone().into_bytes());
4147                                                                         txn.push(spend_tx);
4148                                                                 },
4149                                                                 SpendableOutputDescriptor::StaticOutput { ref outpoint, ref output } => {
4150                                                                         let secp_ctx = Secp256k1::new();
4151                                                                         let input = TxIn {
4152                                                                                 previous_output: outpoint.clone(),
4153                                                                                 script_sig: Script::new(),
4154                                                                                 sequence: 0,
4155                                                                                 witness: Vec::new(),
4156                                                                         };
4157                                                                         let outp = TxOut {
4158                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4159                                                                                 value: output.value,
4160                                                                         };
4161                                                                         let mut spend_tx = Transaction {
4162                                                                                 version: 2,
4163                                                                                 lock_time: 0,
4164                                                                                 input: vec![input],
4165                                                                                 output: vec![outp.clone()],
4166                                                                         };
4167                                                                         let secret = {
4168                                                                                 match ExtendedPrivKey::new_master(Network::Testnet, &$node.node_seed) {
4169                                                                                         Ok(master_key) => {
4170                                                                                                 match master_key.ckd_priv(&secp_ctx, ChildNumber::from_hardened_idx($der_idx)) {
4171                                                                                                         Ok(key) => key,
4172                                                                                                         Err(_) => panic!("Your RNG is busted"),
4173                                                                                                 }
4174                                                                                         }
4175                                                                                         Err(_) => panic!("Your rng is busted"),
4176                                                                                 }
4177                                                                         };
4178                                                                         let pubkey = ExtendedPubKey::from_private(&secp_ctx, &secret).public_key;
4179                                                                         let witness_script = Address::p2pkh(&pubkey, Network::Testnet).script_pubkey();
4180                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], &witness_script, output.value)[..]).unwrap();
4181                                                                         let sig = secp_ctx.sign(&sighash, &secret.secret_key);
4182                                                                         spend_tx.input[0].witness.push(sig.serialize_der().to_vec());
4183                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4184                                                                         spend_tx.input[0].witness.push(pubkey.serialize().to_vec());
4185                                                                         txn.push(spend_tx);
4186                                                                 },
4187                                                         }
4188                                                 }
4189                                         },
4190                                         _ => panic!("Unexpected event"),
4191                                 };
4192                         }
4193                         txn
4194                 }
4195         }
4196 }
4197
4198 #[test]
4199 fn test_claim_sizeable_push_msat() {
4200         // Incidentally test SpendableOutput event generation due to detection of to_local output on commitment tx
4201         let nodes = create_network(2);
4202
4203         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 99000000);
4204         nodes[1].node.force_close_channel(&chan.2);
4205         check_closed_broadcast!(nodes[1]);
4206         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4207         assert_eq!(node_txn.len(), 1);
4208         check_spends!(node_txn[0], chan.3.clone());
4209         assert_eq!(node_txn[0].output.len(), 2); // We can't force trimming of to_remote output as channel_reserve_satoshis block us to do so at channel opening
4210
4211         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4212         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[0].clone()] }, 0);
4213         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4214         assert_eq!(spend_txn.len(), 1);
4215         check_spends!(spend_txn[0], node_txn[0].clone());
4216 }
4217
4218 #[test]
4219 fn test_claim_on_remote_sizeable_push_msat() {
4220         // Same test as previous, just test on remote commitment tx, as per_commitment_point registration changes following you're funder/fundee and
4221         // to_remote output is encumbered by a P2WPKH
4222
4223         let nodes = create_network(2);
4224
4225         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 99000000);
4226         nodes[0].node.force_close_channel(&chan.2);
4227         check_closed_broadcast!(nodes[0]);
4228
4229         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4230         assert_eq!(node_txn.len(), 1);
4231         check_spends!(node_txn[0], chan.3.clone());
4232         assert_eq!(node_txn[0].output.len(), 2); // We can't force trimming of to_remote output as channel_reserve_satoshis block us to do so at channel opening
4233
4234         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4235         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![node_txn[0].clone()] }, 0);
4236         check_closed_broadcast!(nodes[1]);
4237         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4238         assert_eq!(spend_txn.len(), 2);
4239         assert_eq!(spend_txn[0], spend_txn[1]);
4240         check_spends!(spend_txn[0], node_txn[0].clone());
4241 }
4242
4243 #[test]
4244 fn test_claim_on_remote_revoked_sizeable_push_msat() {
4245         // Same test as previous, just test on remote revoked commitment tx, as per_commitment_point registration changes following you're funder/fundee and
4246         // to_remote output is encumbered by a P2WPKH
4247
4248         let nodes = create_network(2);
4249
4250         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 59000000);
4251         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4252         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn.clone();
4253         assert_eq!(revoked_local_txn[0].input.len(), 1);
4254         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan.3.txid());
4255
4256         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage);
4257         let  header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4258         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4259         check_closed_broadcast!(nodes[1]);
4260
4261         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4262         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4263         assert_eq!(spend_txn.len(), 4);
4264         assert_eq!(spend_txn[0], spend_txn[2]); // to_remote output on revoked remote commitment_tx
4265         check_spends!(spend_txn[0], revoked_local_txn[0].clone());
4266         assert_eq!(spend_txn[1], spend_txn[3]); // to_local output on local commitment tx
4267         check_spends!(spend_txn[1], node_txn[0].clone());
4268 }
4269
4270 #[test]
4271 fn test_static_spendable_outputs_preimage_tx() {
4272         let nodes = create_network(2);
4273
4274         // Create some initial channels
4275         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4276
4277         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4278
4279         let commitment_tx = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4280         assert_eq!(commitment_tx[0].input.len(), 1);
4281         assert_eq!(commitment_tx[0].input[0].previous_output.txid, chan_1.3.txid());
4282
4283         // Settle A's commitment tx on B's chain
4284         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4285         assert!(nodes[1].node.claim_funds(payment_preimage));
4286         check_added_monitors!(nodes[1], 1);
4287         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()] }, 1);
4288         let events = nodes[1].node.get_and_clear_pending_msg_events();
4289         match events[0] {
4290                 MessageSendEvent::UpdateHTLCs { .. } => {},
4291                 _ => panic!("Unexpected event"),
4292         }
4293         match events[1] {
4294                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4295                 _ => panic!("Unexepected event"),
4296         }
4297
4298         // Check B's monitor was able to send back output descriptor event for preimage tx on A's commitment tx
4299         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); // ChannelManager : 1 (local commitment tx), ChannelMonitor: 2 (1 preimage tx) * 2 (block-rescan)
4300         check_spends!(node_txn[0], commitment_tx[0].clone());
4301         assert_eq!(node_txn[0], node_txn[2]);
4302         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4303         check_spends!(node_txn[1], chan_1.3.clone());
4304
4305         let spend_txn = check_spendable_outputs!(nodes[1], 1); // , 0, 0, 1, 1);
4306         assert_eq!(spend_txn.len(), 2);
4307         assert_eq!(spend_txn[0], spend_txn[1]);
4308         check_spends!(spend_txn[0], node_txn[0].clone());
4309 }
4310
4311 #[test]
4312 fn test_static_spendable_outputs_justice_tx_revoked_commitment_tx() {
4313         let nodes = create_network(2);
4314
4315         // Create some initial channels
4316         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4317
4318         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4319         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.iter().next().unwrap().1.last_local_commitment_txn.clone();
4320         assert_eq!(revoked_local_txn[0].input.len(), 1);
4321         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4322
4323         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage);
4324
4325         let  header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4326         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4327         check_closed_broadcast!(nodes[1]);
4328
4329         let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4330         assert_eq!(node_txn.len(), 3);
4331         assert_eq!(node_txn.pop().unwrap(), node_txn[0]);
4332         assert_eq!(node_txn[0].input.len(), 2);
4333         check_spends!(node_txn[0], revoked_local_txn[0].clone());
4334
4335         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4336         assert_eq!(spend_txn.len(), 2);
4337         assert_eq!(spend_txn[0], spend_txn[1]);
4338         check_spends!(spend_txn[0], node_txn[0].clone());
4339 }
4340
4341 #[test]
4342 fn test_static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx() {
4343         let nodes = create_network(2);
4344
4345         // Create some initial channels
4346         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4347
4348         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4349         let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4350         assert_eq!(revoked_local_txn[0].input.len(), 1);
4351         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4352
4353         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage);
4354
4355         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4356         // A will generate HTLC-Timeout from revoked commitment tx
4357         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4358         check_closed_broadcast!(nodes[0]);
4359
4360         let revoked_htlc_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4361         assert_eq!(revoked_htlc_txn.len(), 3);
4362         assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
4363         assert_eq!(revoked_htlc_txn[0].input.len(), 1);
4364         assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4365         check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
4366         check_spends!(revoked_htlc_txn[1], chan_1.3.clone());
4367
4368         // B will generate justice tx from A's revoked commitment/HTLC tx
4369         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()] }, 1);
4370         check_closed_broadcast!(nodes[1]);
4371
4372         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4373         assert_eq!(node_txn.len(), 4);
4374         assert_eq!(node_txn[3].input.len(), 1);
4375         check_spends!(node_txn[3], revoked_htlc_txn[0].clone());
4376
4377         // Check B's ChannelMonitor was able to generate the right spendable output descriptor
4378         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4379         assert_eq!(spend_txn.len(), 3);
4380         assert_eq!(spend_txn[0], spend_txn[1]);
4381         check_spends!(spend_txn[0], node_txn[0].clone());
4382         check_spends!(spend_txn[2], node_txn[3].clone());
4383 }
4384
4385 #[test]
4386 fn test_static_spendable_outputs_justice_tx_revoked_htlc_success_tx() {
4387         let nodes = create_network(2);
4388
4389         // Create some initial channels
4390         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4391
4392         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4393         let revoked_local_txn = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4394         assert_eq!(revoked_local_txn[0].input.len(), 1);
4395         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4396
4397         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage);
4398
4399         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4400         // B will generate HTLC-Success from revoked commitment tx
4401         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4402         check_closed_broadcast!(nodes[1]);
4403         let revoked_htlc_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4404
4405         assert_eq!(revoked_htlc_txn.len(), 3);
4406         assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
4407         assert_eq!(revoked_htlc_txn[0].input.len(), 1);
4408         assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4409         check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
4410
4411         // A will generate justice tx from B's revoked commitment/HTLC tx
4412         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()] }, 1);
4413         check_closed_broadcast!(nodes[0]);
4414
4415         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4416         assert_eq!(node_txn.len(), 4);
4417         assert_eq!(node_txn[3].input.len(), 1);
4418         check_spends!(node_txn[3], revoked_htlc_txn[0].clone());
4419
4420         // Check A's ChannelMonitor was able to generate the right spendable output descriptor
4421         let spend_txn = check_spendable_outputs!(nodes[0], 1);
4422         assert_eq!(spend_txn.len(), 5);
4423         assert_eq!(spend_txn[0], spend_txn[2]);
4424         assert_eq!(spend_txn[1], spend_txn[3]);
4425         check_spends!(spend_txn[0], revoked_local_txn[0].clone()); // spending to_remote output from revoked local tx
4426         check_spends!(spend_txn[1], node_txn[2].clone()); // spending justice tx output from revoked local tx htlc received output
4427         check_spends!(spend_txn[4], node_txn[3].clone()); // spending justice tx output on htlc success tx
4428 }
4429
4430 #[test]
4431 fn test_onchain_to_onchain_claim() {
4432         // Test that in case of channel closure, we detect the state of output thanks to
4433         // ChainWatchInterface and claim HTLC on downstream peer's remote commitment tx.
4434         // First, have C claim an HTLC against its own latest commitment transaction.
4435         // Then, broadcast these to B, which should update the monitor downstream on the A<->B
4436         // channel.
4437         // Finally, check that B will claim the HTLC output if A's latest commitment transaction
4438         // gets broadcast.
4439
4440         let nodes = create_network(3);
4441
4442         // Create some initial channels
4443         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4444         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
4445
4446         // Rebalance the network a bit by relaying one payment through all the channels ...
4447         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
4448         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
4449
4450         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
4451         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
4452         let commitment_tx = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
4453         check_spends!(commitment_tx[0], chan_2.3.clone());
4454         nodes[2].node.claim_funds(payment_preimage);
4455         check_added_monitors!(nodes[2], 1);
4456         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
4457         assert!(updates.update_add_htlcs.is_empty());
4458         assert!(updates.update_fail_htlcs.is_empty());
4459         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
4460         assert!(updates.update_fail_malformed_htlcs.is_empty());
4461
4462         nodes[2].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
4463         check_closed_broadcast!(nodes[2]);
4464
4465         let c_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
4466         assert_eq!(c_txn.len(), 3);
4467         assert_eq!(c_txn[0], c_txn[2]);
4468         assert_eq!(commitment_tx[0], c_txn[1]);
4469         check_spends!(c_txn[1], chan_2.3.clone());
4470         check_spends!(c_txn[2], c_txn[1].clone());
4471         assert_eq!(c_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
4472         assert_eq!(c_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4473         assert!(c_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
4474         assert_eq!(c_txn[0].lock_time, 0); // Success tx
4475
4476         // So we broadcast C's commitment tx and HTLC-Success on B's chain, we should successfully be able to extract preimage and update downstream monitor
4477         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![c_txn[1].clone(), c_txn[2].clone()]}, 1);
4478         {
4479                 let mut b_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4480                 assert_eq!(b_txn.len(), 4);
4481                 assert_eq!(b_txn[0], b_txn[3]);
4482                 check_spends!(b_txn[1], chan_2.3); // B local commitment tx, issued by ChannelManager
4483                 check_spends!(b_txn[2], b_txn[1].clone()); // HTLC-Timeout on B local commitment tx, issued by ChannelManager
4484                 assert_eq!(b_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4485                 assert!(b_txn[2].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
4486                 assert_ne!(b_txn[2].lock_time, 0); // Timeout tx
4487                 check_spends!(b_txn[0], c_txn[1].clone()); // timeout tx on C remote commitment tx, issued by ChannelMonitor, * 2 due to block rescan
4488                 assert_eq!(b_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4489                 assert!(b_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
4490                 assert_ne!(b_txn[2].lock_time, 0); // Timeout tx
4491                 b_txn.clear();
4492         }
4493         let msg_events = nodes[1].node.get_and_clear_pending_msg_events();
4494         check_added_monitors!(nodes[1], 1);
4495         match msg_events[0] {
4496                 MessageSendEvent::BroadcastChannelUpdate {  .. } => {},
4497                 _ => panic!("Unexpected event"),
4498         }
4499         match msg_events[1] {
4500                 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, .. } } => {
4501                         assert!(update_add_htlcs.is_empty());
4502                         assert!(update_fail_htlcs.is_empty());
4503                         assert_eq!(update_fulfill_htlcs.len(), 1);
4504                         assert!(update_fail_malformed_htlcs.is_empty());
4505                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
4506                 },
4507                 _ => panic!("Unexpected event"),
4508         };
4509         // Broadcast A's commitment tx on B's chain to see if we are able to claim inbound HTLC with our HTLC-Success tx
4510         let commitment_tx = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4511         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
4512         let b_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4513         assert_eq!(b_txn.len(), 3);
4514         check_spends!(b_txn[1], chan_1.3); // Local commitment tx, issued by ChannelManager
4515         assert_eq!(b_txn[0], b_txn[2]); // HTLC-Success tx, issued by ChannelMonitor, * 2 due to block rescan
4516         check_spends!(b_txn[0], commitment_tx[0].clone());
4517         assert_eq!(b_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4518         assert!(b_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
4519         assert_eq!(b_txn[2].lock_time, 0); // Success tx
4520
4521         check_closed_broadcast!(nodes[1]);
4522 }
4523
4524 #[test]
4525 fn test_duplicate_payment_hash_one_failure_one_success() {
4526         // Topology : A --> B --> C
4527         // We route 2 payments with same hash between B and C, one will be timeout, the other successfully claim
4528         let mut nodes = create_network(3);
4529
4530         create_announced_chan_between_nodes(&nodes, 0, 1);
4531         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2);
4532
4533         let (our_payment_preimage, duplicate_payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 900000);
4534         *nodes[0].network_payment_count.borrow_mut() -= 1;
4535         assert_eq!(route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 900000).1, duplicate_payment_hash);
4536
4537         let commitment_txn = nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().last_local_commitment_txn.clone();
4538         assert_eq!(commitment_txn[0].input.len(), 1);
4539         check_spends!(commitment_txn[0], chan_2.3.clone());
4540
4541         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4542         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_txn[0].clone()] }, 1);
4543         check_closed_broadcast!(nodes[1]);
4544
4545         let htlc_timeout_tx;
4546         { // Extract one of the two HTLC-Timeout transaction
4547                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4548                 assert_eq!(node_txn.len(), 7);
4549                 assert_eq!(node_txn[0], node_txn[5]);
4550                 assert_eq!(node_txn[1], node_txn[6]);
4551                 check_spends!(node_txn[0], commitment_txn[0].clone());
4552                 assert_eq!(node_txn[0].input.len(), 1);
4553                 check_spends!(node_txn[1], commitment_txn[0].clone());
4554                 assert_eq!(node_txn[1].input.len(), 1);
4555                 assert_ne!(node_txn[0].input[0], node_txn[1].input[0]);
4556                 check_spends!(node_txn[2], chan_2.3.clone());
4557                 check_spends!(node_txn[3], node_txn[2].clone());
4558                 check_spends!(node_txn[4], node_txn[2].clone());
4559                 htlc_timeout_tx = node_txn[1].clone();
4560         }
4561
4562         nodes[2].node.claim_funds(our_payment_preimage);
4563         nodes[2].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![commitment_txn[0].clone()] }, 1);
4564         check_added_monitors!(nodes[2], 2);
4565         let events = nodes[2].node.get_and_clear_pending_msg_events();
4566         match events[0] {
4567                 MessageSendEvent::UpdateHTLCs { .. } => {},
4568                 _ => panic!("Unexpected event"),
4569         }
4570         match events[1] {
4571                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4572                 _ => panic!("Unexepected event"),
4573         }
4574         let htlc_success_txn: Vec<_> = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
4575         assert_eq!(htlc_success_txn.len(), 5);
4576         check_spends!(htlc_success_txn[2], chan_2.3.clone());
4577         assert_eq!(htlc_success_txn[0], htlc_success_txn[3]);
4578         assert_eq!(htlc_success_txn[0].input.len(), 1);
4579         assert_eq!(htlc_success_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4580         assert_eq!(htlc_success_txn[1], htlc_success_txn[4]);
4581         assert_eq!(htlc_success_txn[1].input.len(), 1);
4582         assert_eq!(htlc_success_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4583         assert_ne!(htlc_success_txn[0].input[0], htlc_success_txn[1].input[0]);
4584         check_spends!(htlc_success_txn[0], commitment_txn[0].clone());
4585         check_spends!(htlc_success_txn[1], commitment_txn[0].clone());
4586
4587         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![htlc_timeout_tx] }, 200);
4588         expect_pending_htlcs_forwardable!(nodes[1]);
4589         let htlc_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
4590         assert!(htlc_updates.update_add_htlcs.is_empty());
4591         assert_eq!(htlc_updates.update_fail_htlcs.len(), 1);
4592         assert_eq!(htlc_updates.update_fail_htlcs[0].htlc_id, 1);
4593         assert!(htlc_updates.update_fulfill_htlcs.is_empty());
4594         assert!(htlc_updates.update_fail_malformed_htlcs.is_empty());
4595         check_added_monitors!(nodes[1], 1);
4596
4597         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &htlc_updates.update_fail_htlcs[0]).unwrap();
4598         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
4599         {
4600                 commitment_signed_dance!(nodes[0], nodes[1], &htlc_updates.commitment_signed, false, true);
4601                 let events = nodes[0].node.get_and_clear_pending_msg_events();
4602                 assert_eq!(events.len(), 1);
4603                 match events[0] {
4604                         MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelClosed { .. }  } => {
4605                         },
4606                         _ => { panic!("Unexpected event"); }
4607                 }
4608         }
4609         let events = nodes[0].node.get_and_clear_pending_events();
4610         match events[0] {
4611                 Event::PaymentFailed { ref payment_hash, .. } => {
4612                         assert_eq!(*payment_hash, duplicate_payment_hash);
4613                 }
4614                 _ => panic!("Unexpected event"),
4615         }
4616
4617         // Solve 2nd HTLC by broadcasting on B's chain HTLC-Success Tx from C
4618         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![htlc_success_txn[0].clone()] }, 200);
4619         let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
4620         assert!(updates.update_add_htlcs.is_empty());
4621         assert!(updates.update_fail_htlcs.is_empty());
4622         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
4623         assert_eq!(updates.update_fulfill_htlcs[0].htlc_id, 0);
4624         assert!(updates.update_fail_malformed_htlcs.is_empty());
4625         check_added_monitors!(nodes[1], 1);
4626
4627         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]).unwrap();
4628         commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false);
4629
4630         let events = nodes[0].node.get_and_clear_pending_events();
4631         match events[0] {
4632                 Event::PaymentSent { ref payment_preimage } => {
4633                         assert_eq!(*payment_preimage, our_payment_preimage);
4634                 }
4635                 _ => panic!("Unexpected event"),
4636         }
4637 }
4638
4639 #[test]
4640 fn test_dynamic_spendable_outputs_local_htlc_success_tx() {
4641         let nodes = create_network(2);
4642
4643         // Create some initial channels
4644         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4645
4646         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9000000).0;
4647         let local_txn = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4648         assert_eq!(local_txn[0].input.len(), 1);
4649         check_spends!(local_txn[0], chan_1.3.clone());
4650
4651         // Give B knowledge of preimage to be able to generate a local HTLC-Success Tx
4652         nodes[1].node.claim_funds(payment_preimage);
4653         check_added_monitors!(nodes[1], 1);
4654         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4655         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![local_txn[0].clone()] }, 1);
4656         let events = nodes[1].node.get_and_clear_pending_msg_events();
4657         match events[0] {
4658                 MessageSendEvent::UpdateHTLCs { .. } => {},
4659                 _ => panic!("Unexpected event"),
4660         }
4661         match events[1] {
4662                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4663                 _ => panic!("Unexepected event"),
4664         }
4665         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4666         assert_eq!(node_txn[0].input.len(), 1);
4667         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4668         check_spends!(node_txn[0], local_txn[0].clone());
4669
4670         // Verify that B is able to spend its own HTLC-Success tx thanks to spendable output event given back by its ChannelMonitor
4671         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4672         assert_eq!(spend_txn.len(), 2);
4673         check_spends!(spend_txn[0], node_txn[0].clone());
4674         check_spends!(spend_txn[1], node_txn[2].clone());
4675 }
4676
4677 fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, announce_latest: bool) {
4678         // Test that we fail backwards the full set of HTLCs we need to when remote broadcasts an
4679         // unrevoked commitment transaction.
4680         // This includes HTLCs which were below the dust threshold as well as HTLCs which were awaiting
4681         // a remote RAA before they could be failed backwards (and combinations thereof).
4682         // We also test duplicate-hash HTLCs by adding two nodes on each side of the target nodes which
4683         // use the same payment hashes.
4684         // Thus, we use a six-node network:
4685         //
4686         // A \         / E
4687         //    - C - D -
4688         // B /         \ F
4689         // And test where C fails back to A/B when D announces its latest commitment transaction
4690         let nodes = create_network(6);
4691
4692         create_announced_chan_between_nodes(&nodes, 0, 2);
4693         create_announced_chan_between_nodes(&nodes, 1, 2);
4694         let chan = create_announced_chan_between_nodes(&nodes, 2, 3);
4695         create_announced_chan_between_nodes(&nodes, 3, 4);
4696         create_announced_chan_between_nodes(&nodes, 3, 5);
4697
4698         // Rebalance and check output sanity...
4699         send_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 500000);
4700         send_payment(&nodes[1], &[&nodes[2], &nodes[3], &nodes[5]], 500000);
4701         assert_eq!(nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn[0].output.len(), 2);
4702
4703         let ds_dust_limit = nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
4704         // 0th HTLC:
4705         let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], ds_dust_limit*1000); // not added < dust limit + HTLC tx fee
4706         // 1st HTLC:
4707         let (_, payment_hash_2) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], ds_dust_limit*1000); // not added < dust limit + HTLC tx fee
4708         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), ds_dust_limit*1000, TEST_FINAL_CLTV).unwrap();
4709         // 2nd HTLC:
4710         send_along_route_with_hash(&nodes[1], route.clone(), &[&nodes[2], &nodes[3], &nodes[5]], ds_dust_limit*1000, payment_hash_1); // not added < dust limit + HTLC tx fee
4711         // 3rd HTLC:
4712         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], ds_dust_limit*1000, payment_hash_2); // not added < dust limit + HTLC tx fee
4713         // 4th HTLC:
4714         let (_, payment_hash_3) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4715         // 5th HTLC:
4716         let (_, payment_hash_4) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4717         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
4718         // 6th HTLC:
4719         send_along_route_with_hash(&nodes[1], route.clone(), &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_3);
4720         // 7th HTLC:
4721         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_4);
4722
4723         // 8th HTLC:
4724         let (_, payment_hash_5) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4725         // 9th HTLC:
4726         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), ds_dust_limit*1000, TEST_FINAL_CLTV).unwrap();
4727         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], ds_dust_limit*1000, payment_hash_5); // not added < dust limit + HTLC tx fee
4728
4729         // 10th HTLC:
4730         let (_, payment_hash_6) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], ds_dust_limit*1000); // not added < dust limit + HTLC tx fee
4731         // 11th HTLC:
4732         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
4733         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_6);
4734
4735         // Double-check that six of the new HTLC were added
4736         // We now have six HTLCs pending over the dust limit and six HTLCs under the dust limit (ie,
4737         // with to_local and to_remote outputs, 8 outputs and 6 HTLCs not included).
4738         assert_eq!(nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn.len(), 1);
4739         assert_eq!(nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn[0].output.len(), 8);
4740
4741         // Now fail back three of the over-dust-limit and three of the under-dust-limit payments in one go.
4742         // Fail 0th below-dust, 4th above-dust, 8th above-dust, 10th below-dust HTLCs
4743         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_1, ds_dust_limit*1000));
4744         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_3, 1000000));
4745         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_5, 1000000));
4746         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_6, ds_dust_limit*1000));
4747         check_added_monitors!(nodes[4], 0);
4748         expect_pending_htlcs_forwardable!(nodes[4]);
4749         check_added_monitors!(nodes[4], 1);
4750
4751         let four_removes = get_htlc_update_msgs!(nodes[4], nodes[3].node.get_our_node_id());
4752         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[0]).unwrap();
4753         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[1]).unwrap();
4754         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[2]).unwrap();
4755         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[3]).unwrap();
4756         commitment_signed_dance!(nodes[3], nodes[4], four_removes.commitment_signed, false);
4757
4758         // Fail 3rd below-dust and 7th above-dust HTLCs
4759         assert!(nodes[5].node.fail_htlc_backwards(&payment_hash_2, ds_dust_limit*1000));
4760         assert!(nodes[5].node.fail_htlc_backwards(&payment_hash_4, 1000000));
4761         check_added_monitors!(nodes[5], 0);
4762         expect_pending_htlcs_forwardable!(nodes[5]);
4763         check_added_monitors!(nodes[5], 1);
4764
4765         let two_removes = get_htlc_update_msgs!(nodes[5], nodes[3].node.get_our_node_id());
4766         nodes[3].node.handle_update_fail_htlc(&nodes[5].node.get_our_node_id(), &two_removes.update_fail_htlcs[0]).unwrap();
4767         nodes[3].node.handle_update_fail_htlc(&nodes[5].node.get_our_node_id(), &two_removes.update_fail_htlcs[1]).unwrap();
4768         commitment_signed_dance!(nodes[3], nodes[5], two_removes.commitment_signed, false);
4769
4770         let ds_prev_commitment_tx = nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn.clone();
4771
4772         expect_pending_htlcs_forwardable!(nodes[3]);
4773         check_added_monitors!(nodes[3], 1);
4774         let six_removes = get_htlc_update_msgs!(nodes[3], nodes[2].node.get_our_node_id());
4775         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[0]).unwrap();
4776         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[1]).unwrap();
4777         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[2]).unwrap();
4778         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[3]).unwrap();
4779         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[4]).unwrap();
4780         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[5]).unwrap();
4781         if deliver_last_raa {
4782                 commitment_signed_dance!(nodes[2], nodes[3], six_removes.commitment_signed, false);
4783         } else {
4784                 let _cs_last_raa = commitment_signed_dance!(nodes[2], nodes[3], six_removes.commitment_signed, false, true, false, true);
4785         }
4786
4787         // D's latest commitment transaction now contains 1st + 2nd + 9th HTLCs (implicitly, they're
4788         // below the dust limit) and the 5th + 6th + 11th HTLCs. It has failed back the 0th, 3rd, 4th,
4789         // 7th, 8th, and 10th, but as we haven't yet delivered the final RAA to C, the fails haven't
4790         // propagated back to A/B yet (and D has two unrevoked commitment transactions).
4791         //
4792         // We now broadcast the latest commitment transaction, which *should* result in failures for
4793         // the 0th, 1st, 2nd, 3rd, 4th, 7th, 8th, 9th, and 10th HTLCs, ie all the below-dust HTLCs and
4794         // the non-broadcast above-dust HTLCs.
4795         //
4796         // Alternatively, we may broadcast the previous commitment transaction, which should only
4797         // result in failures for the below-dust HTLCs, ie the 0th, 1st, 2nd, 3rd, 9th, and 10th HTLCs.
4798         let ds_last_commitment_tx = nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().last_local_commitment_txn.clone();
4799
4800         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4801         if announce_latest {
4802                 nodes[2].chain_monitor.block_connected_checked(&header, 1, &[&ds_last_commitment_tx[0]], &[1; 1]);
4803         } else {
4804                 nodes[2].chain_monitor.block_connected_checked(&header, 1, &[&ds_prev_commitment_tx[0]], &[1; 1]);
4805         }
4806         check_closed_broadcast!(nodes[2]);
4807         expect_pending_htlcs_forwardable!(nodes[2]);
4808         check_added_monitors!(nodes[2], 2);
4809
4810         let cs_msgs = nodes[2].node.get_and_clear_pending_msg_events();
4811         assert_eq!(cs_msgs.len(), 2);
4812         let mut a_done = false;
4813         for msg in cs_msgs {
4814                 match msg {
4815                         MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
4816                                 // Both under-dust HTLCs and the one above-dust HTLC that we had already failed
4817                                 // should be failed-backwards here.
4818                                 let target = if *node_id == nodes[0].node.get_our_node_id() {
4819                                         // If announce_latest, expect 0th, 1st, 4th, 8th, 10th HTLCs, else only 0th, 1st, 10th below-dust HTLCs
4820                                         for htlc in &updates.update_fail_htlcs {
4821                                                 assert!(htlc.htlc_id == 1 || htlc.htlc_id == 2 || htlc.htlc_id == 6 || if announce_latest { htlc.htlc_id == 3 || htlc.htlc_id == 5 } else { false });
4822                                         }
4823                                         assert_eq!(updates.update_fail_htlcs.len(), if announce_latest { 5 } else { 3 });
4824                                         assert!(!a_done);
4825                                         a_done = true;
4826                                         &nodes[0]
4827                                 } else {
4828                                         // If announce_latest, expect 2nd, 3rd, 7th, 9th HTLCs, else only 2nd, 3rd, 9th below-dust HTLCs
4829                                         for htlc in &updates.update_fail_htlcs {
4830                                                 assert!(htlc.htlc_id == 1 || htlc.htlc_id == 2 || htlc.htlc_id == 5 || if announce_latest { htlc.htlc_id == 4 } else { false });
4831                                         }
4832                                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
4833                                         assert_eq!(updates.update_fail_htlcs.len(), if announce_latest { 4 } else { 3 });
4834                                         &nodes[1]
4835                                 };
4836                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]).unwrap();
4837                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[1]).unwrap();
4838                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[2]).unwrap();
4839                                 if announce_latest {
4840                                         target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[3]).unwrap();
4841                                         if *node_id == nodes[0].node.get_our_node_id() {
4842                                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[4]).unwrap();
4843                                         }
4844                                 }
4845                                 commitment_signed_dance!(target, nodes[2], updates.commitment_signed, false, true);
4846                         },
4847                         _ => panic!("Unexpected event"),
4848                 }
4849         }
4850
4851         let as_events = nodes[0].node.get_and_clear_pending_events();
4852         assert_eq!(as_events.len(), if announce_latest { 5 } else { 3 });
4853         let mut as_failds = HashSet::new();
4854         for event in as_events.iter() {
4855                 if let &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } = event {
4856                         assert!(as_failds.insert(*payment_hash));
4857                         if *payment_hash != payment_hash_2 {
4858                                 assert_eq!(*rejected_by_dest, deliver_last_raa);
4859                         } else {
4860                                 assert!(!rejected_by_dest);
4861                         }
4862                 } else { panic!("Unexpected event"); }
4863         }
4864         assert!(as_failds.contains(&payment_hash_1));
4865         assert!(as_failds.contains(&payment_hash_2));
4866         if announce_latest {
4867                 assert!(as_failds.contains(&payment_hash_3));
4868                 assert!(as_failds.contains(&payment_hash_5));
4869         }
4870         assert!(as_failds.contains(&payment_hash_6));
4871
4872         let bs_events = nodes[1].node.get_and_clear_pending_events();
4873         assert_eq!(bs_events.len(), if announce_latest { 4 } else { 3 });
4874         let mut bs_failds = HashSet::new();
4875         for event in bs_events.iter() {
4876                 if let &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } = event {
4877                         assert!(bs_failds.insert(*payment_hash));
4878                         if *payment_hash != payment_hash_1 && *payment_hash != payment_hash_5 {
4879                                 assert_eq!(*rejected_by_dest, deliver_last_raa);
4880                         } else {
4881                                 assert!(!rejected_by_dest);
4882                         }
4883                 } else { panic!("Unexpected event"); }
4884         }
4885         assert!(bs_failds.contains(&payment_hash_1));
4886         assert!(bs_failds.contains(&payment_hash_2));
4887         if announce_latest {
4888                 assert!(bs_failds.contains(&payment_hash_4));
4889         }
4890         assert!(bs_failds.contains(&payment_hash_5));
4891
4892         // For each HTLC which was not failed-back by normal process (ie deliver_last_raa), we should
4893         // get a PaymentFailureNetworkUpdate. A should have gotten 4 HTLCs which were failed-back due
4894         // to unknown-preimage-etc, B should have gotten 2. Thus, in the
4895         // announce_latest && deliver_last_raa case, we should have 5-4=1 and 4-2=2
4896         // PaymentFailureNetworkUpdates.
4897         let as_msg_events = nodes[0].node.get_and_clear_pending_msg_events();
4898         assert_eq!(as_msg_events.len(), if deliver_last_raa { 1 } else if !announce_latest { 3 } else { 5 });
4899         let bs_msg_events = nodes[1].node.get_and_clear_pending_msg_events();
4900         assert_eq!(bs_msg_events.len(), if deliver_last_raa { 2 } else if !announce_latest { 3 } else { 4 });
4901         for event in as_msg_events.iter().chain(bs_msg_events.iter()) {
4902                 match event {
4903                         &MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
4904                         _ => panic!("Unexpected event"),
4905                 }
4906         }
4907 }
4908
4909 #[test]
4910 fn test_fail_backwards_latest_remote_announce_a() {
4911         do_test_fail_backwards_unrevoked_remote_announce(false, true);
4912 }
4913
4914 #[test]
4915 fn test_fail_backwards_latest_remote_announce_b() {
4916         do_test_fail_backwards_unrevoked_remote_announce(true, true);
4917 }
4918
4919 #[test]
4920 fn test_fail_backwards_previous_remote_announce() {
4921         do_test_fail_backwards_unrevoked_remote_announce(false, false);
4922         // Note that true, true doesn't make sense as it implies we announce a revoked state, which is
4923         // tested for in test_commitment_revoked_fail_backward_exhaustive()
4924 }
4925
4926 #[test]
4927 fn test_dynamic_spendable_outputs_local_htlc_timeout_tx() {
4928         let nodes = create_network(2);
4929
4930         // Create some initial channels
4931         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1);
4932
4933         route_payment(&nodes[0], &vec!(&nodes[1])[..], 9000000).0;
4934         let local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan_1.2).unwrap().last_local_commitment_txn.clone();
4935         assert_eq!(local_txn[0].input.len(), 1);
4936         check_spends!(local_txn[0], chan_1.3.clone());
4937
4938         // Timeout HTLC on A's chain and so it can generate a HTLC-Timeout tx
4939         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4940         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![local_txn[0].clone()] }, 200);
4941         check_closed_broadcast!(nodes[0]);
4942
4943         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4944         assert_eq!(node_txn[0].input.len(), 1);
4945         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4946         check_spends!(node_txn[0], local_txn[0].clone());
4947
4948         // Verify that A is able to spend its own HTLC-Timeout tx thanks to spendable output event given back by its ChannelMonitor
4949         let spend_txn = check_spendable_outputs!(nodes[0], 1);
4950         assert_eq!(spend_txn.len(), 8);
4951         assert_eq!(spend_txn[0], spend_txn[2]);
4952         assert_eq!(spend_txn[0], spend_txn[4]);
4953         assert_eq!(spend_txn[0], spend_txn[6]);
4954         assert_eq!(spend_txn[1], spend_txn[3]);
4955         assert_eq!(spend_txn[1], spend_txn[5]);
4956         assert_eq!(spend_txn[1], spend_txn[7]);
4957         check_spends!(spend_txn[0], local_txn[0].clone());
4958         check_spends!(spend_txn[1], node_txn[0].clone());
4959 }
4960
4961 #[test]
4962 fn test_static_output_closing_tx() {
4963         let nodes = create_network(2);
4964
4965         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
4966
4967         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
4968         let closing_tx = close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true).2;
4969
4970         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4971         nodes[0].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![closing_tx.clone()] }, 1);
4972         let spend_txn = check_spendable_outputs!(nodes[0], 2);
4973         assert_eq!(spend_txn.len(), 1);
4974         check_spends!(spend_txn[0], closing_tx.clone());
4975
4976         nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![closing_tx.clone()] }, 1);
4977         let spend_txn = check_spendable_outputs!(nodes[1], 2);
4978         assert_eq!(spend_txn.len(), 1);
4979         check_spends!(spend_txn[0], closing_tx);
4980 }
4981
4982 fn do_htlc_claim_local_commitment_only(use_dust: bool) {
4983         let nodes = create_network(2);
4984         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
4985
4986         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1]], if use_dust { 50000 } else { 3000000 });
4987
4988         // Claim the payment, but don't deliver A's commitment_signed, resulting in the HTLC only being
4989         // present in B's local commitment transaction, but none of A's commitment transactions.
4990         assert!(nodes[1].node.claim_funds(our_payment_preimage));
4991         check_added_monitors!(nodes[1], 1);
4992
4993         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
4994         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fulfill_htlcs[0]).unwrap();
4995         let events = nodes[0].node.get_and_clear_pending_events();
4996         assert_eq!(events.len(), 1);
4997         match events[0] {
4998                 Event::PaymentSent { payment_preimage } => {
4999                         assert_eq!(payment_preimage, our_payment_preimage);
5000                 },
5001                 _ => panic!("Unexpected event"),
5002         }
5003
5004         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_updates.commitment_signed).unwrap();
5005         check_added_monitors!(nodes[0], 1);
5006         let as_updates = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5007         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_updates.0).unwrap();
5008         check_added_monitors!(nodes[1], 1);
5009
5010         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5011         for i in 1..TEST_FINAL_CLTV - CLTV_CLAIM_BUFFER + CHAN_CONFIRM_DEPTH + 1 {
5012                 nodes[1].chain_monitor.block_connected_checked(&header, i, &Vec::new(), &Vec::new());
5013                 header.prev_blockhash = header.bitcoin_hash();
5014         }
5015         test_txn_broadcast(&nodes[1], &chan, None, if use_dust { HTLCType::NONE } else { HTLCType::SUCCESS });
5016         check_closed_broadcast!(nodes[1]);
5017 }
5018
5019 fn do_htlc_claim_current_remote_commitment_only(use_dust: bool) {
5020         let mut nodes = create_network(2);
5021         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
5022
5023         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), if use_dust { 50000 } else { 3000000 }, TEST_FINAL_CLTV).unwrap();
5024         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
5025         nodes[0].node.send_payment(route, payment_hash).unwrap();
5026         check_added_monitors!(nodes[0], 1);
5027
5028         let _as_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5029
5030         // As far as A is concerened, the HTLC is now present only in the latest remote commitment
5031         // transaction, however it is not in A's latest local commitment, so we can just broadcast that
5032         // to "time out" the HTLC.
5033
5034         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5035         for i in 1..TEST_FINAL_CLTV + HTLC_FAIL_TIMEOUT_BLOCKS + CHAN_CONFIRM_DEPTH + 1 {
5036                 nodes[0].chain_monitor.block_connected_checked(&header, i, &Vec::new(), &Vec::new());
5037                 header.prev_blockhash = header.bitcoin_hash();
5038         }
5039         test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
5040         check_closed_broadcast!(nodes[0]);
5041 }
5042
5043 fn do_htlc_claim_previous_remote_commitment_only(use_dust: bool, check_revoke_no_close: bool) {
5044         let nodes = create_network(3);
5045         let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
5046
5047         // Fail the payment, but don't deliver A's final RAA, resulting in the HTLC only being present
5048         // in B's previous (unrevoked) commitment transaction, but none of A's commitment transactions.
5049         // Also optionally test that we *don't* fail the channel in case the commitment transaction was
5050         // actually revoked.
5051         let htlc_value = if use_dust { 50000 } else { 3000000 };
5052         let (_, our_payment_hash) = route_payment(&nodes[0], &[&nodes[1]], htlc_value);
5053         assert!(nodes[1].node.fail_htlc_backwards(&our_payment_hash, htlc_value));
5054         expect_pending_htlcs_forwardable!(nodes[1]);
5055         check_added_monitors!(nodes[1], 1);
5056
5057         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5058         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fail_htlcs[0]).unwrap();
5059         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_updates.commitment_signed).unwrap();
5060         check_added_monitors!(nodes[0], 1);
5061         let as_updates = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5062         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_updates.0).unwrap();
5063         check_added_monitors!(nodes[1], 1);
5064         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_updates.1).unwrap();
5065         check_added_monitors!(nodes[1], 1);
5066         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
5067
5068         if check_revoke_no_close {
5069                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack).unwrap();
5070                 check_added_monitors!(nodes[0], 1);
5071         }
5072
5073         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5074         for i in 1..TEST_FINAL_CLTV + HTLC_FAIL_TIMEOUT_BLOCKS + CHAN_CONFIRM_DEPTH + 1 {
5075                 nodes[0].chain_monitor.block_connected_checked(&header, i, &Vec::new(), &Vec::new());
5076                 header.prev_blockhash = header.bitcoin_hash();
5077         }
5078         if !check_revoke_no_close {
5079                 test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
5080                 check_closed_broadcast!(nodes[0]);
5081         } else {
5082                 let events = nodes[0].node.get_and_clear_pending_events();
5083                 assert_eq!(events.len(), 1);
5084                 match events[0] {
5085                         Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
5086                                 assert_eq!(payment_hash, our_payment_hash);
5087                                 assert!(rejected_by_dest);
5088                         },
5089                         _ => panic!("Unexpected event"),
5090                 }
5091         }
5092 }
5093
5094 // Test that we close channels on-chain when broadcastable HTLCs reach their timeout window.
5095 // There are only a few cases to test here:
5096 //  * its not really normative behavior, but we test that below-dust HTLCs "included" in
5097 //    broadcastable commitment transactions result in channel closure,
5098 //  * its included in an unrevoked-but-previous remote commitment transaction,
5099 //  * its included in the latest remote or local commitment transactions.
5100 // We test each of the three possible commitment transactions individually and use both dust and
5101 // non-dust HTLCs.
5102 // Note that we don't bother testing both outbound and inbound HTLC failures for each case, and we
5103 // assume they are handled the same across all six cases, as both outbound and inbound failures are
5104 // tested for at least one of the cases in other tests.
5105 #[test]
5106 fn htlc_claim_single_commitment_only_a() {
5107         do_htlc_claim_local_commitment_only(true);
5108         do_htlc_claim_local_commitment_only(false);
5109
5110         do_htlc_claim_current_remote_commitment_only(true);
5111         do_htlc_claim_current_remote_commitment_only(false);
5112 }
5113
5114 #[test]
5115 fn htlc_claim_single_commitment_only_b() {
5116         do_htlc_claim_previous_remote_commitment_only(true, false);
5117         do_htlc_claim_previous_remote_commitment_only(false, false);
5118         do_htlc_claim_previous_remote_commitment_only(true, true);
5119         do_htlc_claim_previous_remote_commitment_only(false, true);
5120 }
5121
5122 fn run_onion_failure_test<F1,F2>(_name: &str, test_case: u8, nodes: &Vec<Node>, route: &Route, payment_hash: &PaymentHash, callback_msg: F1, callback_node: F2, expected_retryable: bool, expected_error_code: Option<u16>, expected_channel_update: Option<HTLCFailChannelUpdate>)
5123         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
5124                                 F2: FnMut(),
5125 {
5126         run_onion_failure_test_with_fail_intercept(_name, test_case, nodes, route, payment_hash, callback_msg, |_|{}, callback_node, expected_retryable, expected_error_code, expected_channel_update);
5127 }
5128
5129 // test_case
5130 // 0: node1 fail backward
5131 // 1: final node fail backward
5132 // 2: payment completed but the user reject the payment
5133 // 3: final node fail backward (but tamper onion payloads from node0)
5134 // 100: trigger error in the intermediate node and tamper returnning fail_htlc
5135 // 200: trigger error in the final node and tamper returnning fail_htlc
5136 fn run_onion_failure_test_with_fail_intercept<F1,F2,F3>(_name: &str, test_case: u8, nodes: &Vec<Node>, route: &Route, payment_hash: &PaymentHash, mut callback_msg: F1, mut callback_fail: F2, mut callback_node: F3, expected_retryable: bool, expected_error_code: Option<u16>, expected_channel_update: Option<HTLCFailChannelUpdate>)
5137         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
5138                                 F2: for <'a> FnMut(&'a mut msgs::UpdateFailHTLC),
5139                                 F3: FnMut(),
5140 {
5141         use ln::msgs::HTLCFailChannelUpdate;
5142
5143         // reset block height
5144         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5145         for ix in 0..nodes.len() {
5146                 nodes[ix].chain_monitor.block_connected_checked(&header, 1, &Vec::new()[..], &[0; 0]);
5147         }
5148
5149         macro_rules! expect_event {
5150                 ($node: expr, $event_type: path) => {{
5151                         let events = $node.node.get_and_clear_pending_events();
5152                         assert_eq!(events.len(), 1);
5153                         match events[0] {
5154                                 $event_type { .. } => {},
5155                                 _ => panic!("Unexpected event"),
5156                         }
5157                 }}
5158         }
5159
5160         macro_rules! expect_htlc_forward {
5161                 ($node: expr) => {{
5162                         expect_event!($node, Event::PendingHTLCsForwardable);
5163                         $node.node.channel_state.lock().unwrap().next_forward = Instant::now();
5164                         $node.node.process_pending_htlc_forwards();
5165                 }}
5166         }
5167
5168         // 0 ~~> 2 send payment
5169         nodes[0].node.send_payment(route.clone(), payment_hash.clone()).unwrap();
5170         check_added_monitors!(nodes[0], 1);
5171         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5172         // temper update_add (0 => 1)
5173         let mut update_add_0 = update_0.update_add_htlcs[0].clone();
5174         if test_case == 0 || test_case == 3 || test_case == 100 {
5175                 callback_msg(&mut update_add_0);
5176                 callback_node();
5177         }
5178         // 0 => 1 update_add & CS
5179         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add_0).unwrap();
5180         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
5181
5182         let update_1_0 = match test_case {
5183                 0|100 => { // intermediate node failure; fail backward to 0
5184                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5185                         assert!(update_1_0.update_fail_htlcs.len()+update_1_0.update_fail_malformed_htlcs.len()==1 && (update_1_0.update_fail_htlcs.len()==1 || update_1_0.update_fail_malformed_htlcs.len()==1));
5186                         update_1_0
5187                 },
5188                 1|2|3|200 => { // final node failure; forwarding to 2
5189                         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
5190                         // forwarding on 1
5191                         if test_case != 200 {
5192                                 callback_node();
5193                         }
5194                         expect_htlc_forward!(&nodes[1]);
5195
5196                         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
5197                         check_added_monitors!(&nodes[1], 1);
5198                         assert_eq!(update_1.update_add_htlcs.len(), 1);
5199                         // tamper update_add (1 => 2)
5200                         let mut update_add_1 = update_1.update_add_htlcs[0].clone();
5201                         if test_case != 3 && test_case != 200 {
5202                                 callback_msg(&mut update_add_1);
5203                         }
5204
5205                         // 1 => 2
5206                         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &update_add_1).unwrap();
5207                         commitment_signed_dance!(nodes[2], nodes[1], update_1.commitment_signed, false, true);
5208
5209                         if test_case == 2 || test_case == 200 {
5210                                 expect_htlc_forward!(&nodes[2]);
5211                                 expect_event!(&nodes[2], Event::PaymentReceived);
5212                                 callback_node();
5213                                 expect_pending_htlcs_forwardable!(nodes[2]);
5214                         }
5215
5216                         let update_2_1 = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
5217                         if test_case == 2 || test_case == 200 {
5218                                 check_added_monitors!(&nodes[2], 1);
5219                         }
5220                         assert!(update_2_1.update_fail_htlcs.len() == 1);
5221
5222                         let mut fail_msg = update_2_1.update_fail_htlcs[0].clone();
5223                         if test_case == 200 {
5224                                 callback_fail(&mut fail_msg);
5225                         }
5226
5227                         // 2 => 1
5228                         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &fail_msg).unwrap();
5229                         commitment_signed_dance!(nodes[1], nodes[2], update_2_1.commitment_signed, true);
5230
5231                         // backward fail on 1
5232                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5233                         assert!(update_1_0.update_fail_htlcs.len() == 1);
5234                         update_1_0
5235                 },
5236                 _ => unreachable!(),
5237         };
5238
5239         // 1 => 0 commitment_signed_dance
5240         if update_1_0.update_fail_htlcs.len() > 0 {
5241                 let mut fail_msg = update_1_0.update_fail_htlcs[0].clone();
5242                 if test_case == 100 {
5243                         callback_fail(&mut fail_msg);
5244                 }
5245                 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg).unwrap();
5246         } else {
5247                 nodes[0].node.handle_update_fail_malformed_htlc(&nodes[1].node.get_our_node_id(), &update_1_0.update_fail_malformed_htlcs[0]).unwrap();
5248         };
5249
5250         commitment_signed_dance!(nodes[0], nodes[1], update_1_0.commitment_signed, false, true);
5251
5252         let events = nodes[0].node.get_and_clear_pending_events();
5253         assert_eq!(events.len(), 1);
5254         if let &Event::PaymentFailed { payment_hash:_, ref rejected_by_dest, ref error_code } = &events[0] {
5255                 assert_eq!(*rejected_by_dest, !expected_retryable);
5256                 assert_eq!(*error_code, expected_error_code);
5257         } else {
5258                 panic!("Uexpected event");
5259         }
5260
5261         let events = nodes[0].node.get_and_clear_pending_msg_events();
5262         if expected_channel_update.is_some() {
5263                 assert_eq!(events.len(), 1);
5264                 match events[0] {
5265                         MessageSendEvent::PaymentFailureNetworkUpdate { ref update } => {
5266                                 match update {
5267                                         &HTLCFailChannelUpdate::ChannelUpdateMessage { .. } => {
5268                                                 if let HTLCFailChannelUpdate::ChannelUpdateMessage { .. } = expected_channel_update.unwrap() {} else {
5269                                                         panic!("channel_update not found!");
5270                                                 }
5271                                         },
5272                                         &HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id, ref is_permanent } => {
5273                                                 if let HTLCFailChannelUpdate::ChannelClosed { short_channel_id: ref expected_short_channel_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
5274                                                         assert!(*short_channel_id == *expected_short_channel_id);
5275                                                         assert!(*is_permanent == *expected_is_permanent);
5276                                                 } else {
5277                                                         panic!("Unexpected message event");
5278                                                 }
5279                                         },
5280                                         &HTLCFailChannelUpdate::NodeFailure { ref node_id, ref is_permanent } => {
5281                                                 if let HTLCFailChannelUpdate::NodeFailure { node_id: ref expected_node_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
5282                                                         assert!(*node_id == *expected_node_id);
5283                                                         assert!(*is_permanent == *expected_is_permanent);
5284                                                 } else {
5285                                                         panic!("Unexpected message event");
5286                                                 }
5287                                         },
5288                                 }
5289                         },
5290                         _ => panic!("Unexpected message event"),
5291                 }
5292         } else {
5293                 assert_eq!(events.len(), 0);
5294         }
5295 }
5296
5297 impl msgs::ChannelUpdate {
5298         fn dummy() -> msgs::ChannelUpdate {
5299                 use secp256k1::ffi::Signature as FFISignature;
5300                 use secp256k1::Signature;
5301                 msgs::ChannelUpdate {
5302                         signature: Signature::from(FFISignature::new()),
5303                         contents: msgs::UnsignedChannelUpdate {
5304                                 chain_hash: Sha256dHash::from_data(&vec![0u8][..]),
5305                                 short_channel_id: 0,
5306                                 timestamp: 0,
5307                                 flags: 0,
5308                                 cltv_expiry_delta: 0,
5309                                 htlc_minimum_msat: 0,
5310                                 fee_base_msat: 0,
5311                                 fee_proportional_millionths: 0,
5312                                 excess_data: vec![],
5313                         }
5314                 }
5315         }
5316 }
5317
5318 #[test]
5319 fn test_onion_failure() {
5320         use ln::msgs::ChannelUpdate;
5321         use ln::channelmanager::CLTV_FAR_FAR_AWAY;
5322         use secp256k1;
5323
5324         const BADONION: u16 = 0x8000;
5325         const PERM: u16 = 0x4000;
5326         const NODE: u16 = 0x2000;
5327         const UPDATE: u16 = 0x1000;
5328
5329         let mut nodes = create_network(3);
5330         for node in nodes.iter() {
5331                 *node.keys_manager.override_session_priv.lock().unwrap() = Some(SecretKey::from_slice(&[3; 32]).unwrap());
5332         }
5333         let channels = [create_announced_chan_between_nodes(&nodes, 0, 1), create_announced_chan_between_nodes(&nodes, 1, 2)];
5334         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
5335         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 40000, TEST_FINAL_CLTV).unwrap();
5336         // positve case
5337         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 40000);
5338
5339         // intermediate node failure
5340         run_onion_failure_test("invalid_realm", 0, &nodes, &route, &payment_hash, |msg| {
5341                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5342                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5343                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5344                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route, cur_height).unwrap();
5345                 onion_payloads[0].realm = 3;
5346                 msg.onion_routing_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, &payment_hash);
5347         }, ||{}, true, Some(PERM|1), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));//XXX incremented channels idx here
5348
5349         // final node failure
5350         run_onion_failure_test("invalid_realm", 3, &nodes, &route, &payment_hash, |msg| {
5351                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5352                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5353                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5354                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route, cur_height).unwrap();
5355                 onion_payloads[1].realm = 3;
5356                 msg.onion_routing_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, &payment_hash);
5357         }, ||{}, false, Some(PERM|1), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5358
5359         // the following three with run_onion_failure_test_with_fail_intercept() test only the origin node
5360         // receiving simulated fail messages
5361         // intermediate node failure
5362         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 100, &nodes, &route, &payment_hash, |msg| {
5363                 // trigger error
5364                 msg.amount_msat -= 1;
5365         }, |msg| {
5366                 // and tamper returing error message
5367                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5368                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5369                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], NODE|2, &[0;0]);
5370         }, ||{}, true, Some(NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[0].pubkey, is_permanent: false}));
5371
5372         // final node failure
5373         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5374                 // and tamper returing error message
5375                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5376                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5377                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], NODE|2, &[0;0]);
5378         }, ||{
5379                 nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
5380         }, true, Some(NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[1].pubkey, is_permanent: false}));
5381
5382         // intermediate node failure
5383         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 100, &nodes, &route, &payment_hash, |msg| {
5384                 msg.amount_msat -= 1;
5385         }, |msg| {
5386                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5387                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5388                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|NODE|2, &[0;0]);
5389         }, ||{}, true, Some(PERM|NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[0].pubkey, is_permanent: true}));
5390
5391         // final node failure
5392         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5393                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5394                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5395                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], PERM|NODE|2, &[0;0]);
5396         }, ||{
5397                 nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
5398         }, false, Some(PERM|NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[1].pubkey, is_permanent: true}));
5399
5400         // intermediate node failure
5401         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 100, &nodes, &route, &payment_hash, |msg| {
5402                 msg.amount_msat -= 1;
5403         }, |msg| {
5404                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5405                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5406                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|NODE|3, &[0;0]);
5407         }, ||{
5408                 nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
5409         }, true, Some(PERM|NODE|3), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[0].pubkey, is_permanent: true}));
5410
5411         // final node failure
5412         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5413                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5414                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5415                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], PERM|NODE|3, &[0;0]);
5416         }, ||{
5417                 nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
5418         }, false, Some(PERM|NODE|3), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.hops[1].pubkey, is_permanent: true}));
5419
5420         run_onion_failure_test("invalid_onion_version", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.version = 1; }, ||{}, true,
5421                 Some(BADONION|PERM|4), None);
5422
5423         run_onion_failure_test("invalid_onion_hmac", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.hmac = [3; 32]; }, ||{}, true,
5424                 Some(BADONION|PERM|5), None);
5425
5426         run_onion_failure_test("invalid_onion_key", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.public_key = Err(secp256k1::Error::InvalidPublicKey);}, ||{}, true,
5427                 Some(BADONION|PERM|6), None);
5428
5429         run_onion_failure_test_with_fail_intercept("temporary_channel_failure", 100, &nodes, &route, &payment_hash, |msg| {
5430                 msg.amount_msat -= 1;
5431         }, |msg| {
5432                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5433                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5434                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], UPDATE|7, &ChannelUpdate::dummy().encode_with_len()[..]);
5435         }, ||{}, true, Some(UPDATE|7), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5436
5437         run_onion_failure_test_with_fail_intercept("permanent_channel_failure", 100, &nodes, &route, &payment_hash, |msg| {
5438                 msg.amount_msat -= 1;
5439         }, |msg| {
5440                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5441                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5442                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|8, &[0;0]);
5443                 // short_channel_id from the processing node
5444         }, ||{}, true, Some(PERM|8), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5445
5446         run_onion_failure_test_with_fail_intercept("required_channel_feature_missing", 100, &nodes, &route, &payment_hash, |msg| {
5447                 msg.amount_msat -= 1;
5448         }, |msg| {
5449                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5450                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5451                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|9, &[0;0]);
5452                 // short_channel_id from the processing node
5453         }, ||{}, true, Some(PERM|9), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5454
5455         let mut bogus_route = route.clone();
5456         bogus_route.hops[1].short_channel_id -= 1;
5457         run_onion_failure_test("unknown_next_peer", 0, &nodes, &bogus_route, &payment_hash, |_| {}, ||{}, true, Some(PERM|10),
5458           Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: bogus_route.hops[1].short_channel_id, is_permanent:true}));
5459
5460         let amt_to_forward = nodes[1].node.channel_state.lock().unwrap().by_id.get(&channels[1].2).unwrap().get_their_htlc_minimum_msat() - 1;
5461         let mut bogus_route = route.clone();
5462         let route_len = bogus_route.hops.len();
5463         bogus_route.hops[route_len-1].fee_msat = amt_to_forward;
5464         run_onion_failure_test("amount_below_minimum", 0, &nodes, &bogus_route, &payment_hash, |_| {}, ||{}, true, Some(UPDATE|11), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5465
5466         //TODO: with new config API, we will be able to generate both valid and
5467         //invalid channel_update cases.
5468         run_onion_failure_test("fee_insufficient", 0, &nodes, &route, &payment_hash, |msg| {
5469                 msg.amount_msat -= 1;
5470         }, || {}, true, Some(UPDATE|12), Some(msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id: channels[0].0.contents.short_channel_id, is_permanent: true}));
5471
5472         run_onion_failure_test("incorrect_cltv_expiry", 0, &nodes, &route, &payment_hash, |msg| {
5473                 // need to violate: cltv_expiry - cltv_expiry_delta >= outgoing_cltv_value
5474                 msg.cltv_expiry -= 1;
5475         }, || {}, true, Some(UPDATE|13), Some(msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id: channels[0].0.contents.short_channel_id, is_permanent: true}));
5476
5477         run_onion_failure_test("expiry_too_soon", 0, &nodes, &route, &payment_hash, |msg| {
5478                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - HTLC_FAIL_TIMEOUT_BLOCKS + 1;
5479                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5480                 nodes[1].chain_monitor.block_connected_checked(&header, height, &Vec::new()[..], &[0; 0]);
5481         }, ||{}, true, Some(UPDATE|14), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5482
5483         run_onion_failure_test("unknown_payment_hash", 2, &nodes, &route, &payment_hash, |_| {}, || {
5484                 nodes[2].node.fail_htlc_backwards(&payment_hash, 0);
5485         }, false, Some(PERM|15), None);
5486
5487         run_onion_failure_test("final_expiry_too_soon", 1, &nodes, &route, &payment_hash, |msg| {
5488                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - HTLC_FAIL_TIMEOUT_BLOCKS + 1;
5489                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5490                 nodes[2].chain_monitor.block_connected_checked(&header, height, &Vec::new()[..], &[0; 0]);
5491         }, || {}, true, Some(17), None);
5492
5493         run_onion_failure_test("final_incorrect_cltv_expiry", 1, &nodes, &route, &payment_hash, |_| {}, || {
5494                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().borrow_parts().forward_htlcs.iter_mut() {
5495                         for f in pending_forwards.iter_mut() {
5496                                 match f {
5497                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
5498                                                 forward_info.outgoing_cltv_value += 1,
5499                                         _ => {},
5500                                 }
5501                         }
5502                 }
5503         }, true, Some(18), None);
5504
5505         run_onion_failure_test("final_incorrect_htlc_amount", 1, &nodes, &route, &payment_hash, |_| {}, || {
5506                 // violate amt_to_forward > msg.amount_msat
5507                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().borrow_parts().forward_htlcs.iter_mut() {
5508                         for f in pending_forwards.iter_mut() {
5509                                 match f {
5510                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
5511                                                 forward_info.amt_to_forward -= 1,
5512                                         _ => {},
5513                                 }
5514                         }
5515                 }
5516         }, true, Some(19), None);
5517
5518         run_onion_failure_test("channel_disabled", 0, &nodes, &route, &payment_hash, |_| {}, || {
5519                 // disconnect event to the channel between nodes[1] ~ nodes[2]
5520                 nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), false);
5521                 nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
5522         }, true, Some(UPDATE|20), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5523         reconnect_nodes(&nodes[1], &nodes[2], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
5524
5525         run_onion_failure_test("expiry_too_far", 0, &nodes, &route, &payment_hash, |msg| {
5526                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5527                 let mut route = route.clone();
5528                 let height = 1;
5529                 route.hops[1].cltv_expiry_delta += CLTV_FAR_FAR_AWAY + route.hops[0].cltv_expiry_delta + 1;
5530                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route, &session_priv).unwrap();
5531                 let (onion_payloads, _, htlc_cltv) = onion_utils::build_onion_payloads(&route, height).unwrap();
5532                 let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, &payment_hash);
5533                 msg.cltv_expiry = htlc_cltv;
5534                 msg.onion_routing_packet = onion_packet;
5535         }, ||{}, true, Some(21), None);
5536 }
5537
5538 #[test]
5539 #[should_panic]
5540 fn bolt2_open_channel_sending_node_checks_part1() { //This test needs to be on its own as we are catching a panic
5541     let nodes = create_network(2);
5542     //Force duplicate channel ids
5543     for node in nodes.iter() {
5544         *node.keys_manager.override_channel_id_priv.lock().unwrap() = Some([0; 32]);
5545     }
5546
5547     // BOLT #2 spec: Sending node must ensure temporary_channel_id is unique from any other channel ID with the same peer.
5548     let channel_value_satoshis=10000;
5549     let push_msat=10001;
5550     nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).unwrap();
5551     let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
5552     nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &node0_to_1_send_open_channel).unwrap();
5553
5554     //Create a second channel with a channel_id collision
5555     assert!(nodes[0].node.create_channel(nodes[0].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5556 }
5557
5558 #[test]
5559 fn bolt2_open_channel_sending_node_checks_part2() {
5560     let nodes = create_network(2);
5561
5562     // BOLT #2 spec: Sending node must set funding_satoshis to less than 2^24 satoshis
5563     let channel_value_satoshis=2^24;
5564     let push_msat=10001;
5565     assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5566
5567     // BOLT #2 spec: Sending node must set push_msat to equal or less than 1000 * funding_satoshis
5568     let channel_value_satoshis=10000;
5569     // Test when push_msat is equal to 1000 * funding_satoshis.
5570     let push_msat=1000*channel_value_satoshis+1;
5571     assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
5572
5573     // BOLT #2 spec: Sending node must set set channel_reserve_satoshis greater than or equal to dust_limit_satoshis
5574     let channel_value_satoshis=10000;
5575     let push_msat=10001;
5576     assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_ok()); //Create a valid channel
5577     let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
5578     assert!(node0_to_1_send_open_channel.channel_reserve_satoshis>=node0_to_1_send_open_channel.dust_limit_satoshis);
5579
5580     // BOLT #2 spec: Sending node must set undefined bits in channel_flags to 0
5581     // Only the least-significant bit of channel_flags is currently defined resulting in channel_flags only having one of two possible states 0 or 1
5582     assert!(node0_to_1_send_open_channel.channel_flags<=1);
5583
5584     // BOLT #2 spec: Sending node should set to_self_delay sufficient to ensure the sender can irreversibly spend a commitment transaction output, in case of misbehaviour by the receiver.
5585     assert!(BREAKDOWN_TIMEOUT>0);
5586     assert!(node0_to_1_send_open_channel.to_self_delay==BREAKDOWN_TIMEOUT);
5587
5588     // BOLT #2 spec: Sending node must ensure the chain_hash value identifies the chain it wishes to open the channel within.
5589     let chain_hash=genesis_block(Network::Testnet).header.bitcoin_hash();
5590     assert_eq!(node0_to_1_send_open_channel.chain_hash,chain_hash);
5591
5592     // BOLT #2 spec: Sending node must set funding_pubkey, revocation_basepoint, htlc_basepoint, payment_basepoint, and delayed_payment_basepoint to valid DER-encoded, compressed, secp256k1 pubkeys.
5593     assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.funding_pubkey.serialize()).is_ok());
5594     assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.revocation_basepoint.serialize()).is_ok());
5595     assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.htlc_basepoint.serialize()).is_ok());
5596     assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.payment_basepoint.serialize()).is_ok());
5597     assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.delayed_payment_basepoint.serialize()).is_ok());
5598 }
5599
5600 // BOLT 2 Requirements for the Sender when constructing and sending an update_add_htlc message.
5601 // BOLT 2 Requirement: MUST NOT offer amount_msat it cannot pay for in the remote commitment transaction at the current feerate_per_kw (see "Updating Fees") while maintaining its channel reserve.
5602 //TODO: I don't believe this is explicitly enforced when sending an HTLC but as the Fee aspect of the BOLT specs is in flux leaving this as a TODO.
5603
5604 #[test]
5605 fn test_update_add_htlc_bolt2_sender_value_below_minimum_msat() {
5606         //BOLT2 Requirement: MUST offer amount_msat greater than 0.
5607         //BOLT2 Requirement: MUST NOT offer amount_msat below the receiving node's htlc_minimum_msat (same validation check catches both of these)
5608         let mut nodes = create_network(2);
5609         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000);
5610         let mut route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5611         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5612
5613         route.hops[0].fee_msat = 0;
5614
5615         let err = nodes[0].node.send_payment(route, our_payment_hash);
5616
5617         if let Err(APIError::ChannelUnavailable{err}) = err {
5618                 assert_eq!(err, "Cannot send less than their minimum HTLC value");
5619         } else {
5620                 assert!(false);
5621         }
5622 }
5623
5624 #[test]
5625 fn test_update_add_htlc_bolt2_sender_cltv_expiry_too_high() {
5626         //BOLT 2 Requirement: MUST set cltv_expiry less than 500000000.
5627         //It is enforced when constructing a route.
5628         let mut nodes = create_network(2);
5629         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 0);
5630         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000000, 500000001).unwrap();
5631         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5632
5633         let err = nodes[0].node.send_payment(route, our_payment_hash);
5634
5635         if let Err(APIError::RouteError{err}) = err {
5636                 assert_eq!(err, "Channel CLTV overflowed?!");
5637         } else {
5638                 assert!(false);
5639         }
5640 }
5641
5642 #[test]
5643 fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment() {
5644         //BOLT 2 Requirement: if result would be offering more than the remote's max_accepted_htlcs HTLCs, in the remote commitment transaction: MUST NOT add an HTLC.
5645         //BOLT 2 Requirement: for the first HTLC it offers MUST set id to 0.
5646         //BOLT 2 Requirement: MUST increase the value of id by 1 for each successive offer.
5647         let mut nodes = create_network(2);
5648         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 0);
5649         let max_accepted_htlcs = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().their_max_accepted_htlcs as u64;
5650
5651         for i in 0..max_accepted_htlcs {
5652                 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5653                 let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5654                 let mut payment_event = {
5655                         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5656                         check_added_monitors!(nodes[0], 1);
5657
5658                         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
5659                         assert_eq!(events.len(), 1);
5660                         if let MessageSendEvent::UpdateHTLCs { node_id: _, updates: msgs::CommitmentUpdate{ update_add_htlcs: ref htlcs, .. }, } = events[0] {
5661                                 assert_eq!(htlcs[0].htlc_id, i);
5662                         } else {
5663                                 assert!(false);
5664                         }
5665                         SendEvent::from_event(events.remove(0))
5666                 };
5667                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
5668                 check_added_monitors!(nodes[1], 0);
5669                 commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
5670
5671                 expect_pending_htlcs_forwardable!(nodes[1]);
5672                 expect_payment_received!(nodes[1], our_payment_hash, 100000);
5673         }
5674         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5675         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5676         let err = nodes[0].node.send_payment(route, our_payment_hash);
5677
5678         if let Err(APIError::ChannelUnavailable{err}) = err {
5679                 assert_eq!(err, "Cannot push more than their max accepted HTLCs");
5680         } else {
5681                 assert!(false);
5682         }
5683 }
5684
5685 #[test]
5686 fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_value_in_flight() {
5687         //BOLT 2 Requirement: if the sum of total offered HTLCs would exceed the remote's max_htlc_value_in_flight_msat: MUST NOT add an HTLC.
5688         let mut nodes = create_network(2);
5689         let channel_value = 100000;
5690         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, channel_value, 0);
5691         let max_in_flight = get_channel_value_stat!(nodes[0], chan.2).their_max_htlc_value_in_flight_msat;
5692
5693         send_payment(&nodes[0], &vec!(&nodes[1])[..], max_in_flight);
5694
5695         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], max_in_flight+1, TEST_FINAL_CLTV).unwrap();
5696         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5697         let err = nodes[0].node.send_payment(route, our_payment_hash);
5698
5699         if let Err(APIError::ChannelUnavailable{err}) = err {
5700                 assert_eq!(err, "Cannot send value that would put us over our max HTLC value in flight");
5701         } else {
5702                 assert!(false);
5703         }
5704
5705         send_payment(&nodes[0], &[&nodes[1]], max_in_flight);
5706 }
5707
5708 // BOLT 2 Requirements for the Receiver when handling an update_add_htlc message.
5709 #[test]
5710 fn test_update_add_htlc_bolt2_receiver_check_amount_received_more_than_min() {
5711         //BOLT2 Requirement: receiving an amount_msat equal to 0, OR less than its own htlc_minimum_msat -> SHOULD fail the channel.
5712         let mut nodes = create_network(2);
5713         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000);
5714         let htlc_minimum_msat: u64;
5715         {
5716                 let chan_lock = nodes[0].node.channel_state.lock().unwrap();
5717                 let channel = chan_lock.by_id.get(&chan.2).unwrap();
5718                 htlc_minimum_msat = channel.get_our_htlc_minimum_msat();
5719         }
5720         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], htlc_minimum_msat, TEST_FINAL_CLTV).unwrap();
5721         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5722         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5723         check_added_monitors!(nodes[0], 1);
5724         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5725         updates.update_add_htlcs[0].amount_msat = htlc_minimum_msat-1;
5726         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5727         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5728                 assert_eq!(err, "Remote side tried to send less than our minimum HTLC value");
5729         } else {
5730                 assert!(false);
5731         }
5732         assert!(nodes[1].node.list_channels().is_empty());
5733         check_closed_broadcast!(nodes[1]);
5734 }
5735
5736 #[test]
5737 fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
5738         //BOLT2 Requirement: receiving an amount_msat that the sending node cannot afford at the current feerate_per_kw (while maintaining its channel reserve): SHOULD fail the channel
5739         let mut nodes = create_network(2);
5740         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000);
5741
5742         let their_channel_reserve = get_channel_value_stat!(nodes[0], chan.2).channel_reserve_msat;
5743
5744         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 5000000-their_channel_reserve, TEST_FINAL_CLTV).unwrap();
5745         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5746         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5747         check_added_monitors!(nodes[0], 1);
5748         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5749
5750         updates.update_add_htlcs[0].amount_msat = 5000000-their_channel_reserve+1;
5751         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5752
5753         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5754                 assert_eq!(err, "Remote HTLC add would put them over their reserve value");
5755         } else {
5756                 assert!(false);
5757         }
5758
5759         assert!(nodes[1].node.list_channels().is_empty());
5760         check_closed_broadcast!(nodes[1]);
5761 }
5762
5763 #[test]
5764 fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
5765         //BOLT 2 Requirement: if a sending node adds more than its max_accepted_htlcs HTLCs to its local commitment transaction: SHOULD fail the channel
5766         //BOLT 2 Requirement: MUST allow multiple HTLCs with the same payment_hash.
5767         let mut nodes = create_network(2);
5768         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000);
5769         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 3999999, TEST_FINAL_CLTV).unwrap();
5770         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5771
5772         let session_priv = SecretKey::from_slice(&{
5773                 let mut session_key = [0; 32];
5774                 rng::fill_bytes(&mut session_key);
5775                 session_key
5776         }).expect("RNG is bad!");
5777
5778         let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5779         let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::signing_only(), &route, &session_priv).unwrap();
5780         let (onion_payloads, _htlc_msat, htlc_cltv) = onion_utils::build_onion_payloads(&route, cur_height).unwrap();
5781         let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, &our_payment_hash);
5782
5783         let mut msg = msgs::UpdateAddHTLC {
5784                 channel_id: chan.2,
5785                 htlc_id: 0,
5786                 amount_msat: 1000,
5787                 payment_hash: our_payment_hash,
5788                 cltv_expiry: htlc_cltv,
5789                 onion_routing_packet: onion_packet.clone(),
5790         };
5791
5792         for i in 0..super::channel::OUR_MAX_HTLCS {
5793                 msg.htlc_id = i as u64;
5794                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg).unwrap();
5795         }
5796         msg.htlc_id = (super::channel::OUR_MAX_HTLCS) as u64;
5797         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg);
5798
5799         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5800                 assert_eq!(err, "Remote tried to push more than our max accepted HTLCs");
5801         } else {
5802                 assert!(false);
5803         }
5804
5805         assert!(nodes[1].node.list_channels().is_empty());
5806         check_closed_broadcast!(nodes[1]);
5807 }
5808
5809 #[test]
5810 fn test_update_add_htlc_bolt2_receiver_check_max_in_flight_msat() {
5811         //OR adds more than its max_htlc_value_in_flight_msat worth of offered HTLCs to its local commitment transaction: SHOULD fail the channel
5812         let mut nodes = create_network(2);
5813         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000);
5814         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
5815         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5816         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5817         check_added_monitors!(nodes[0], 1);
5818         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5819         updates.update_add_htlcs[0].amount_msat = get_channel_value_stat!(nodes[1], chan.2).their_max_htlc_value_in_flight_msat + 1;
5820         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5821
5822         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5823                 assert_eq!(err,"Remote HTLC add would put them over their max HTLC value in flight");
5824         } else {
5825                 assert!(false);
5826         }
5827
5828         assert!(nodes[1].node.list_channels().is_empty());
5829         check_closed_broadcast!(nodes[1]);
5830 }
5831
5832 #[test]
5833 fn test_update_add_htlc_bolt2_receiver_check_cltv_expiry() {
5834         //BOLT2 Requirement: if sending node sets cltv_expiry to greater or equal to 500000000: SHOULD fail the channel.
5835         let mut nodes = create_network(2);
5836         create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000);
5837         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 3999999, TEST_FINAL_CLTV).unwrap();
5838         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5839         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5840         check_added_monitors!(nodes[0], 1);
5841         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5842         updates.update_add_htlcs[0].cltv_expiry = 500000000;
5843         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5844
5845         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5846                 assert_eq!(err,"Remote provided CLTV expiry in seconds instead of block height");
5847         } else {
5848                 assert!(false);
5849         }
5850
5851         assert!(nodes[1].node.list_channels().is_empty());
5852         check_closed_broadcast!(nodes[1]);
5853 }
5854
5855 #[test]
5856 fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
5857         //BOLT 2 requirement: if the sender did not previously acknowledge the commitment of that HTLC: MUST ignore a repeated id value after a reconnection.
5858         // We test this by first testing that that repeated HTLCs pass commitment signature checks
5859         // after disconnect and that non-sequential htlc_ids result in a channel failure.
5860         let mut nodes = create_network(2);
5861         create_announced_chan_between_nodes(&nodes, 0, 1);
5862         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
5863         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5864         nodes[0].node.send_payment(route, our_payment_hash).unwrap();
5865         check_added_monitors!(nodes[0], 1);
5866         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5867         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]).unwrap();
5868
5869         //Disconnect and Reconnect
5870         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
5871         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
5872         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
5873         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
5874         assert_eq!(reestablish_1.len(), 1);
5875         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
5876         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
5877         assert_eq!(reestablish_2.len(), 1);
5878         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
5879         handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
5880         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
5881         handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
5882
5883         //Resend HTLC
5884         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]).unwrap();
5885         assert_eq!(updates.commitment_signed.htlc_signatures.len(), 1);
5886         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed).unwrap();
5887         check_added_monitors!(nodes[1], 1);
5888         let _bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5889
5890         let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5891         if let Err(msgs::HandleError{err, action: Some(msgs::ErrorAction::SendErrorMessage {..})}) = err {
5892                 assert_eq!(err, "Remote skipped HTLC ID");
5893         } else {
5894                 assert!(false);
5895         }
5896
5897         assert!(nodes[1].node.list_channels().is_empty());
5898         check_closed_broadcast!(nodes[1]);
5899 }