Merge pull request #601 from D4nte/ci-in-github-action
[rust-lightning] / 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::keysinterface::{ChannelKeys, KeysInterface, SpendableOutputDescriptor};
7 use chain::chaininterface;
8 use chain::chaininterface::{ChainListener, ChainWatchInterfaceUtil, BlockNotifier};
9 use ln::channel::{COMMITMENT_TX_BASE_WEIGHT, COMMITMENT_TX_WEIGHT_PER_HTLC};
10 use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,HTLCForwardInfo,RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure, BREAKDOWN_TIMEOUT};
11 use ln::channelmonitor::{ChannelMonitor, CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, ManyChannelMonitor, ANTI_REORG_DELAY};
12 use ln::channelmonitor;
13 use ln::channel::{Channel, ChannelError};
14 use ln::{chan_utils, onion_utils};
15 use ln::router::{Route, RouteHop};
16 use ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
17 use ln::msgs;
18 use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler,HTLCFailChannelUpdate, ErrorAction};
19 use util::enforcing_trait_impls::EnforcingChannelKeys;
20 use util::test_utils;
21 use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
22 use util::errors::APIError;
23 use util::ser::{Writeable, Writer, ReadableArgs};
24 use util::config::UserConfig;
25 use util::logger::Logger;
26
27 use bitcoin::util::hash::BitcoinHash;
28 use bitcoin_hashes::sha256d::Hash as Sha256dHash;
29 use bitcoin::util::bip143;
30 use bitcoin::util::address::Address;
31 use bitcoin::util::bip32::{ChildNumber, ExtendedPubKey, ExtendedPrivKey};
32 use bitcoin::blockdata::block::{Block, BlockHeader};
33 use bitcoin::blockdata::transaction::{Transaction, TxOut, TxIn, SigHashType, OutPoint as BitcoinOutPoint};
34 use bitcoin::blockdata::script::{Builder, Script};
35 use bitcoin::blockdata::opcodes;
36 use bitcoin::blockdata::constants::genesis_block;
37 use bitcoin::network::constants::Network;
38
39 use bitcoin_hashes::sha256::Hash as Sha256;
40 use bitcoin_hashes::Hash;
41
42 use secp256k1::{Secp256k1, Message};
43 use secp256k1::key::{PublicKey,SecretKey};
44
45 use std::collections::{BTreeSet, HashMap, HashSet};
46 use std::default::Default;
47 use std::sync::{Arc, Mutex};
48 use std::sync::atomic::Ordering;
49 use std::{mem, io};
50
51 use rand::{thread_rng, Rng};
52
53 use ln::functional_test_utils::*;
54
55 #[test]
56 fn test_insane_channel_opens() {
57         // Stand up a network of 2 nodes
58         let chanmon_cfgs = create_chanmon_cfgs(2);
59         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
60         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
61         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
62
63         // Instantiate channel parameters where we push the maximum msats given our
64         // funding satoshis
65         let channel_value_sat = 31337; // same as funding satoshis
66         let channel_reserve_satoshis = Channel::<EnforcingChannelKeys>::get_our_channel_reserve_satoshis(channel_value_sat);
67         let push_msat = (channel_value_sat - channel_reserve_satoshis) * 1000;
68
69         // Have node0 initiate a channel to node1 with aforementioned parameters
70         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_sat, push_msat, 42, None).unwrap();
71
72         // Extract the channel open message from node0 to node1
73         let open_channel_message = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
74
75         // Test helper that asserts we get the correct error string given a mutator
76         // that supposedly makes the channel open message insane
77         let insane_open_helper = |expected_error_str: &str, message_mutator: fn(msgs::OpenChannel) -> msgs::OpenChannel| {
78                 nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &message_mutator(open_channel_message.clone()));
79                 let msg_events = nodes[1].node.get_and_clear_pending_msg_events();
80                 assert_eq!(msg_events.len(), 1);
81                 if let MessageSendEvent::HandleError { ref action, .. } = msg_events[0] {
82                         match action {
83                                 &ErrorAction::SendErrorMessage { .. } => {
84                                         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), expected_error_str.to_string(), 1);
85                                 },
86                                 _ => panic!("unexpected event!"),
87                         }
88                 } else { assert!(false); }
89         };
90
91         use ln::channel::MAX_FUNDING_SATOSHIS;
92         use ln::channelmanager::MAX_LOCAL_BREAKDOWN_TIMEOUT;
93
94         // Test all mutations that would make the channel open message insane
95         insane_open_helper("funding value > 2^24", |mut msg| { msg.funding_satoshis = MAX_FUNDING_SATOSHIS; msg });
96
97         insane_open_helper("Bogus channel_reserve_satoshis", |mut msg| { msg.channel_reserve_satoshis = msg.funding_satoshis + 1; msg });
98
99         insane_open_helper("push_msat larger than funding value", |mut msg| { msg.push_msat = (msg.funding_satoshis - msg.channel_reserve_satoshis) * 1000 + 1; msg });
100
101         insane_open_helper("Peer never wants payout outputs?", |mut msg| { msg.dust_limit_satoshis = msg.funding_satoshis + 1 ; msg });
102
103         insane_open_helper("Bogus; channel reserve is less than dust limit", |mut msg| { msg.dust_limit_satoshis = msg.channel_reserve_satoshis + 1; msg });
104
105         insane_open_helper("Minimum htlc value is full channel value", |mut msg| { msg.htlc_minimum_msat = (msg.funding_satoshis - msg.channel_reserve_satoshis) * 1000; msg });
106
107         insane_open_helper("They wanted our payments to be delayed by a needlessly long period", |mut msg| { msg.to_self_delay = MAX_LOCAL_BREAKDOWN_TIMEOUT + 1; msg });
108
109         insane_open_helper("0 max_accpted_htlcs makes for a useless channel", |mut msg| { msg.max_accepted_htlcs = 0; msg });
110
111         insane_open_helper("max_accpted_htlcs > 483", |mut msg| { msg.max_accepted_htlcs = 484; msg });
112 }
113
114 #[test]
115 fn test_async_inbound_update_fee() {
116         let chanmon_cfgs = create_chanmon_cfgs(2);
117         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
118         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
119         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
120         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
121         let channel_id = chan.2;
122
123         // balancing
124         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
125
126         // A                                        B
127         // update_fee                            ->
128         // send (1) commitment_signed            -.
129         //                                       <- update_add_htlc/commitment_signed
130         // send (2) RAA (awaiting remote revoke) -.
131         // (1) commitment_signed is delivered    ->
132         //                                       .- send (3) RAA (awaiting remote revoke)
133         // (2) RAA is delivered                  ->
134         //                                       .- send (4) commitment_signed
135         //                                       <- (3) RAA is delivered
136         // send (5) commitment_signed            -.
137         //                                       <- (4) commitment_signed is delivered
138         // send (6) RAA                          -.
139         // (5) commitment_signed is delivered    ->
140         //                                       <- RAA
141         // (6) RAA is delivered                  ->
142
143         // First nodes[0] generates an update_fee
144         nodes[0].node.update_fee(channel_id, get_feerate!(nodes[0], channel_id) + 20).unwrap();
145         check_added_monitors!(nodes[0], 1);
146
147         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
148         assert_eq!(events_0.len(), 1);
149         let (update_msg, commitment_signed) = match events_0[0] { // (1)
150                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, ref commitment_signed, .. }, .. } => {
151                         (update_fee.as_ref(), commitment_signed)
152                 },
153                 _ => panic!("Unexpected event"),
154         };
155
156         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
157
158         // ...but before it's delivered, nodes[1] starts to send a payment back to nodes[0]...
159         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
160         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, &None).unwrap();
161         check_added_monitors!(nodes[1], 1);
162
163         let payment_event = {
164                 let mut events_1 = nodes[1].node.get_and_clear_pending_msg_events();
165                 assert_eq!(events_1.len(), 1);
166                 SendEvent::from_event(events_1.remove(0))
167         };
168         assert_eq!(payment_event.node_id, nodes[0].node.get_our_node_id());
169         assert_eq!(payment_event.msgs.len(), 1);
170
171         // ...now when the messages get delivered everyone should be happy
172         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]);
173         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg); // (2)
174         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
175         // nodes[0] is awaiting nodes[1] revoke_and_ack so get_event_msg's assert(len == 1) passes
176         check_added_monitors!(nodes[0], 1);
177
178         // deliver(1), generate (3):
179         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed);
180         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
181         // nodes[1] is awaiting nodes[0] revoke_and_ack so get_event_msg's assert(len == 1) passes
182         check_added_monitors!(nodes[1], 1);
183
184         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack); // deliver (2)
185         let bs_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
186         assert!(bs_update.update_add_htlcs.is_empty()); // (4)
187         assert!(bs_update.update_fulfill_htlcs.is_empty()); // (4)
188         assert!(bs_update.update_fail_htlcs.is_empty()); // (4)
189         assert!(bs_update.update_fail_malformed_htlcs.is_empty()); // (4)
190         assert!(bs_update.update_fee.is_none()); // (4)
191         check_added_monitors!(nodes[1], 1);
192
193         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack); // deliver (3)
194         let as_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
195         assert!(as_update.update_add_htlcs.is_empty()); // (5)
196         assert!(as_update.update_fulfill_htlcs.is_empty()); // (5)
197         assert!(as_update.update_fail_htlcs.is_empty()); // (5)
198         assert!(as_update.update_fail_malformed_htlcs.is_empty()); // (5)
199         assert!(as_update.update_fee.is_none()); // (5)
200         check_added_monitors!(nodes[0], 1);
201
202         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_update.commitment_signed); // deliver (4)
203         let as_second_revoke = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
204         // only (6) so get_event_msg's assert(len == 1) passes
205         check_added_monitors!(nodes[0], 1);
206
207         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update.commitment_signed); // deliver (5)
208         let bs_second_revoke = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
209         check_added_monitors!(nodes[1], 1);
210
211         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke);
212         check_added_monitors!(nodes[0], 1);
213
214         let events_2 = nodes[0].node.get_and_clear_pending_events();
215         assert_eq!(events_2.len(), 1);
216         match events_2[0] {
217                 Event::PendingHTLCsForwardable {..} => {}, // If we actually processed we'd receive the payment
218                 _ => panic!("Unexpected event"),
219         }
220
221         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_revoke); // deliver (6)
222         check_added_monitors!(nodes[1], 1);
223 }
224
225 #[test]
226 fn test_update_fee_unordered_raa() {
227         // Just the intro to the previous test followed by an out-of-order RAA (which caused a
228         // crash in an earlier version of the update_fee patch)
229         let chanmon_cfgs = create_chanmon_cfgs(2);
230         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
231         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
232         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
233         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
234         let channel_id = chan.2;
235
236         // balancing
237         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
238
239         // First nodes[0] generates an update_fee
240         nodes[0].node.update_fee(channel_id, get_feerate!(nodes[0], channel_id) + 20).unwrap();
241         check_added_monitors!(nodes[0], 1);
242
243         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
244         assert_eq!(events_0.len(), 1);
245         let update_msg = match events_0[0] { // (1)
246                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, .. }, .. } => {
247                         update_fee.as_ref()
248                 },
249                 _ => panic!("Unexpected event"),
250         };
251
252         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
253
254         // ...but before it's delivered, nodes[1] starts to send a payment back to nodes[0]...
255         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
256         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, &None).unwrap();
257         check_added_monitors!(nodes[1], 1);
258
259         let payment_event = {
260                 let mut events_1 = nodes[1].node.get_and_clear_pending_msg_events();
261                 assert_eq!(events_1.len(), 1);
262                 SendEvent::from_event(events_1.remove(0))
263         };
264         assert_eq!(payment_event.node_id, nodes[0].node.get_our_node_id());
265         assert_eq!(payment_event.msgs.len(), 1);
266
267         // ...now when the messages get delivered everyone should be happy
268         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]);
269         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg); // (2)
270         let as_revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
271         // nodes[0] is awaiting nodes[1] revoke_and_ack so get_event_msg's assert(len == 1) passes
272         check_added_monitors!(nodes[0], 1);
273
274         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_msg); // deliver (2)
275         check_added_monitors!(nodes[1], 1);
276
277         // We can't continue, sadly, because our (1) now has a bogus signature
278 }
279
280 #[test]
281 fn test_multi_flight_update_fee() {
282         let chanmon_cfgs = create_chanmon_cfgs(2);
283         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
284         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
285         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
286         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
287         let channel_id = chan.2;
288
289         // A                                        B
290         // update_fee/commitment_signed          ->
291         //                                       .- send (1) RAA and (2) commitment_signed
292         // update_fee (never committed)          ->
293         // (3) update_fee                        ->
294         // We have to manually generate the above update_fee, it is allowed by the protocol but we
295         // don't track which updates correspond to which revoke_and_ack responses so we're in
296         // AwaitingRAA mode and will not generate the update_fee yet.
297         //                                       <- (1) RAA delivered
298         // (3) is generated and send (4) CS      -.
299         // Note that A cannot generate (4) prior to (1) being delivered as it otherwise doesn't
300         // know the per_commitment_point to use for it.
301         //                                       <- (2) commitment_signed delivered
302         // revoke_and_ack                        ->
303         //                                          B should send no response here
304         // (4) commitment_signed delivered       ->
305         //                                       <- RAA/commitment_signed delivered
306         // revoke_and_ack                        ->
307
308         // First nodes[0] generates an update_fee
309         let initial_feerate = get_feerate!(nodes[0], channel_id);
310         nodes[0].node.update_fee(channel_id, initial_feerate + 20).unwrap();
311         check_added_monitors!(nodes[0], 1);
312
313         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
314         assert_eq!(events_0.len(), 1);
315         let (update_msg_1, commitment_signed_1) = match events_0[0] { // (1)
316                 MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, ref commitment_signed, .. }, .. } => {
317                         (update_fee.as_ref().unwrap(), commitment_signed)
318                 },
319                 _ => panic!("Unexpected event"),
320         };
321
322         // Deliver first update_fee/commitment_signed pair, generating (1) and (2):
323         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg_1);
324         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed_1);
325         let (bs_revoke_msg, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
326         check_added_monitors!(nodes[1], 1);
327
328         // nodes[0] is awaiting a revoke from nodes[1] before it will create a new commitment
329         // transaction:
330         nodes[0].node.update_fee(channel_id, initial_feerate + 40).unwrap();
331         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
332         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
333
334         // Create the (3) update_fee message that nodes[0] will generate before it does...
335         let mut update_msg_2 = msgs::UpdateFee {
336                 channel_id: update_msg_1.channel_id.clone(),
337                 feerate_per_kw: (initial_feerate + 30) as u32,
338         };
339
340         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg_2);
341
342         update_msg_2.feerate_per_kw = (initial_feerate + 40) as u32;
343         // Deliver (3)
344         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg_2);
345
346         // Deliver (1), generating (3) and (4)
347         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_msg);
348         let as_second_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
349         check_added_monitors!(nodes[0], 1);
350         assert!(as_second_update.update_add_htlcs.is_empty());
351         assert!(as_second_update.update_fulfill_htlcs.is_empty());
352         assert!(as_second_update.update_fail_htlcs.is_empty());
353         assert!(as_second_update.update_fail_malformed_htlcs.is_empty());
354         // Check that the update_fee newly generated matches what we delivered:
355         assert_eq!(as_second_update.update_fee.as_ref().unwrap().channel_id, update_msg_2.channel_id);
356         assert_eq!(as_second_update.update_fee.as_ref().unwrap().feerate_per_kw, update_msg_2.feerate_per_kw);
357
358         // Deliver (2) commitment_signed
359         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment_signed);
360         let as_revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
361         check_added_monitors!(nodes[0], 1);
362         // No commitment_signed so get_event_msg's assert(len == 1) passes
363
364         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_msg);
365         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
366         check_added_monitors!(nodes[1], 1);
367
368         // Delever (4)
369         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_second_update.commitment_signed);
370         let (bs_second_revoke, bs_second_commitment) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
371         check_added_monitors!(nodes[1], 1);
372
373         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke);
374         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
375         check_added_monitors!(nodes[0], 1);
376
377         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment);
378         let as_second_revoke = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
379         // No commitment_signed so get_event_msg's assert(len == 1) passes
380         check_added_monitors!(nodes[0], 1);
381
382         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_revoke);
383         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
384         check_added_monitors!(nodes[1], 1);
385 }
386
387 #[test]
388 fn test_1_conf_open() {
389         // Previously, if the minium_depth config was set to 1, we'd never send a funding_locked. This
390         // tests that we properly send one in that case.
391         let mut alice_config = UserConfig::default();
392         alice_config.own_channel_config.minimum_depth = 1;
393         alice_config.channel_options.announced_channel = true;
394         alice_config.peer_channel_config_limits.force_announced_channel_preference = false;
395         let mut bob_config = UserConfig::default();
396         bob_config.own_channel_config.minimum_depth = 1;
397         bob_config.channel_options.announced_channel = true;
398         bob_config.peer_channel_config_limits.force_announced_channel_preference = false;
399         let chanmon_cfgs = create_chanmon_cfgs(2);
400         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
401         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(alice_config), Some(bob_config)]);
402         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
403
404         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001, InitFeatures::supported(), InitFeatures::supported());
405         assert!(nodes[0].chain_monitor.does_match_tx(&tx));
406         assert!(nodes[1].chain_monitor.does_match_tx(&tx));
407
408         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
409         nodes[1].block_notifier.block_connected_checked(&header, 1, &[&tx; 1], &[tx.version; 1]);
410         nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id()));
411
412         nodes[0].block_notifier.block_connected_checked(&header, 1, &[&tx; 1], &[tx.version; 1]);
413         let (funding_locked, _) = create_chan_between_nodes_with_value_confirm_second(&nodes[1], &nodes[0]);
414         let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked);
415
416         for node in nodes {
417                 assert!(node.router.handle_channel_announcement(&announcement).unwrap());
418                 node.router.handle_channel_update(&as_update).unwrap();
419                 node.router.handle_channel_update(&bs_update).unwrap();
420         }
421 }
422
423 fn do_test_sanity_on_in_flight_opens(steps: u8) {
424         // Previously, we had issues deserializing channels when we hadn't connected the first block
425         // after creation. To catch that and similar issues, we lean on the Node::drop impl to test
426         // serialization round-trips and simply do steps towards opening a channel and then drop the
427         // Node objects.
428
429         let chanmon_cfgs = create_chanmon_cfgs(2);
430         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
431         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
432         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
433
434         if steps & 0b1000_0000 != 0{
435                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
436                 nodes[0].block_notifier.block_connected_checked(&header, 1, &Vec::new(), &[0; 0]);
437                 nodes[1].block_notifier.block_connected_checked(&header, 1, &Vec::new(), &[0; 0]);
438         }
439
440         if steps & 0x0f == 0 { return; }
441         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
442         let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
443
444         if steps & 0x0f == 1 { return; }
445         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &open_channel);
446         let accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
447
448         if steps & 0x0f == 2 { return; }
449         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::supported(), &accept_channel);
450
451         let (temporary_channel_id, tx, funding_output) = create_funding_transaction(&nodes[0], 100000, 42);
452
453         if steps & 0x0f == 3 { return; }
454         nodes[0].node.funding_transaction_generated(&temporary_channel_id, funding_output);
455         check_added_monitors!(nodes[0], 0);
456         let funding_created = get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id());
457
458         if steps & 0x0f == 4 { return; }
459         nodes[1].node.handle_funding_created(&nodes[0].node.get_our_node_id(), &funding_created);
460         {
461                 let mut added_monitors = nodes[1].chan_monitor.added_monitors.lock().unwrap();
462                 assert_eq!(added_monitors.len(), 1);
463                 assert_eq!(added_monitors[0].0, funding_output);
464                 added_monitors.clear();
465         }
466         let funding_signed = get_event_msg!(nodes[1], MessageSendEvent::SendFundingSigned, nodes[0].node.get_our_node_id());
467
468         if steps & 0x0f == 5 { return; }
469         nodes[0].node.handle_funding_signed(&nodes[1].node.get_our_node_id(), &funding_signed);
470         {
471                 let mut added_monitors = nodes[0].chan_monitor.added_monitors.lock().unwrap();
472                 assert_eq!(added_monitors.len(), 1);
473                 assert_eq!(added_monitors[0].0, funding_output);
474                 added_monitors.clear();
475         }
476
477         let events_4 = nodes[0].node.get_and_clear_pending_events();
478         assert_eq!(events_4.len(), 1);
479         match events_4[0] {
480                 Event::FundingBroadcastSafe { ref funding_txo, user_channel_id } => {
481                         assert_eq!(user_channel_id, 42);
482                         assert_eq!(*funding_txo, funding_output);
483                 },
484                 _ => panic!("Unexpected event"),
485         };
486
487         if steps & 0x0f == 6 { return; }
488         create_chan_between_nodes_with_value_confirm_first(&nodes[0], &nodes[1], &tx);
489
490         if steps & 0x0f == 7 { return; }
491         confirm_transaction(&nodes[0].block_notifier, &nodes[0].chain_monitor, &tx, tx.version);
492         create_chan_between_nodes_with_value_confirm_second(&nodes[1], &nodes[0]);
493 }
494
495 #[test]
496 fn test_sanity_on_in_flight_opens() {
497         do_test_sanity_on_in_flight_opens(0);
498         do_test_sanity_on_in_flight_opens(0 | 0b1000_0000);
499         do_test_sanity_on_in_flight_opens(1);
500         do_test_sanity_on_in_flight_opens(1 | 0b1000_0000);
501         do_test_sanity_on_in_flight_opens(2);
502         do_test_sanity_on_in_flight_opens(2 | 0b1000_0000);
503         do_test_sanity_on_in_flight_opens(3);
504         do_test_sanity_on_in_flight_opens(3 | 0b1000_0000);
505         do_test_sanity_on_in_flight_opens(4);
506         do_test_sanity_on_in_flight_opens(4 | 0b1000_0000);
507         do_test_sanity_on_in_flight_opens(5);
508         do_test_sanity_on_in_flight_opens(5 | 0b1000_0000);
509         do_test_sanity_on_in_flight_opens(6);
510         do_test_sanity_on_in_flight_opens(6 | 0b1000_0000);
511         do_test_sanity_on_in_flight_opens(7);
512         do_test_sanity_on_in_flight_opens(7 | 0b1000_0000);
513         do_test_sanity_on_in_flight_opens(8);
514         do_test_sanity_on_in_flight_opens(8 | 0b1000_0000);
515 }
516
517 #[test]
518 fn test_update_fee_vanilla() {
519         let chanmon_cfgs = create_chanmon_cfgs(2);
520         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
521         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
522         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
523         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
524         let channel_id = chan.2;
525
526         let feerate = get_feerate!(nodes[0], channel_id);
527         nodes[0].node.update_fee(channel_id, feerate+25).unwrap();
528         check_added_monitors!(nodes[0], 1);
529
530         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
531         assert_eq!(events_0.len(), 1);
532         let (update_msg, commitment_signed) = match events_0[0] {
533                         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 } } => {
534                         (update_fee.as_ref(), commitment_signed)
535                 },
536                 _ => panic!("Unexpected event"),
537         };
538         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
539
540         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed);
541         let (revoke_msg, commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
542         check_added_monitors!(nodes[1], 1);
543
544         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg);
545         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
546         check_added_monitors!(nodes[0], 1);
547
548         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed);
549         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
550         // No commitment_signed so get_event_msg's assert(len == 1) passes
551         check_added_monitors!(nodes[0], 1);
552
553         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg);
554         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
555         check_added_monitors!(nodes[1], 1);
556 }
557
558 #[test]
559 fn test_update_fee_that_funder_cannot_afford() {
560         let chanmon_cfgs = create_chanmon_cfgs(2);
561         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
562         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
563         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
564         let channel_value = 1888;
565         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, channel_value, 700000, InitFeatures::supported(), InitFeatures::supported());
566         let channel_id = chan.2;
567
568         let feerate = 260;
569         nodes[0].node.update_fee(channel_id, feerate).unwrap();
570         check_added_monitors!(nodes[0], 1);
571         let update_msg = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
572
573         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update_msg.update_fee.unwrap());
574
575         commitment_signed_dance!(nodes[1], nodes[0], update_msg.commitment_signed, false);
576
577         //Confirm that the new fee based on the last local commitment txn is what we expected based on the feerate of 260 set above.
578         //This value results in a fee that is exactly what the funder can afford (277 sat + 1000 sat channel reserve)
579         {
580                 let commitment_tx = get_local_commitment_txn!(nodes[1], channel_id)[0].clone();
581
582                 //We made sure neither party's funds are below the dust limit so -2 non-HTLC txns from number of outputs
583                 let num_htlcs = commitment_tx.output.len() - 2;
584                 let total_fee: u64 = feerate * (COMMITMENT_TX_BASE_WEIGHT + (num_htlcs as u64) * COMMITMENT_TX_WEIGHT_PER_HTLC) / 1000;
585                 let mut actual_fee = commitment_tx.output.iter().fold(0, |acc, output| acc + output.value);
586                 actual_fee = channel_value - actual_fee;
587                 assert_eq!(total_fee, actual_fee);
588         }
589
590         //Add 2 to the previous fee rate to the final fee increases by 1 (with no HTLCs the fee is essentially
591         //fee_rate*(724/1000) so the increment of 1*0.724 is rounded back down)
592         nodes[0].node.update_fee(channel_id, feerate+2).unwrap();
593         check_added_monitors!(nodes[0], 1);
594
595         let update2_msg = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
596
597         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), &update2_msg.update_fee.unwrap());
598
599         //While producing the commitment_signed response after handling a received update_fee request the
600         //check to see if the funder, who sent the update_fee request, can afford the new fee (funder_balance >= fee+channel_reserve)
601         //Should produce and error.
602         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &update2_msg.commitment_signed);
603         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Funding remote cannot afford proposed new fee".to_string(), 1);
604         check_added_monitors!(nodes[1], 1);
605         check_closed_broadcast!(nodes[1], true);
606 }
607
608 #[test]
609 fn test_update_fee_with_fundee_update_add_htlc() {
610         let chanmon_cfgs = create_chanmon_cfgs(2);
611         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
612         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
613         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
614         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
615         let channel_id = chan.2;
616
617         // balancing
618         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
619
620         let feerate = get_feerate!(nodes[0], channel_id);
621         nodes[0].node.update_fee(channel_id, feerate+20).unwrap();
622         check_added_monitors!(nodes[0], 1);
623
624         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
625         assert_eq!(events_0.len(), 1);
626         let (update_msg, commitment_signed) = match events_0[0] {
627                         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 } } => {
628                         (update_fee.as_ref(), commitment_signed)
629                 },
630                 _ => panic!("Unexpected event"),
631         };
632         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
633         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed);
634         let (revoke_msg, commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
635         check_added_monitors!(nodes[1], 1);
636
637         let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 800000, TEST_FINAL_CLTV).unwrap();
638
639         let (our_payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[1]);
640
641         // nothing happens since node[1] is in AwaitingRemoteRevoke
642         nodes[1].node.send_payment(&route, our_payment_hash, &None).unwrap();
643         {
644                 let mut added_monitors = nodes[0].chan_monitor.added_monitors.lock().unwrap();
645                 assert_eq!(added_monitors.len(), 0);
646                 added_monitors.clear();
647         }
648         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
649         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
650         // node[1] has nothing to do
651
652         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg);
653         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
654         check_added_monitors!(nodes[0], 1);
655
656         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed);
657         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
658         // No commitment_signed so get_event_msg's assert(len == 1) passes
659         check_added_monitors!(nodes[0], 1);
660         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg);
661         check_added_monitors!(nodes[1], 1);
662         // AwaitingRemoteRevoke ends here
663
664         let commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
665         assert_eq!(commitment_update.update_add_htlcs.len(), 1);
666         assert_eq!(commitment_update.update_fulfill_htlcs.len(), 0);
667         assert_eq!(commitment_update.update_fail_htlcs.len(), 0);
668         assert_eq!(commitment_update.update_fail_malformed_htlcs.len(), 0);
669         assert_eq!(commitment_update.update_fee.is_none(), true);
670
671         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &commitment_update.update_add_htlcs[0]);
672         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_update.commitment_signed);
673         check_added_monitors!(nodes[0], 1);
674         let (revoke, commitment_signed) = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
675
676         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke);
677         check_added_monitors!(nodes[1], 1);
678         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
679
680         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &commitment_signed);
681         check_added_monitors!(nodes[1], 1);
682         let revoke = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
683         // No commitment_signed so get_event_msg's assert(len == 1) passes
684
685         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke);
686         check_added_monitors!(nodes[0], 1);
687         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
688
689         expect_pending_htlcs_forwardable!(nodes[0]);
690
691         let events = nodes[0].node.get_and_clear_pending_events();
692         assert_eq!(events.len(), 1);
693         match events[0] {
694                 Event::PaymentReceived { .. } => { },
695                 _ => panic!("Unexpected event"),
696         };
697
698         claim_payment(&nodes[1], &vec!(&nodes[0])[..], our_payment_preimage, 800_000);
699
700         send_payment(&nodes[1], &vec!(&nodes[0])[..], 800000, 800_000);
701         send_payment(&nodes[0], &vec!(&nodes[1])[..], 800000, 800_000);
702         close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
703 }
704
705 #[test]
706 fn test_update_fee() {
707         let chanmon_cfgs = create_chanmon_cfgs(2);
708         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
709         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
710         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
711         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
712         let channel_id = chan.2;
713
714         // A                                        B
715         // (1) update_fee/commitment_signed      ->
716         //                                       <- (2) revoke_and_ack
717         //                                       .- send (3) commitment_signed
718         // (4) update_fee/commitment_signed      ->
719         //                                       .- send (5) revoke_and_ack (no CS as we're awaiting a revoke)
720         //                                       <- (3) commitment_signed delivered
721         // send (6) revoke_and_ack               -.
722         //                                       <- (5) deliver revoke_and_ack
723         // (6) deliver revoke_and_ack            ->
724         //                                       .- send (7) commitment_signed in response to (4)
725         //                                       <- (7) deliver commitment_signed
726         // revoke_and_ack                        ->
727
728         // Create and deliver (1)...
729         let feerate = get_feerate!(nodes[0], channel_id);
730         nodes[0].node.update_fee(channel_id, feerate+20).unwrap();
731         check_added_monitors!(nodes[0], 1);
732
733         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
734         assert_eq!(events_0.len(), 1);
735         let (update_msg, commitment_signed) = match events_0[0] {
736                         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 } } => {
737                         (update_fee.as_ref(), commitment_signed)
738                 },
739                 _ => panic!("Unexpected event"),
740         };
741         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
742
743         // Generate (2) and (3):
744         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed);
745         let (revoke_msg, commitment_signed_0) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
746         check_added_monitors!(nodes[1], 1);
747
748         // Deliver (2):
749         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg);
750         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
751         check_added_monitors!(nodes[0], 1);
752
753         // Create and deliver (4)...
754         nodes[0].node.update_fee(channel_id, feerate+30).unwrap();
755         check_added_monitors!(nodes[0], 1);
756         let events_0 = nodes[0].node.get_and_clear_pending_msg_events();
757         assert_eq!(events_0.len(), 1);
758         let (update_msg, commitment_signed) = match events_0[0] {
759                         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 } } => {
760                         (update_fee.as_ref(), commitment_signed)
761                 },
762                 _ => panic!("Unexpected event"),
763         };
764
765         nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap());
766         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed);
767         check_added_monitors!(nodes[1], 1);
768         // ... creating (5)
769         let revoke_msg = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
770         // No commitment_signed so get_event_msg's assert(len == 1) passes
771
772         // Handle (3), creating (6):
773         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed_0);
774         check_added_monitors!(nodes[0], 1);
775         let revoke_msg_0 = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
776         // No commitment_signed so get_event_msg's assert(len == 1) passes
777
778         // Deliver (5):
779         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg);
780         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
781         check_added_monitors!(nodes[0], 1);
782
783         // Deliver (6), creating (7):
784         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg_0);
785         let commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
786         assert!(commitment_update.update_add_htlcs.is_empty());
787         assert!(commitment_update.update_fulfill_htlcs.is_empty());
788         assert!(commitment_update.update_fail_htlcs.is_empty());
789         assert!(commitment_update.update_fail_malformed_htlcs.is_empty());
790         assert!(commitment_update.update_fee.is_none());
791         check_added_monitors!(nodes[1], 1);
792
793         // Deliver (7)
794         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_update.commitment_signed);
795         check_added_monitors!(nodes[0], 1);
796         let revoke_msg = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
797         // No commitment_signed so get_event_msg's assert(len == 1) passes
798
799         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg);
800         check_added_monitors!(nodes[1], 1);
801         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
802
803         assert_eq!(get_feerate!(nodes[0], channel_id), feerate + 30);
804         assert_eq!(get_feerate!(nodes[1], channel_id), feerate + 30);
805         close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
806 }
807
808 #[test]
809 fn pre_funding_lock_shutdown_test() {
810         // Test sending a shutdown prior to funding_locked after funding generation
811         let chanmon_cfgs = create_chanmon_cfgs(2);
812         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
813         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
814         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
815         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 8000000, 0, InitFeatures::supported(), InitFeatures::supported());
816         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
817         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![tx.clone()]}, 1);
818         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![tx.clone()]}, 1);
819
820         nodes[0].node.close_channel(&OutPoint::new(tx.txid(), 0).to_channel_id()).unwrap();
821         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
822         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
823         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
824         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
825
826         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
827         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
828         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
829         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
830         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
831         assert!(node_0_none.is_none());
832
833         assert!(nodes[0].node.list_channels().is_empty());
834         assert!(nodes[1].node.list_channels().is_empty());
835 }
836
837 #[test]
838 fn updates_shutdown_wait() {
839         // Test sending a shutdown with outstanding updates pending
840         let chanmon_cfgs = create_chanmon_cfgs(3);
841         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
842         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
843         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
844         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
845         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
846         let route_1 = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
847         let route_2 = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
848
849         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
850
851         nodes[0].node.close_channel(&chan_1.2).unwrap();
852         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
853         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
854         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
855         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
856
857         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
858         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
859
860         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
861         unwrap_send_err!(nodes[0].node.send_payment(&route_1, payment_hash, &None), true, APIError::ChannelUnavailable {..}, {});
862         unwrap_send_err!(nodes[1].node.send_payment(&route_2, payment_hash, &None), true, APIError::ChannelUnavailable {..}, {});
863
864         assert!(nodes[2].node.claim_funds(our_payment_preimage, &None, 100_000));
865         check_added_monitors!(nodes[2], 1);
866         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
867         assert!(updates.update_add_htlcs.is_empty());
868         assert!(updates.update_fail_htlcs.is_empty());
869         assert!(updates.update_fail_malformed_htlcs.is_empty());
870         assert!(updates.update_fee.is_none());
871         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
872         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
873         check_added_monitors!(nodes[1], 1);
874         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
875         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
876
877         assert!(updates_2.update_add_htlcs.is_empty());
878         assert!(updates_2.update_fail_htlcs.is_empty());
879         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
880         assert!(updates_2.update_fee.is_none());
881         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
882         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
883         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
884
885         let events = nodes[0].node.get_and_clear_pending_events();
886         assert_eq!(events.len(), 1);
887         match events[0] {
888                 Event::PaymentSent { ref payment_preimage } => {
889                         assert_eq!(our_payment_preimage, *payment_preimage);
890                 },
891                 _ => panic!("Unexpected event"),
892         }
893
894         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
895         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
896         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
897         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
898         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
899         assert!(node_0_none.is_none());
900
901         assert!(nodes[0].node.list_channels().is_empty());
902
903         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
904         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
905         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
906         assert!(nodes[1].node.list_channels().is_empty());
907         assert!(nodes[2].node.list_channels().is_empty());
908 }
909
910 #[test]
911 fn htlc_fail_async_shutdown() {
912         // Test HTLCs fail if shutdown starts even if messages are delivered out-of-order
913         let chanmon_cfgs = create_chanmon_cfgs(3);
914         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
915         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
916         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
917         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
918         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
919
920         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
921         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
922         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
923         check_added_monitors!(nodes[0], 1);
924         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
925         assert_eq!(updates.update_add_htlcs.len(), 1);
926         assert!(updates.update_fulfill_htlcs.is_empty());
927         assert!(updates.update_fail_htlcs.is_empty());
928         assert!(updates.update_fail_malformed_htlcs.is_empty());
929         assert!(updates.update_fee.is_none());
930
931         nodes[1].node.close_channel(&chan_1.2).unwrap();
932         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
933         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
934         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
935
936         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
937         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed);
938         check_added_monitors!(nodes[1], 1);
939         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
940         commitment_signed_dance!(nodes[1], nodes[0], (), false, true, false);
941
942         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
943         assert!(updates_2.update_add_htlcs.is_empty());
944         assert!(updates_2.update_fulfill_htlcs.is_empty());
945         assert_eq!(updates_2.update_fail_htlcs.len(), 1);
946         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
947         assert!(updates_2.update_fee.is_none());
948
949         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fail_htlcs[0]);
950         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
951
952         let events = nodes[0].node.get_and_clear_pending_events();
953         assert_eq!(events.len(), 1);
954         match events[0] {
955                 Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } => {
956                         assert_eq!(our_payment_hash, *payment_hash);
957                         assert!(!rejected_by_dest);
958                 },
959                 _ => panic!("Unexpected event"),
960         }
961
962         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
963         assert_eq!(msg_events.len(), 2);
964         let node_0_closing_signed = match msg_events[0] {
965                 MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
966                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
967                         (*msg).clone()
968                 },
969                 _ => panic!("Unexpected event"),
970         };
971         match msg_events[1] {
972                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
973                         assert_eq!(msg.contents.short_channel_id, chan_1.0.contents.short_channel_id);
974                 },
975                 _ => panic!("Unexpected event"),
976         }
977
978         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
979         nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
980         let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
981         nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
982         let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
983         assert!(node_0_none.is_none());
984
985         assert!(nodes[0].node.list_channels().is_empty());
986
987         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
988         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
989         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
990         assert!(nodes[1].node.list_channels().is_empty());
991         assert!(nodes[2].node.list_channels().is_empty());
992 }
993
994 fn do_test_shutdown_rebroadcast(recv_count: u8) {
995         // Test that shutdown/closing_signed is re-sent on reconnect with a variable number of
996         // messages delivered prior to disconnect
997         let chanmon_cfgs = create_chanmon_cfgs(3);
998         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
999         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1000         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1001         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1002         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1003
1004         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
1005
1006         nodes[1].node.close_channel(&chan_1.2).unwrap();
1007         let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1008         if recv_count > 0 {
1009                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_shutdown);
1010                 let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1011                 if recv_count > 1 {
1012                         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
1013                 }
1014         }
1015
1016         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1017         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1018
1019         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1020         let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1021         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1022         let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1023
1024         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish);
1025         let node_1_2nd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1026         assert!(node_1_shutdown == node_1_2nd_shutdown);
1027
1028         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_reestablish);
1029         let node_0_2nd_shutdown = if recv_count > 0 {
1030                 let node_0_2nd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1031                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown);
1032                 node_0_2nd_shutdown
1033         } else {
1034                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1035                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_2nd_shutdown);
1036                 get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id())
1037         };
1038         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_2nd_shutdown);
1039
1040         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1041         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1042
1043         assert!(nodes[2].node.claim_funds(our_payment_preimage, &None, 100_000));
1044         check_added_monitors!(nodes[2], 1);
1045         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1046         assert!(updates.update_add_htlcs.is_empty());
1047         assert!(updates.update_fail_htlcs.is_empty());
1048         assert!(updates.update_fail_malformed_htlcs.is_empty());
1049         assert!(updates.update_fee.is_none());
1050         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1051         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1052         check_added_monitors!(nodes[1], 1);
1053         let updates_2 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1054         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
1055
1056         assert!(updates_2.update_add_htlcs.is_empty());
1057         assert!(updates_2.update_fail_htlcs.is_empty());
1058         assert!(updates_2.update_fail_malformed_htlcs.is_empty());
1059         assert!(updates_2.update_fee.is_none());
1060         assert_eq!(updates_2.update_fulfill_htlcs.len(), 1);
1061         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates_2.update_fulfill_htlcs[0]);
1062         commitment_signed_dance!(nodes[0], nodes[1], updates_2.commitment_signed, false, true);
1063
1064         let events = nodes[0].node.get_and_clear_pending_events();
1065         assert_eq!(events.len(), 1);
1066         match events[0] {
1067                 Event::PaymentSent { ref payment_preimage } => {
1068                         assert_eq!(our_payment_preimage, *payment_preimage);
1069                 },
1070                 _ => panic!("Unexpected event"),
1071         }
1072
1073         let node_0_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
1074         if recv_count > 0 {
1075                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_closing_signed);
1076                 let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
1077                 assert!(node_1_closing_signed.is_some());
1078         }
1079
1080         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1081         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1082
1083         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1084         let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1085         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1086         if recv_count == 0 {
1087                 // If all closing_signeds weren't delivered we can just resume where we left off...
1088                 let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1089
1090                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &node_1_2nd_reestablish);
1091                 let node_0_3rd_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
1092                 assert!(node_0_2nd_shutdown == node_0_3rd_shutdown);
1093
1094                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish);
1095                 let node_1_3rd_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
1096                 assert!(node_1_3rd_shutdown == node_1_2nd_shutdown);
1097
1098                 nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_3rd_shutdown);
1099                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1100
1101                 nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_1_3rd_shutdown);
1102                 let node_0_2nd_closing_signed = get_event_msg!(nodes[0], MessageSendEvent::SendClosingSigned, nodes[1].node.get_our_node_id());
1103                 assert!(node_0_closing_signed == node_0_2nd_closing_signed);
1104
1105                 nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed);
1106                 let (_, node_1_closing_signed) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
1107                 nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
1108                 let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
1109                 assert!(node_0_none.is_none());
1110         } else {
1111                 // If one node, however, received + responded with an identical closing_signed we end
1112                 // up erroring and node[0] will try to broadcast its own latest commitment transaction.
1113                 // There isn't really anything better we can do simply, but in the future we might
1114                 // explore storing a set of recently-closed channels that got disconnected during
1115                 // closing_signed and avoiding broadcasting local commitment txn for some timeout to
1116                 // give our counterparty enough time to (potentially) broadcast a cooperative closing
1117                 // transaction.
1118                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1119
1120                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_2nd_reestablish);
1121                 let msg_events = nodes[1].node.get_and_clear_pending_msg_events();
1122                 assert_eq!(msg_events.len(), 1);
1123                 if let MessageSendEvent::HandleError { ref action, .. } = msg_events[0] {
1124                         match action {
1125                                 &ErrorAction::SendErrorMessage { ref msg } => {
1126                                         nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msg);
1127                                         assert_eq!(msg.channel_id, chan_1.2);
1128                                 },
1129                                 _ => panic!("Unexpected event!"),
1130                         }
1131                 } else { panic!("Needed SendErrorMessage close"); }
1132
1133                 // get_closing_signed_broadcast usually eats the BroadcastChannelUpdate for us and
1134                 // checks it, but in this case nodes[0] didn't ever get a chance to receive a
1135                 // closing_signed so we do it ourselves
1136                 check_closed_broadcast!(nodes[0], false);
1137                 check_added_monitors!(nodes[0], 1);
1138         }
1139
1140         assert!(nodes[0].node.list_channels().is_empty());
1141
1142         assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
1143         nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
1144         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
1145         assert!(nodes[1].node.list_channels().is_empty());
1146         assert!(nodes[2].node.list_channels().is_empty());
1147 }
1148
1149 #[test]
1150 fn test_shutdown_rebroadcast() {
1151         do_test_shutdown_rebroadcast(0);
1152         do_test_shutdown_rebroadcast(1);
1153         do_test_shutdown_rebroadcast(2);
1154 }
1155
1156 #[test]
1157 fn fake_network_test() {
1158         // Simple test which builds a network of ChannelManagers, connects them to each other, and
1159         // tests that payments get routed and transactions broadcast in semi-reasonable ways.
1160         let chanmon_cfgs = create_chanmon_cfgs(4);
1161         let node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
1162         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
1163         let nodes = create_network(4, &node_cfgs, &node_chanmgrs);
1164
1165         // Create some initial channels
1166         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1167         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1168         let chan_3 = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::supported(), InitFeatures::supported());
1169
1170         // Rebalance the network a bit by relaying one payment through all the channels...
1171         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000, 8_000_000);
1172         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000, 8_000_000);
1173         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000, 8_000_000);
1174         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 8000000, 8_000_000);
1175
1176         // Send some more payments
1177         send_payment(&nodes[1], &vec!(&nodes[2], &nodes[3])[..], 1000000, 1_000_000);
1178         send_payment(&nodes[3], &vec!(&nodes[2], &nodes[1], &nodes[0])[..], 1000000, 1_000_000);
1179         send_payment(&nodes[3], &vec!(&nodes[2], &nodes[1])[..], 1000000, 1_000_000);
1180
1181         // Test failure packets
1182         let payment_hash_1 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], 1000000).1;
1183         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3])[..], payment_hash_1);
1184
1185         // Add a new channel that skips 3
1186         let chan_4 = create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::supported(), InitFeatures::supported());
1187
1188         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 1000000, 1_000_000);
1189         send_payment(&nodes[2], &vec!(&nodes[3])[..], 1000000, 1_000_000);
1190         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000, 8_000_000);
1191         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000, 8_000_000);
1192         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000, 8_000_000);
1193         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000, 8_000_000);
1194         send_payment(&nodes[1], &vec!(&nodes[3])[..], 8000000, 8_000_000);
1195
1196         // Do some rebalance loop payments, simultaneously
1197         let mut hops = Vec::with_capacity(3);
1198         hops.push(RouteHop {
1199                 pubkey: nodes[2].node.get_our_node_id(),
1200                 node_features: NodeFeatures::empty(),
1201                 short_channel_id: chan_2.0.contents.short_channel_id,
1202                 channel_features: ChannelFeatures::empty(),
1203                 fee_msat: 0,
1204                 cltv_expiry_delta: chan_3.0.contents.cltv_expiry_delta as u32
1205         });
1206         hops.push(RouteHop {
1207                 pubkey: nodes[3].node.get_our_node_id(),
1208                 node_features: NodeFeatures::empty(),
1209                 short_channel_id: chan_3.0.contents.short_channel_id,
1210                 channel_features: ChannelFeatures::empty(),
1211                 fee_msat: 0,
1212                 cltv_expiry_delta: chan_4.1.contents.cltv_expiry_delta as u32
1213         });
1214         hops.push(RouteHop {
1215                 pubkey: nodes[1].node.get_our_node_id(),
1216                 node_features: NodeFeatures::empty(),
1217                 short_channel_id: chan_4.0.contents.short_channel_id,
1218                 channel_features: ChannelFeatures::empty(),
1219                 fee_msat: 1000000,
1220                 cltv_expiry_delta: TEST_FINAL_CLTV,
1221         });
1222         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;
1223         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;
1224         let payment_preimage_1 = send_along_route(&nodes[1], Route { paths: vec![hops] }, &vec!(&nodes[2], &nodes[3], &nodes[1])[..], 1000000).0;
1225
1226         let mut hops = Vec::with_capacity(3);
1227         hops.push(RouteHop {
1228                 pubkey: nodes[3].node.get_our_node_id(),
1229                 node_features: NodeFeatures::empty(),
1230                 short_channel_id: chan_4.0.contents.short_channel_id,
1231                 channel_features: ChannelFeatures::empty(),
1232                 fee_msat: 0,
1233                 cltv_expiry_delta: chan_3.1.contents.cltv_expiry_delta as u32
1234         });
1235         hops.push(RouteHop {
1236                 pubkey: nodes[2].node.get_our_node_id(),
1237                 node_features: NodeFeatures::empty(),
1238                 short_channel_id: chan_3.0.contents.short_channel_id,
1239                 channel_features: ChannelFeatures::empty(),
1240                 fee_msat: 0,
1241                 cltv_expiry_delta: chan_2.1.contents.cltv_expiry_delta as u32
1242         });
1243         hops.push(RouteHop {
1244                 pubkey: nodes[1].node.get_our_node_id(),
1245                 node_features: NodeFeatures::empty(),
1246                 short_channel_id: chan_2.0.contents.short_channel_id,
1247                 channel_features: ChannelFeatures::empty(),
1248                 fee_msat: 1000000,
1249                 cltv_expiry_delta: TEST_FINAL_CLTV,
1250         });
1251         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;
1252         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;
1253         let payment_hash_2 = send_along_route(&nodes[1], Route { paths: vec![hops] }, &vec!(&nodes[3], &nodes[2], &nodes[1])[..], 1000000).1;
1254
1255         // Claim the rebalances...
1256         fail_payment(&nodes[1], &vec!(&nodes[3], &nodes[2], &nodes[1])[..], payment_hash_2);
1257         claim_payment(&nodes[1], &vec!(&nodes[2], &nodes[3], &nodes[1])[..], payment_preimage_1, 1_000_000);
1258
1259         // Add a duplicate new channel from 2 to 4
1260         let chan_5 = create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::supported(), InitFeatures::supported());
1261
1262         // Send some payments across both channels
1263         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1264         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1265         let payment_preimage_5 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000).0;
1266
1267
1268         route_over_limit(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], 3000000);
1269         let events = nodes[0].node.get_and_clear_pending_msg_events();
1270         assert_eq!(events.len(), 0);
1271         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over the max HTLC value in flight our peer will accept".to_string(), 1);
1272
1273         //TODO: Test that routes work again here as we've been notified that the channel is full
1274
1275         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_3, 3_000_000);
1276         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_4, 3_000_000);
1277         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[3])[..], payment_preimage_5, 3_000_000);
1278
1279         // Close down the channels...
1280         close_channel(&nodes[0], &nodes[1], &chan_1.2, chan_1.3, true);
1281         close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, false);
1282         close_channel(&nodes[2], &nodes[3], &chan_3.2, chan_3.3, true);
1283         close_channel(&nodes[1], &nodes[3], &chan_4.2, chan_4.3, false);
1284         close_channel(&nodes[1], &nodes[3], &chan_5.2, chan_5.3, false);
1285 }
1286
1287 #[test]
1288 fn holding_cell_htlc_counting() {
1289         // Tests that HTLCs in the holding cell count towards the pending HTLC limits on outbound HTLCs
1290         // to ensure we don't end up with HTLCs sitting around in our holding cell for several
1291         // commitment dance rounds.
1292         let chanmon_cfgs = create_chanmon_cfgs(3);
1293         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1294         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1295         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1296         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1297         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1298
1299         let mut payments = Vec::new();
1300         for _ in 0..::ln::channel::OUR_MAX_HTLCS {
1301                 let route = nodes[1].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 100000, TEST_FINAL_CLTV).unwrap();
1302                 let (payment_preimage, payment_hash) = get_payment_preimage_hash!(nodes[0]);
1303                 nodes[1].node.send_payment(&route, payment_hash, &None).unwrap();
1304                 payments.push((payment_preimage, payment_hash));
1305         }
1306         check_added_monitors!(nodes[1], 1);
1307
1308         let mut events = nodes[1].node.get_and_clear_pending_msg_events();
1309         assert_eq!(events.len(), 1);
1310         let initial_payment_event = SendEvent::from_event(events.pop().unwrap());
1311         assert_eq!(initial_payment_event.node_id, nodes[2].node.get_our_node_id());
1312
1313         // There is now one HTLC in an outbound commitment transaction and (OUR_MAX_HTLCS - 1) HTLCs in
1314         // the holding cell waiting on B's RAA to send. At this point we should not be able to add
1315         // another HTLC.
1316         let route = nodes[1].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 100000, TEST_FINAL_CLTV).unwrap();
1317         let (_, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1318         unwrap_send_err!(nodes[1].node.send_payment(&route, payment_hash_1, &None), true, APIError::ChannelUnavailable { err },
1319                 assert_eq!(err, "Cannot push more than their max accepted HTLCs"));
1320         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1321         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot push more than their max accepted HTLCs".to_string(), 1);
1322
1323         // This should also be true if we try to forward a payment.
1324         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 100000, TEST_FINAL_CLTV).unwrap();
1325         let (_, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1326         nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1327         check_added_monitors!(nodes[0], 1);
1328
1329         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1330         assert_eq!(events.len(), 1);
1331         let payment_event = SendEvent::from_event(events.pop().unwrap());
1332         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1333
1334         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1335         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
1336         // We have to forward pending HTLCs twice - once tries to forward the payment forward (and
1337         // fails), the second will process the resulting failure and fail the HTLC backward.
1338         expect_pending_htlcs_forwardable!(nodes[1]);
1339         expect_pending_htlcs_forwardable!(nodes[1]);
1340         check_added_monitors!(nodes[1], 1);
1341
1342         let bs_fail_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1343         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_fail_updates.update_fail_htlcs[0]);
1344         commitment_signed_dance!(nodes[0], nodes[1], bs_fail_updates.commitment_signed, false, true);
1345
1346         let events = nodes[0].node.get_and_clear_pending_msg_events();
1347         assert_eq!(events.len(), 1);
1348         match events[0] {
1349                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
1350                         assert_eq!(msg.contents.short_channel_id, chan_2.0.contents.short_channel_id);
1351                 },
1352                 _ => panic!("Unexpected event"),
1353         }
1354
1355         let events = nodes[0].node.get_and_clear_pending_events();
1356         assert_eq!(events.len(), 1);
1357         match events[0] {
1358                 Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
1359                         assert_eq!(payment_hash, payment_hash_2);
1360                         assert!(!rejected_by_dest);
1361                 },
1362                 _ => panic!("Unexpected event"),
1363         }
1364
1365         // Now forward all the pending HTLCs and claim them back
1366         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &initial_payment_event.msgs[0]);
1367         nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &initial_payment_event.commitment_msg);
1368         check_added_monitors!(nodes[2], 1);
1369
1370         let (bs_revoke_and_ack, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1371         nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
1372         check_added_monitors!(nodes[1], 1);
1373         let as_updates = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1374
1375         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_commitment_signed);
1376         check_added_monitors!(nodes[1], 1);
1377         let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
1378
1379         for ref update in as_updates.update_add_htlcs.iter() {
1380                 nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), update);
1381         }
1382         nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_updates.commitment_signed);
1383         check_added_monitors!(nodes[2], 1);
1384         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
1385         check_added_monitors!(nodes[2], 1);
1386         let (bs_revoke_and_ack, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1387
1388         nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
1389         check_added_monitors!(nodes[1], 1);
1390         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_commitment_signed);
1391         check_added_monitors!(nodes[1], 1);
1392         let as_final_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
1393
1394         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_final_raa);
1395         check_added_monitors!(nodes[2], 1);
1396
1397         expect_pending_htlcs_forwardable!(nodes[2]);
1398
1399         let events = nodes[2].node.get_and_clear_pending_events();
1400         assert_eq!(events.len(), payments.len());
1401         for (event, &(_, ref hash)) in events.iter().zip(payments.iter()) {
1402                 match event {
1403                         &Event::PaymentReceived { ref payment_hash, .. } => {
1404                                 assert_eq!(*payment_hash, *hash);
1405                         },
1406                         _ => panic!("Unexpected event"),
1407                 };
1408         }
1409
1410         for (preimage, _) in payments.drain(..) {
1411                 claim_payment(&nodes[1], &[&nodes[2]], preimage, 100_000);
1412         }
1413
1414         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000, 1_000_000);
1415 }
1416
1417 #[test]
1418 fn duplicate_htlc_test() {
1419         // Test that we accept duplicate payment_hash HTLCs across the network and that
1420         // claiming/failing them are all separate and don't affect each other
1421         let chanmon_cfgs = create_chanmon_cfgs(6);
1422         let node_cfgs = create_node_cfgs(6, &chanmon_cfgs);
1423         let node_chanmgrs = create_node_chanmgrs(6, &node_cfgs, &[None, None, None, None, None, None]);
1424         let mut nodes = create_network(6, &node_cfgs, &node_chanmgrs);
1425
1426         // Create some initial channels to route via 3 to 4/5 from 0/1/2
1427         create_announced_chan_between_nodes(&nodes, 0, 3, InitFeatures::supported(), InitFeatures::supported());
1428         create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::supported(), InitFeatures::supported());
1429         create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::supported(), InitFeatures::supported());
1430         create_announced_chan_between_nodes(&nodes, 3, 4, InitFeatures::supported(), InitFeatures::supported());
1431         create_announced_chan_between_nodes(&nodes, 3, 5, InitFeatures::supported(), InitFeatures::supported());
1432
1433         let (payment_preimage, payment_hash) = route_payment(&nodes[0], &vec!(&nodes[3], &nodes[4])[..], 1000000);
1434
1435         *nodes[0].network_payment_count.borrow_mut() -= 1;
1436         assert_eq!(route_payment(&nodes[1], &vec!(&nodes[3])[..], 1000000).0, payment_preimage);
1437
1438         *nodes[0].network_payment_count.borrow_mut() -= 1;
1439         assert_eq!(route_payment(&nodes[2], &vec!(&nodes[3], &nodes[5])[..], 1000000).0, payment_preimage);
1440
1441         claim_payment(&nodes[0], &vec!(&nodes[3], &nodes[4])[..], payment_preimage, 1_000_000);
1442         fail_payment(&nodes[2], &vec!(&nodes[3], &nodes[5])[..], payment_hash);
1443         claim_payment(&nodes[1], &vec!(&nodes[3])[..], payment_preimage, 1_000_000);
1444 }
1445
1446 #[test]
1447 fn test_duplicate_htlc_different_direction_onchain() {
1448         // Test that ChannelMonitor doesn't generate 2 preimage txn
1449         // when we have 2 HTLCs with same preimage that go across a node
1450         // in opposite directions.
1451         let chanmon_cfgs = create_chanmon_cfgs(2);
1452         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1453         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1454         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1455
1456         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1457
1458         // balancing
1459         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
1460
1461         let (payment_preimage, payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1])[..], 900_000);
1462
1463         let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 800_000, TEST_FINAL_CLTV).unwrap();
1464         send_along_route_with_hash(&nodes[1], route, &vec!(&nodes[0])[..], 800_000, payment_hash);
1465
1466         // Provide preimage to node 0 by claiming payment
1467         nodes[0].node.claim_funds(payment_preimage, &None, 800_000);
1468         check_added_monitors!(nodes[0], 1);
1469
1470         // Broadcast node 1 commitment txn
1471         let remote_txn = get_local_commitment_txn!(nodes[1], chan_1.2);
1472
1473         assert_eq!(remote_txn[0].output.len(), 4); // 1 local, 1 remote, 1 htlc inbound, 1 htlc outbound
1474         let mut has_both_htlcs = 0; // check htlcs match ones committed
1475         for outp in remote_txn[0].output.iter() {
1476                 if outp.value == 800_000 / 1000 {
1477                         has_both_htlcs += 1;
1478                 } else if outp.value == 900_000 / 1000 {
1479                         has_both_htlcs += 1;
1480                 }
1481         }
1482         assert_eq!(has_both_htlcs, 2);
1483
1484         let header = BlockHeader { version: 0x2000_0000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1485         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![remote_txn[0].clone()] }, 1);
1486         check_added_monitors!(nodes[0], 1);
1487
1488         // Check we only broadcast 1 timeout tx
1489         let claim_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
1490         let htlc_pair = if claim_txn[0].output[0].value == 800_000 / 1000 { (claim_txn[0].clone(), claim_txn[1].clone()) } else { (claim_txn[1].clone(), claim_txn[0].clone()) };
1491         assert_eq!(claim_txn.len(), 5);
1492         check_spends!(claim_txn[2], chan_1.3);
1493         check_spends!(claim_txn[3], claim_txn[2]);
1494         assert_eq!(htlc_pair.0.input.len(), 1);
1495         assert_eq!(htlc_pair.0.input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC 1 <--> 0, preimage tx
1496         check_spends!(htlc_pair.0, remote_txn[0]);
1497         assert_eq!(htlc_pair.1.input.len(), 1);
1498         assert_eq!(htlc_pair.1.input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // HTLC 0 <--> 1, timeout tx
1499         check_spends!(htlc_pair.1, remote_txn[0]);
1500
1501         let events = nodes[0].node.get_and_clear_pending_msg_events();
1502         assert_eq!(events.len(), 2);
1503         for e in events {
1504                 match e {
1505                         MessageSendEvent::BroadcastChannelUpdate { .. } => {},
1506                         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, .. } } => {
1507                                 assert!(update_add_htlcs.is_empty());
1508                                 assert!(update_fail_htlcs.is_empty());
1509                                 assert_eq!(update_fulfill_htlcs.len(), 1);
1510                                 assert!(update_fail_malformed_htlcs.is_empty());
1511                                 assert_eq!(nodes[1].node.get_our_node_id(), *node_id);
1512                         },
1513                         _ => panic!("Unexpected event"),
1514                 }
1515         }
1516 }
1517
1518 fn do_channel_reserve_test(test_recv: bool) {
1519
1520         let chanmon_cfgs = create_chanmon_cfgs(3);
1521         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1522         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1523         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1524         let chan_1 = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1900, 1001, InitFeatures::supported(), InitFeatures::supported());
1525         let chan_2 = create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 1900, 1001, InitFeatures::supported(), InitFeatures::supported());
1526
1527         let mut stat01 = get_channel_value_stat!(nodes[0], chan_1.2);
1528         let mut stat11 = get_channel_value_stat!(nodes[1], chan_1.2);
1529
1530         let mut stat12 = get_channel_value_stat!(nodes[1], chan_2.2);
1531         let mut stat22 = get_channel_value_stat!(nodes[2], chan_2.2);
1532
1533         macro_rules! get_route_and_payment_hash {
1534                 ($recv_value: expr) => {{
1535                         let route = nodes[0].router.get_route(&nodes.last().unwrap().node.get_our_node_id(), None, &Vec::new(), $recv_value, TEST_FINAL_CLTV).unwrap();
1536                         let (payment_preimage, payment_hash) = get_payment_preimage_hash!(nodes[0]);
1537                         (route, payment_hash, payment_preimage)
1538                 }}
1539         };
1540
1541         macro_rules! expect_forward {
1542                 ($node: expr) => {{
1543                         let mut events = $node.node.get_and_clear_pending_msg_events();
1544                         assert_eq!(events.len(), 1);
1545                         check_added_monitors!($node, 1);
1546                         let payment_event = SendEvent::from_event(events.remove(0));
1547                         payment_event
1548                 }}
1549         }
1550
1551         let feemsat = 239; // somehow we know?
1552         let total_fee_msat = (nodes.len() - 2) as u64 * 239;
1553
1554         let recv_value_0 = stat01.their_max_htlc_value_in_flight_msat - total_fee_msat;
1555
1556         // attempt to send amt_msat > their_max_htlc_value_in_flight_msat
1557         {
1558                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_0 + 1);
1559                 assert!(route.paths[0].iter().rev().skip(1).all(|h| h.fee_msat == feemsat));
1560                 unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
1561                         assert_eq!(err, "Cannot send value that would put us over the max HTLC value in flight our peer will accept"));
1562                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1563                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over the max HTLC value in flight our peer will accept".to_string(), 1);
1564         }
1565
1566         let mut htlc_id = 0;
1567         // channel reserve is bigger than their_max_htlc_value_in_flight_msat so loop to deplete
1568         // nodes[0]'s wealth
1569         loop {
1570                 let amt_msat = recv_value_0 + total_fee_msat;
1571                 if stat01.value_to_self_msat - amt_msat < stat01.channel_reserve_msat {
1572                         break;
1573                 }
1574                 send_payment(&nodes[0], &vec![&nodes[1], &nodes[2]][..], recv_value_0, recv_value_0);
1575                 htlc_id += 1;
1576
1577                 let (stat01_, stat11_, stat12_, stat22_) = (
1578                         get_channel_value_stat!(nodes[0], chan_1.2),
1579                         get_channel_value_stat!(nodes[1], chan_1.2),
1580                         get_channel_value_stat!(nodes[1], chan_2.2),
1581                         get_channel_value_stat!(nodes[2], chan_2.2),
1582                 );
1583
1584                 assert_eq!(stat01_.value_to_self_msat, stat01.value_to_self_msat - amt_msat);
1585                 assert_eq!(stat11_.value_to_self_msat, stat11.value_to_self_msat + amt_msat);
1586                 assert_eq!(stat12_.value_to_self_msat, stat12.value_to_self_msat - (amt_msat - feemsat));
1587                 assert_eq!(stat22_.value_to_self_msat, stat22.value_to_self_msat + (amt_msat - feemsat));
1588                 stat01 = stat01_; stat11 = stat11_; stat12 = stat12_; stat22 = stat22_;
1589         }
1590
1591         {
1592                 let recv_value = stat01.value_to_self_msat - stat01.channel_reserve_msat - total_fee_msat;
1593                 // attempt to get channel_reserve violation
1594                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value + 1);
1595                 unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
1596                         assert_eq!(err, "Cannot send value that would put us over their reserve value"));
1597                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1598                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over their reserve value".to_string(), 1);
1599         }
1600
1601         // adding pending output
1602         let recv_value_1 = (stat01.value_to_self_msat - stat01.channel_reserve_msat - total_fee_msat)/2;
1603         let amt_msat_1 = recv_value_1 + total_fee_msat;
1604
1605         let (route_1, our_payment_hash_1, our_payment_preimage_1) = get_route_and_payment_hash!(recv_value_1);
1606         let payment_event_1 = {
1607                 nodes[0].node.send_payment(&route_1, our_payment_hash_1, &None).unwrap();
1608                 check_added_monitors!(nodes[0], 1);
1609
1610                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1611                 assert_eq!(events.len(), 1);
1612                 SendEvent::from_event(events.remove(0))
1613         };
1614         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event_1.msgs[0]);
1615
1616         // channel reserve test with htlc pending output > 0
1617         let recv_value_2 = stat01.value_to_self_msat - amt_msat_1 - stat01.channel_reserve_msat - total_fee_msat;
1618         {
1619                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_2 + 1);
1620                 unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
1621                         assert_eq!(err, "Cannot send value that would put us over their reserve value"));
1622                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1623                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over their reserve value".to_string(), 2);
1624         }
1625
1626         {
1627                 // test channel_reserve test on nodes[1] side
1628                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_2 + 1);
1629
1630                 // Need to manually create update_add_htlc message to go around the channel reserve check in send_htlc()
1631                 let secp_ctx = Secp256k1::new();
1632                 let session_priv = SecretKey::from_slice(&{
1633                         let mut session_key = [0; 32];
1634                         let mut rng = thread_rng();
1635                         rng.fill_bytes(&mut session_key);
1636                         session_key
1637                 }).expect("RNG is bad!");
1638
1639                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
1640                 let onion_keys = onion_utils::construct_onion_keys(&secp_ctx, &route.paths[0], &session_priv).unwrap();
1641                 let (onion_payloads, htlc_msat, htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], recv_value_2 + 1, &None, cur_height).unwrap();
1642                 let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &our_payment_hash);
1643                 let msg = msgs::UpdateAddHTLC {
1644                         channel_id: chan_1.2,
1645                         htlc_id,
1646                         amount_msat: htlc_msat,
1647                         payment_hash: our_payment_hash,
1648                         cltv_expiry: htlc_cltv,
1649                         onion_routing_packet: onion_packet,
1650                 };
1651
1652                 if test_recv {
1653                         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg);
1654                         // If we send a garbage message, the channel should get closed, making the rest of this test case fail.
1655                         assert_eq!(nodes[1].node.list_channels().len(), 1);
1656                         assert_eq!(nodes[1].node.list_channels().len(), 1);
1657                         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
1658                         assert_eq!(err_msg.data, "Remote HTLC add would put them over their reserve value");
1659                         check_added_monitors!(nodes[1], 1);
1660                         return;
1661                 }
1662         }
1663
1664         // split the rest to test holding cell
1665         let recv_value_21 = recv_value_2/2;
1666         let recv_value_22 = recv_value_2 - recv_value_21 - total_fee_msat;
1667         {
1668                 let stat = get_channel_value_stat!(nodes[0], chan_1.2);
1669                 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);
1670         }
1671
1672         // now see if they go through on both sides
1673         let (route_21, our_payment_hash_21, our_payment_preimage_21) = get_route_and_payment_hash!(recv_value_21);
1674         // but this will stuck in the holding cell
1675         nodes[0].node.send_payment(&route_21, our_payment_hash_21, &None).unwrap();
1676         check_added_monitors!(nodes[0], 0);
1677         let events = nodes[0].node.get_and_clear_pending_events();
1678         assert_eq!(events.len(), 0);
1679
1680         // test with outbound holding cell amount > 0
1681         {
1682                 let (route, our_payment_hash, _) = get_route_and_payment_hash!(recv_value_22+1);
1683                 unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
1684                         assert_eq!(err, "Cannot send value that would put us over their reserve value"));
1685                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1686                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over their reserve value".to_string(), 3);
1687         }
1688
1689         let (route_22, our_payment_hash_22, our_payment_preimage_22) = get_route_and_payment_hash!(recv_value_22);
1690         // this will also stuck in the holding cell
1691         nodes[0].node.send_payment(&route_22, our_payment_hash_22, &None).unwrap();
1692         check_added_monitors!(nodes[0], 0);
1693         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1694         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1695
1696         // flush the pending htlc
1697         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event_1.commitment_msg);
1698         let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1699         check_added_monitors!(nodes[1], 1);
1700
1701         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_revoke_and_ack);
1702         check_added_monitors!(nodes[0], 1);
1703         let commitment_update_2 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1704
1705         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_commitment_signed);
1706         let bs_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1707         // No commitment_signed so get_event_msg's assert(len == 1) passes
1708         check_added_monitors!(nodes[0], 1);
1709
1710         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_revoke_and_ack);
1711         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1712         check_added_monitors!(nodes[1], 1);
1713
1714         expect_pending_htlcs_forwardable!(nodes[1]);
1715
1716         let ref payment_event_11 = expect_forward!(nodes[1]);
1717         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_11.msgs[0]);
1718         commitment_signed_dance!(nodes[2], nodes[1], payment_event_11.commitment_msg, false);
1719
1720         expect_pending_htlcs_forwardable!(nodes[2]);
1721         expect_payment_received!(nodes[2], our_payment_hash_1, recv_value_1);
1722
1723         // flush the htlcs in the holding cell
1724         assert_eq!(commitment_update_2.update_add_htlcs.len(), 2);
1725         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &commitment_update_2.update_add_htlcs[0]);
1726         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &commitment_update_2.update_add_htlcs[1]);
1727         commitment_signed_dance!(nodes[1], nodes[0], &commitment_update_2.commitment_signed, false);
1728         expect_pending_htlcs_forwardable!(nodes[1]);
1729
1730         let ref payment_event_3 = expect_forward!(nodes[1]);
1731         assert_eq!(payment_event_3.msgs.len(), 2);
1732         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_3.msgs[0]);
1733         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event_3.msgs[1]);
1734
1735         commitment_signed_dance!(nodes[2], nodes[1], &payment_event_3.commitment_msg, false);
1736         expect_pending_htlcs_forwardable!(nodes[2]);
1737
1738         let events = nodes[2].node.get_and_clear_pending_events();
1739         assert_eq!(events.len(), 2);
1740         match events[0] {
1741                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
1742                         assert_eq!(our_payment_hash_21, *payment_hash);
1743                         assert_eq!(*payment_secret, None);
1744                         assert_eq!(recv_value_21, amt);
1745                 },
1746                 _ => panic!("Unexpected event"),
1747         }
1748         match events[1] {
1749                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
1750                         assert_eq!(our_payment_hash_22, *payment_hash);
1751                         assert_eq!(None, *payment_secret);
1752                         assert_eq!(recv_value_22, amt);
1753                 },
1754                 _ => panic!("Unexpected event"),
1755         }
1756
1757         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_1, recv_value_1);
1758         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_21, recv_value_21);
1759         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), our_payment_preimage_22, recv_value_22);
1760
1761         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);
1762         let stat0 = get_channel_value_stat!(nodes[0], chan_1.2);
1763         assert_eq!(stat0.value_to_self_msat, expected_value_to_self);
1764         assert_eq!(stat0.value_to_self_msat, stat0.channel_reserve_msat);
1765
1766         let stat2 = get_channel_value_stat!(nodes[2], chan_2.2);
1767         assert_eq!(stat2.value_to_self_msat, stat22.value_to_self_msat + recv_value_1 + recv_value_21 + recv_value_22);
1768 }
1769
1770 #[test]
1771 fn channel_reserve_test() {
1772         do_channel_reserve_test(false);
1773         do_channel_reserve_test(true);
1774 }
1775
1776 #[test]
1777 fn channel_reserve_in_flight_removes() {
1778         // In cases where one side claims an HTLC, it thinks it has additional available funds that it
1779         // can send to its counterparty, but due to update ordering, the other side may not yet have
1780         // considered those HTLCs fully removed.
1781         // This tests that we don't count HTLCs which will not be included in the next remote
1782         // commitment transaction towards the reserve value (as it implies no commitment transaction
1783         // will be generated which violates the remote reserve value).
1784         // This was broken previously, and discovered by the chanmon_fail_consistency fuzz test.
1785         // To test this we:
1786         //  * route two HTLCs from A to B (note that, at a high level, this test is checking that, when
1787         //    you consider the values of both of these HTLCs, B may not send an HTLC back to A, but if
1788         //    you only consider the value of the first HTLC, it may not),
1789         //  * start routing a third HTLC from A to B,
1790         //  * claim the first two HTLCs (though B will generate an update_fulfill for one, and put
1791         //    the other claim in its holding cell, as it immediately goes into AwaitingRAA),
1792         //  * deliver the first fulfill from B
1793         //  * deliver the update_add and an RAA from A, resulting in B freeing the second holding cell
1794         //    claim,
1795         //  * deliver A's response CS and RAA.
1796         //    This results in A having the second HTLC in AwaitingRemovedRemoteRevoke, but B having
1797         //    removed it fully. B now has the push_msat plus the first two HTLCs in value.
1798         //  * Now B happily sends another HTLC, potentially violating its reserve value from A's point
1799         //    of view (if A counts the AwaitingRemovedRemoteRevoke HTLC).
1800         let chanmon_cfgs = create_chanmon_cfgs(2);
1801         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1802         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1803         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1804         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1805
1806         let b_chan_values = get_channel_value_stat!(nodes[1], chan_1.2);
1807         // Route the first two HTLCs.
1808         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], b_chan_values.channel_reserve_msat - b_chan_values.value_to_self_msat - 10000);
1809         let (payment_preimage_2, _) = route_payment(&nodes[0], &[&nodes[1]], 20000);
1810
1811         // Start routing the third HTLC (this is just used to get everyone in the right state).
1812         let (payment_preimage_3, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
1813         let send_1 = {
1814                 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
1815                 nodes[0].node.send_payment(&route, payment_hash_3, &None).unwrap();
1816                 check_added_monitors!(nodes[0], 1);
1817                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1818                 assert_eq!(events.len(), 1);
1819                 SendEvent::from_event(events.remove(0))
1820         };
1821
1822         // Now claim both of the first two HTLCs on B's end, putting B in AwaitingRAA and generating an
1823         // initial fulfill/CS.
1824         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, b_chan_values.channel_reserve_msat - b_chan_values.value_to_self_msat - 10000));
1825         check_added_monitors!(nodes[1], 1);
1826         let bs_removes = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1827
1828         // This claim goes in B's holding cell, allowing us to have a pending B->A RAA which does not
1829         // remove the second HTLC when we send the HTLC back from B to A.
1830         assert!(nodes[1].node.claim_funds(payment_preimage_2, &None, 20000));
1831         check_added_monitors!(nodes[1], 1);
1832         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1833
1834         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_removes.update_fulfill_htlcs[0]);
1835         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_removes.commitment_signed);
1836         check_added_monitors!(nodes[0], 1);
1837         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1838         expect_payment_sent!(nodes[0], payment_preimage_1);
1839
1840         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_1.msgs[0]);
1841         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_1.commitment_msg);
1842         check_added_monitors!(nodes[1], 1);
1843         // B is already AwaitingRAA, so cant generate a CS here
1844         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1845
1846         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1847         check_added_monitors!(nodes[1], 1);
1848         let bs_cs = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1849
1850         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1851         check_added_monitors!(nodes[0], 1);
1852         let as_cs = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1853
1854         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_cs.commitment_signed);
1855         check_added_monitors!(nodes[1], 1);
1856         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1857
1858         // The second HTLCis removed, but as A is in AwaitingRAA it can't generate a CS here, so the
1859         // RAA that B generated above doesn't fully resolve the second HTLC from A's point of view.
1860         // However, the RAA A generates here *does* fully resolve the HTLC from B's point of view (as A
1861         // can no longer broadcast a commitment transaction with it and B has the preimage so can go
1862         // on-chain as necessary).
1863         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_cs.update_fulfill_htlcs[0]);
1864         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs.commitment_signed);
1865         check_added_monitors!(nodes[0], 1);
1866         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1867         expect_payment_sent!(nodes[0], payment_preimage_2);
1868
1869         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1870         check_added_monitors!(nodes[1], 1);
1871         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1872
1873         expect_pending_htlcs_forwardable!(nodes[1]);
1874         expect_payment_received!(nodes[1], payment_hash_3, 100000);
1875
1876         // Note that as this RAA was generated before the delivery of the update_fulfill it shouldn't
1877         // resolve the second HTLC from A's point of view.
1878         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1879         check_added_monitors!(nodes[0], 1);
1880         let as_cs = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1881
1882         // Now that B doesn't have the second RAA anymore, but A still does, send a payment from B back
1883         // to A to ensure that A doesn't count the almost-removed HTLC in update_add processing.
1884         let (payment_preimage_4, payment_hash_4) = get_payment_preimage_hash!(nodes[1]);
1885         let send_2 = {
1886                 let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &[], 10000, TEST_FINAL_CLTV).unwrap();
1887                 nodes[1].node.send_payment(&route, payment_hash_4, &None).unwrap();
1888                 check_added_monitors!(nodes[1], 1);
1889                 let mut events = nodes[1].node.get_and_clear_pending_msg_events();
1890                 assert_eq!(events.len(), 1);
1891                 SendEvent::from_event(events.remove(0))
1892         };
1893
1894         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_2.msgs[0]);
1895         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_2.commitment_msg);
1896         check_added_monitors!(nodes[0], 1);
1897         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1898
1899         // Now just resolve all the outstanding messages/HTLCs for completeness...
1900
1901         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_cs.commitment_signed);
1902         check_added_monitors!(nodes[1], 1);
1903         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1904
1905         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1906         check_added_monitors!(nodes[1], 1);
1907
1908         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1909         check_added_monitors!(nodes[0], 1);
1910         let as_cs = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1911
1912         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_cs.commitment_signed);
1913         check_added_monitors!(nodes[1], 1);
1914         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1915
1916         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1917         check_added_monitors!(nodes[0], 1);
1918
1919         expect_pending_htlcs_forwardable!(nodes[0]);
1920         expect_payment_received!(nodes[0], payment_hash_4, 10000);
1921
1922         claim_payment(&nodes[1], &[&nodes[0]], payment_preimage_4, 10_000);
1923         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_3, 100_000);
1924 }
1925
1926 #[test]
1927 fn channel_monitor_network_test() {
1928         // Simple test which builds a network of ChannelManagers, connects them to each other, and
1929         // tests that ChannelMonitor is able to recover from various states.
1930         let chanmon_cfgs = create_chanmon_cfgs(5);
1931         let node_cfgs = create_node_cfgs(5, &chanmon_cfgs);
1932         let node_chanmgrs = create_node_chanmgrs(5, &node_cfgs, &[None, None, None, None, None]);
1933         let nodes = create_network(5, &node_cfgs, &node_chanmgrs);
1934
1935         // Create some initial channels
1936         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1937         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1938         let chan_3 = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::supported(), InitFeatures::supported());
1939         let chan_4 = create_announced_chan_between_nodes(&nodes, 3, 4, InitFeatures::supported(), InitFeatures::supported());
1940
1941         // Rebalance the network a bit by relaying one payment through all the channels...
1942         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000, 8_000_000);
1943         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000, 8_000_000);
1944         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000, 8_000_000);
1945         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2], &nodes[3], &nodes[4])[..], 8000000, 8_000_000);
1946
1947         // Simple case with no pending HTLCs:
1948         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), true);
1949         check_added_monitors!(nodes[1], 1);
1950         {
1951                 let mut node_txn = test_txn_broadcast(&nodes[1], &chan_1, None, HTLCType::NONE);
1952                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1953                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![node_txn.drain(..).next().unwrap()] }, 1);
1954                 check_added_monitors!(nodes[0], 1);
1955                 test_txn_broadcast(&nodes[0], &chan_1, None, HTLCType::NONE);
1956         }
1957         get_announce_close_broadcast_events(&nodes, 0, 1);
1958         assert_eq!(nodes[0].node.list_channels().len(), 0);
1959         assert_eq!(nodes[1].node.list_channels().len(), 1);
1960
1961         // One pending HTLC is discarded by the force-close:
1962         let payment_preimage_1 = route_payment(&nodes[1], &vec!(&nodes[2], &nodes[3])[..], 3000000).0;
1963
1964         // Simple case of one pending HTLC to HTLC-Timeout
1965         nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), true);
1966         check_added_monitors!(nodes[1], 1);
1967         {
1968                 let mut node_txn = test_txn_broadcast(&nodes[1], &chan_2, None, HTLCType::TIMEOUT);
1969                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
1970                 nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![node_txn.drain(..).next().unwrap()] }, 1);
1971                 check_added_monitors!(nodes[2], 1);
1972                 test_txn_broadcast(&nodes[2], &chan_2, None, HTLCType::NONE);
1973         }
1974         get_announce_close_broadcast_events(&nodes, 1, 2);
1975         assert_eq!(nodes[1].node.list_channels().len(), 0);
1976         assert_eq!(nodes[2].node.list_channels().len(), 1);
1977
1978         macro_rules! claim_funds {
1979                 ($node: expr, $prev_node: expr, $preimage: expr, $amount: expr) => {
1980                         {
1981                                 assert!($node.node.claim_funds($preimage, &None, $amount));
1982                                 check_added_monitors!($node, 1);
1983
1984                                 let events = $node.node.get_and_clear_pending_msg_events();
1985                                 assert_eq!(events.len(), 1);
1986                                 match events[0] {
1987                                         MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fail_htlcs, .. } } => {
1988                                                 assert!(update_add_htlcs.is_empty());
1989                                                 assert!(update_fail_htlcs.is_empty());
1990                                                 assert_eq!(*node_id, $prev_node.node.get_our_node_id());
1991                                         },
1992                                         _ => panic!("Unexpected event"),
1993                                 };
1994                         }
1995                 }
1996         }
1997
1998         // nodes[3] gets the preimage, but nodes[2] already disconnected, resulting in a nodes[2]
1999         // HTLC-Timeout and a nodes[3] claim against it (+ its own announces)
2000         nodes[2].node.peer_disconnected(&nodes[3].node.get_our_node_id(), true);
2001         check_added_monitors!(nodes[2], 1);
2002         let node2_commitment_txid;
2003         {
2004                 let node_txn = test_txn_broadcast(&nodes[2], &chan_3, None, HTLCType::TIMEOUT);
2005                 node2_commitment_txid = node_txn[0].txid();
2006
2007                 // Claim the payment on nodes[3], giving it knowledge of the preimage
2008                 claim_funds!(nodes[3], nodes[2], payment_preimage_1, 3_000_000);
2009
2010                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2011                 nodes[3].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone()] }, 1);
2012                 check_added_monitors!(nodes[3], 1);
2013
2014                 check_preimage_claim(&nodes[3], &node_txn);
2015         }
2016         get_announce_close_broadcast_events(&nodes, 2, 3);
2017         assert_eq!(nodes[2].node.list_channels().len(), 0);
2018         assert_eq!(nodes[3].node.list_channels().len(), 1);
2019
2020         { // Cheat and reset nodes[4]'s height to 1
2021                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2022                 nodes[4].block_notifier.block_connected(&Block { header, txdata: vec![] }, 1);
2023         }
2024
2025         assert_eq!(nodes[3].node.latest_block_height.load(Ordering::Acquire), 1);
2026         assert_eq!(nodes[4].node.latest_block_height.load(Ordering::Acquire), 1);
2027         // One pending HTLC to time out:
2028         let payment_preimage_2 = route_payment(&nodes[3], &vec!(&nodes[4])[..], 3000000).0;
2029         // CLTV expires at TEST_FINAL_CLTV + 1 (current height) + 1 (added in send_payment for
2030         // buffer space).
2031
2032         {
2033                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2034                 nodes[3].block_notifier.block_connected_checked(&header, 2, &Vec::new()[..], &[0; 0]);
2035                 for i in 3..TEST_FINAL_CLTV + 2 + LATENCY_GRACE_PERIOD_BLOCKS + 1 {
2036                         header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2037                         nodes[3].block_notifier.block_connected_checked(&header, i, &Vec::new()[..], &[0; 0]);
2038                 }
2039                 check_added_monitors!(nodes[3], 1);
2040
2041                 // Clear bumped claiming txn spending node 2 commitment tx. Bumped txn are generated after reaching some height timer.
2042                 {
2043                         let mut node_txn = nodes[3].tx_broadcaster.txn_broadcasted.lock().unwrap();
2044                         node_txn.retain(|tx| {
2045                                 if tx.input[0].previous_output.txid == node2_commitment_txid {
2046                                         false
2047                                 } else { true }
2048                         });
2049                 }
2050
2051                 let node_txn = test_txn_broadcast(&nodes[3], &chan_4, None, HTLCType::TIMEOUT);
2052
2053                 // Claim the payment on nodes[4], giving it knowledge of the preimage
2054                 claim_funds!(nodes[4], nodes[3], payment_preimage_2, 3_000_000);
2055
2056                 header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2057
2058                 nodes[4].block_notifier.block_connected_checked(&header, 2, &Vec::new()[..], &[0; 0]);
2059                 for i in 3..TEST_FINAL_CLTV + 2 - CLTV_CLAIM_BUFFER + 1 {
2060                         header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2061                         nodes[4].block_notifier.block_connected_checked(&header, i, &Vec::new()[..], &[0; 0]);
2062                 }
2063
2064                 check_added_monitors!(nodes[4], 1);
2065                 test_txn_broadcast(&nodes[4], &chan_4, None, HTLCType::SUCCESS);
2066
2067                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2068                 nodes[4].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone()] }, TEST_FINAL_CLTV - 5);
2069
2070                 check_preimage_claim(&nodes[4], &node_txn);
2071         }
2072         get_announce_close_broadcast_events(&nodes, 3, 4);
2073         assert_eq!(nodes[3].node.list_channels().len(), 0);
2074         assert_eq!(nodes[4].node.list_channels().len(), 0);
2075 }
2076
2077 #[test]
2078 fn test_justice_tx() {
2079         // Test justice txn built on revoked HTLC-Success tx, against both sides
2080         let mut alice_config = UserConfig::default();
2081         alice_config.channel_options.announced_channel = true;
2082         alice_config.peer_channel_config_limits.force_announced_channel_preference = false;
2083         alice_config.own_channel_config.our_to_self_delay = 6 * 24 * 5;
2084         let mut bob_config = UserConfig::default();
2085         bob_config.channel_options.announced_channel = true;
2086         bob_config.peer_channel_config_limits.force_announced_channel_preference = false;
2087         bob_config.own_channel_config.our_to_self_delay = 6 * 24 * 3;
2088         let user_cfgs = [Some(alice_config), Some(bob_config)];
2089         let chanmon_cfgs = create_chanmon_cfgs(2);
2090         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
2091         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &user_cfgs);
2092         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2093         // Create some new channels:
2094         let chan_5 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2095
2096         // A pending HTLC which will be revoked:
2097         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
2098         // Get the will-be-revoked local txn from nodes[0]
2099         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_5.2);
2100         assert_eq!(revoked_local_txn.len(), 2); // First commitment tx, then HTLC tx
2101         assert_eq!(revoked_local_txn[0].input.len(), 1);
2102         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_5.3.txid());
2103         assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
2104         assert_eq!(revoked_local_txn[1].input.len(), 1);
2105         assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
2106         assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
2107         // Revoke the old state
2108         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3, 3_000_000);
2109
2110         {
2111                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2112                 nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2113                 {
2114                         let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2115                         assert_eq!(node_txn.len(), 2); // ChannelMonitor: penalty tx, ChannelManager: local commitment tx
2116                         assert_eq!(node_txn[0].input.len(), 2); // We should claim the revoked output and the HTLC output
2117
2118                         check_spends!(node_txn[0], revoked_local_txn[0]);
2119                         node_txn.swap_remove(0);
2120                         node_txn.truncate(1);
2121                 }
2122                 check_added_monitors!(nodes[1], 1);
2123                 test_txn_broadcast(&nodes[1], &chan_5, None, HTLCType::NONE);
2124
2125                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2126                 // Verify broadcast of revoked HTLC-timeout
2127                 let node_txn = test_txn_broadcast(&nodes[0], &chan_5, Some(revoked_local_txn[0].clone()), HTLCType::TIMEOUT);
2128                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2129                 check_added_monitors!(nodes[0], 1);
2130                 // Broadcast revoked HTLC-timeout on node 1
2131                 nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[1].clone()] }, 1);
2132                 test_revoked_htlc_claim_txn_broadcast(&nodes[1], node_txn[1].clone(), revoked_local_txn[0].clone());
2133         }
2134         get_announce_close_broadcast_events(&nodes, 0, 1);
2135
2136         assert_eq!(nodes[0].node.list_channels().len(), 0);
2137         assert_eq!(nodes[1].node.list_channels().len(), 0);
2138
2139         // We test justice_tx build by A on B's revoked HTLC-Success tx
2140         // Create some new channels:
2141         let chan_6 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2142         {
2143                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2144                 node_txn.clear();
2145         }
2146
2147         // A pending HTLC which will be revoked:
2148         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
2149         // Get the will-be-revoked local txn from B
2150         let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan_6.2);
2151         assert_eq!(revoked_local_txn.len(), 1); // Only commitment tx
2152         assert_eq!(revoked_local_txn[0].input.len(), 1);
2153         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_6.3.txid());
2154         assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to A are present
2155         // Revoke the old state
2156         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_4, 3_000_000);
2157         {
2158                 let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2159                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2160                 {
2161                         let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
2162                         assert_eq!(node_txn.len(), 2); //ChannelMonitor: penalty tx, ChannelManager: local commitment tx
2163                         assert_eq!(node_txn[0].input.len(), 1); // We claim the received HTLC output
2164
2165                         check_spends!(node_txn[0], revoked_local_txn[0]);
2166                         node_txn.swap_remove(0);
2167                 }
2168                 check_added_monitors!(nodes[0], 1);
2169                 test_txn_broadcast(&nodes[0], &chan_6, None, HTLCType::NONE);
2170
2171                 nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2172                 let node_txn = test_txn_broadcast(&nodes[1], &chan_6, Some(revoked_local_txn[0].clone()), HTLCType::SUCCESS);
2173                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2174                 check_added_monitors!(nodes[1], 1);
2175                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[1].clone()] }, 1);
2176                 test_revoked_htlc_claim_txn_broadcast(&nodes[0], node_txn[1].clone(), revoked_local_txn[0].clone());
2177         }
2178         get_announce_close_broadcast_events(&nodes, 0, 1);
2179         assert_eq!(nodes[0].node.list_channels().len(), 0);
2180         assert_eq!(nodes[1].node.list_channels().len(), 0);
2181 }
2182
2183 #[test]
2184 fn revoked_output_claim() {
2185         // Simple test to ensure a node will claim a revoked output when a stale remote commitment
2186         // transaction is broadcast by its counterparty
2187         let chanmon_cfgs = create_chanmon_cfgs(2);
2188         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
2189         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
2190         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2191         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2192         // node[0] is gonna to revoke an old state thus node[1] should be able to claim the revoked output
2193         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
2194         assert_eq!(revoked_local_txn.len(), 1);
2195         // Only output is the full channel value back to nodes[0]:
2196         assert_eq!(revoked_local_txn[0].output.len(), 1);
2197         // Send a payment through, updating everyone's latest commitment txn
2198         send_payment(&nodes[0], &vec!(&nodes[1])[..], 5000000, 5_000_000);
2199
2200         // Inform nodes[1] that nodes[0] broadcast a stale tx
2201         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2202         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2203         check_added_monitors!(nodes[1], 1);
2204         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2205         assert_eq!(node_txn.len(), 2); // ChannelMonitor: justice tx against revoked to_local output, ChannelManager: local commitment tx
2206
2207         check_spends!(node_txn[0], revoked_local_txn[0]);
2208         check_spends!(node_txn[1], chan_1.3);
2209
2210         // Inform nodes[0] that a watchtower cheated on its behalf, so it will force-close the chan
2211         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2212         get_announce_close_broadcast_events(&nodes, 0, 1);
2213         check_added_monitors!(nodes[0], 1)
2214 }
2215
2216 #[test]
2217 fn claim_htlc_outputs_shared_tx() {
2218         // Node revoked old state, htlcs haven't time out yet, claim them in shared justice tx
2219         let chanmon_cfgs = create_chanmon_cfgs(2);
2220         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
2221         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
2222         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2223
2224         // Create some new channel:
2225         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2226
2227         // Rebalance the network to generate htlc in the two directions
2228         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
2229         // 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
2230         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
2231         let (_payment_preimage_2, payment_hash_2) = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000);
2232
2233         // Get the will-be-revoked local txn from node[0]
2234         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
2235         assert_eq!(revoked_local_txn.len(), 2); // commitment tx + 1 HTLC-Timeout tx
2236         assert_eq!(revoked_local_txn[0].input.len(), 1);
2237         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
2238         assert_eq!(revoked_local_txn[1].input.len(), 1);
2239         assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
2240         assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
2241         check_spends!(revoked_local_txn[1], revoked_local_txn[0]);
2242
2243         //Revoke the old state
2244         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_1, 3_000_000);
2245
2246         {
2247                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2248                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2249                 check_added_monitors!(nodes[0], 1);
2250                 nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2251                 check_added_monitors!(nodes[1], 1);
2252                 connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
2253
2254                 let events = nodes[1].node.get_and_clear_pending_events();
2255                 assert_eq!(events.len(), 1);
2256                 match events[0] {
2257                         Event::PaymentFailed { payment_hash, .. } => {
2258                                 assert_eq!(payment_hash, payment_hash_2);
2259                         },
2260                         _ => panic!("Unexpected event"),
2261                 }
2262
2263                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2264                 assert_eq!(node_txn.len(), 3); // ChannelMonitor: penalty tx, ChannelManager: local commitment + HTLC-timeout
2265
2266                 assert_eq!(node_txn[0].input.len(), 3); // Claim the revoked output + both revoked HTLC outputs
2267                 check_spends!(node_txn[0], revoked_local_txn[0]);
2268
2269                 let mut witness_lens = BTreeSet::new();
2270                 witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len());
2271                 witness_lens.insert(node_txn[0].input[1].witness.last().unwrap().len());
2272                 witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
2273                 assert_eq!(witness_lens.len(), 3);
2274                 assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
2275                 assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
2276                 assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
2277
2278                 // Next nodes[1] broadcasts its current local tx state:
2279                 assert_eq!(node_txn[1].input.len(), 1);
2280                 assert_eq!(node_txn[1].input[0].previous_output.txid, chan_1.3.txid()); //Spending funding tx unique txouput, tx broadcasted by ChannelManager
2281
2282                 assert_eq!(node_txn[2].input.len(), 1);
2283                 let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
2284                 assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
2285                 assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
2286                 assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
2287                 assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
2288         }
2289         get_announce_close_broadcast_events(&nodes, 0, 1);
2290         assert_eq!(nodes[0].node.list_channels().len(), 0);
2291         assert_eq!(nodes[1].node.list_channels().len(), 0);
2292 }
2293
2294 #[test]
2295 fn claim_htlc_outputs_single_tx() {
2296         // Node revoked old state, htlcs have timed out, claim each of them in separated justice tx
2297         let chanmon_cfgs = create_chanmon_cfgs(2);
2298         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
2299         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
2300         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2301
2302         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2303
2304         // Rebalance the network to generate htlc in the two directions
2305         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
2306         // 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
2307         // time as two different claim transactions as we're gonna to timeout htlc with given a high current height
2308         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
2309         let (_payment_preimage_2, payment_hash_2) = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000);
2310
2311         // Get the will-be-revoked local txn from node[0]
2312         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
2313
2314         //Revoke the old state
2315         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_1, 3_000_000);
2316
2317         {
2318                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
2319                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 200);
2320                 check_added_monitors!(nodes[0], 1);
2321                 nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 200);
2322                 check_added_monitors!(nodes[1], 1);
2323                 connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 200, true, header.bitcoin_hash());
2324
2325                 let events = nodes[1].node.get_and_clear_pending_events();
2326                 assert_eq!(events.len(), 1);
2327                 match events[0] {
2328                         Event::PaymentFailed { payment_hash, .. } => {
2329                                 assert_eq!(payment_hash, payment_hash_2);
2330                         },
2331                         _ => panic!("Unexpected event"),
2332                 }
2333
2334                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2335                 assert_eq!(node_txn.len(), 9);
2336                 // ChannelMonitor: justice tx revoked offered htlc, justice tx revoked received htlc, justice tx revoked to_local (3)
2337                 // ChannelManager: local commmitment + local HTLC-timeout (2)
2338                 // ChannelMonitor: bumped justice tx, after one increase, bumps on HTLC aren't generated not being substantial anymore, bump on revoked to_local isn't generated due to more room for expiration (2)
2339                 // ChannelMonitor: local commitment + local HTLC-timeout (2)
2340
2341                 // Check the pair local commitment and HTLC-timeout broadcast due to HTLC expiration
2342                 assert_eq!(node_txn[2].input.len(), 1);
2343                 check_spends!(node_txn[2], chan_1.3);
2344                 assert_eq!(node_txn[3].input.len(), 1);
2345                 let witness_script = node_txn[3].input[0].witness.last().unwrap();
2346                 assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
2347                 check_spends!(node_txn[3], node_txn[2]);
2348
2349                 // Justice transactions are indices 1-2-4
2350                 assert_eq!(node_txn[0].input.len(), 1);
2351                 assert_eq!(node_txn[1].input.len(), 1);
2352                 assert_eq!(node_txn[4].input.len(), 1);
2353
2354                 check_spends!(node_txn[0], revoked_local_txn[0]);
2355                 check_spends!(node_txn[1], revoked_local_txn[0]);
2356                 check_spends!(node_txn[4], revoked_local_txn[0]);
2357
2358                 let mut witness_lens = BTreeSet::new();
2359                 witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len());
2360                 witness_lens.insert(node_txn[1].input[0].witness.last().unwrap().len());
2361                 witness_lens.insert(node_txn[4].input[0].witness.last().unwrap().len());
2362                 assert_eq!(witness_lens.len(), 3);
2363                 assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
2364                 assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
2365                 assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
2366         }
2367         get_announce_close_broadcast_events(&nodes, 0, 1);
2368         assert_eq!(nodes[0].node.list_channels().len(), 0);
2369         assert_eq!(nodes[1].node.list_channels().len(), 0);
2370 }
2371
2372 #[test]
2373 fn test_htlc_on_chain_success() {
2374         // Test that in case of a unilateral close onchain, we detect the state of output thanks to
2375         // ChainWatchInterface and pass the preimage backward accordingly. So here we test that ChannelManager is
2376         // broadcasting the right event to other nodes in payment path.
2377         // We test with two HTLCs simultaneously as that was not handled correctly in the past.
2378         // A --------------------> B ----------------------> C (preimage)
2379         // First, C should claim the HTLC outputs via HTLC-Success when its own latest local
2380         // commitment transaction was broadcast.
2381         // Then, B should learn the preimage from said transactions, attempting to claim backwards
2382         // towards B.
2383         // B should be able to claim via preimage if A then broadcasts its local tx.
2384         // Finally, when A sees B's latest local commitment transaction it should be able to claim
2385         // the HTLC outputs via the preimage it learned (which, once confirmed should generate a
2386         // PaymentSent event).
2387
2388         let chanmon_cfgs = create_chanmon_cfgs(3);
2389         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
2390         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
2391         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
2392
2393         // Create some initial channels
2394         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2395         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
2396
2397         // Rebalance the network a bit by relaying one payment through all the channels...
2398         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
2399         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
2400
2401         let (our_payment_preimage, _payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
2402         let (our_payment_preimage_2, _payment_hash_2) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
2403         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2404
2405         // Broadcast legit commitment tx from C on B's chain
2406         // Broadcast HTLC Success transaction by C on received output from C's commitment tx on B's chain
2407         let commitment_tx = get_local_commitment_txn!(nodes[2], chan_2.2);
2408         assert_eq!(commitment_tx.len(), 1);
2409         check_spends!(commitment_tx[0], chan_2.3);
2410         nodes[2].node.claim_funds(our_payment_preimage, &None, 3_000_000);
2411         nodes[2].node.claim_funds(our_payment_preimage_2, &None, 3_000_000);
2412         check_added_monitors!(nodes[2], 2);
2413         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2414         assert!(updates.update_add_htlcs.is_empty());
2415         assert!(updates.update_fail_htlcs.is_empty());
2416         assert!(updates.update_fail_malformed_htlcs.is_empty());
2417         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
2418
2419         nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
2420         check_closed_broadcast!(nodes[2], false);
2421         check_added_monitors!(nodes[2], 1);
2422         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 3 (commitment tx, 2*htlc-success tx), ChannelMonitor : 2 (2 * HTLC-Success tx)
2423         assert_eq!(node_txn.len(), 5);
2424         assert_eq!(node_txn[0], node_txn[3]);
2425         assert_eq!(node_txn[1], node_txn[4]);
2426         assert_eq!(node_txn[2], commitment_tx[0]);
2427         check_spends!(node_txn[0], commitment_tx[0]);
2428         check_spends!(node_txn[1], commitment_tx[0]);
2429         assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2430         assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2431         assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2432         assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2433         assert_eq!(node_txn[0].lock_time, 0);
2434         assert_eq!(node_txn[1].lock_time, 0);
2435
2436         // Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
2437         nodes[1].block_notifier.block_connected(&Block { header, txdata: node_txn}, 1);
2438         {
2439                 let mut added_monitors = nodes[1].chan_monitor.added_monitors.lock().unwrap();
2440                 assert_eq!(added_monitors.len(), 1);
2441                 assert_eq!(added_monitors[0].0.txid, chan_2.3.txid());
2442                 added_monitors.clear();
2443         }
2444         let events = nodes[1].node.get_and_clear_pending_msg_events();
2445         {
2446                 let mut added_monitors = nodes[1].chan_monitor.added_monitors.lock().unwrap();
2447                 assert_eq!(added_monitors.len(), 2);
2448                 assert_eq!(added_monitors[0].0.txid, chan_1.3.txid());
2449                 assert_eq!(added_monitors[1].0.txid, chan_1.3.txid());
2450                 added_monitors.clear();
2451         }
2452         assert_eq!(events.len(), 2);
2453         match events[0] {
2454                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
2455                 _ => panic!("Unexpected event"),
2456         }
2457         match events[1] {
2458                 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, .. } } => {
2459                         assert!(update_add_htlcs.is_empty());
2460                         assert!(update_fail_htlcs.is_empty());
2461                         assert_eq!(update_fulfill_htlcs.len(), 1);
2462                         assert!(update_fail_malformed_htlcs.is_empty());
2463                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2464                 },
2465                 _ => panic!("Unexpected event"),
2466         };
2467         macro_rules! check_tx_local_broadcast {
2468                 ($node: expr, $htlc_offered: expr, $commitment_tx: expr, $chan_tx: expr) => { {
2469                         let mut node_txn = $node.tx_broadcaster.txn_broadcasted.lock().unwrap();
2470                         assert_eq!(node_txn.len(), 5);
2471                         // Node[1]: ChannelManager: 3 (commitment tx, 2*HTLC-Timeout tx), ChannelMonitor: 2 (timeout tx)
2472                         // Node[0]: ChannelManager: 3 (commtiemtn tx, 2*HTLC-Timeout tx), ChannelMonitor: 2 HTLC-timeout
2473                         check_spends!(node_txn[0], $commitment_tx);
2474                         check_spends!(node_txn[1], $commitment_tx);
2475                         assert_ne!(node_txn[0].lock_time, 0);
2476                         assert_ne!(node_txn[1].lock_time, 0);
2477                         if $htlc_offered {
2478                                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2479                                 assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2480                                 assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2481                                 assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2482                         } else {
2483                                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2484                                 assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2485                                 assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
2486                                 assert!(node_txn[1].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
2487                         }
2488                         check_spends!(node_txn[2], $chan_tx);
2489                         check_spends!(node_txn[3], node_txn[2]);
2490                         check_spends!(node_txn[4], node_txn[2]);
2491                         assert_eq!(node_txn[2].input[0].witness.last().unwrap().len(), 71);
2492                         assert_eq!(node_txn[3].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2493                         assert_eq!(node_txn[4].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2494                         assert!(node_txn[3].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2495                         assert!(node_txn[4].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
2496                         assert_ne!(node_txn[3].lock_time, 0);
2497                         assert_ne!(node_txn[4].lock_time, 0);
2498                         node_txn.clear();
2499                 } }
2500         }
2501         // nodes[1] now broadcasts its own local state as a fallback, suggesting an alternate
2502         // commitment transaction with a corresponding HTLC-Timeout transactions, as well as a
2503         // timeout-claim of the output that nodes[2] just claimed via success.
2504         check_tx_local_broadcast!(nodes[1], false, commitment_tx[0], chan_2.3);
2505
2506         // Broadcast legit commitment tx from A on B's chain
2507         // Broadcast preimage tx by B on offered output from A commitment tx  on A's chain
2508         let commitment_tx = get_local_commitment_txn!(nodes[0], chan_1.2);
2509         check_spends!(commitment_tx[0], chan_1.3);
2510         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
2511         check_closed_broadcast!(nodes[1], false);
2512         check_added_monitors!(nodes[1], 1);
2513         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 3 (commitment tx + HTLC-Sucess * 2), ChannelMonitor : 1 (HTLC-Success)
2514         assert_eq!(node_txn.len(), 4);
2515         check_spends!(node_txn[0], commitment_tx[0]);
2516         assert_eq!(node_txn[0].input.len(), 2);
2517         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2518         assert_eq!(node_txn[0].input[1].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2519         assert_eq!(node_txn[0].lock_time, 0);
2520         assert!(node_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
2521         check_spends!(node_txn[1], chan_1.3);
2522         assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
2523         check_spends!(node_txn[2], node_txn[1]);
2524         check_spends!(node_txn[3], node_txn[1]);
2525         // We don't bother to check that B can claim the HTLC output on its commitment tx here as
2526         // we already checked the same situation with A.
2527
2528         // Verify that A's ChannelManager is able to extract preimage from preimage tx and generate PaymentSent
2529         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone(), node_txn[0].clone()] }, 1);
2530         check_closed_broadcast!(nodes[0], false);
2531         check_added_monitors!(nodes[0], 1);
2532         let events = nodes[0].node.get_and_clear_pending_events();
2533         assert_eq!(events.len(), 2);
2534         let mut first_claimed = false;
2535         for event in events {
2536                 match event {
2537                         Event::PaymentSent { payment_preimage } => {
2538                                 if payment_preimage == our_payment_preimage {
2539                                         assert!(!first_claimed);
2540                                         first_claimed = true;
2541                                 } else {
2542                                         assert_eq!(payment_preimage, our_payment_preimage_2);
2543                                 }
2544                         },
2545                         _ => panic!("Unexpected event"),
2546                 }
2547         }
2548         check_tx_local_broadcast!(nodes[0], true, commitment_tx[0], chan_1.3);
2549 }
2550
2551 #[test]
2552 fn test_htlc_on_chain_timeout() {
2553         // Test that in case of a unilateral close onchain, we detect the state of output thanks to
2554         // ChainWatchInterface and timeout the HTLC backward accordingly. So here we test that ChannelManager is
2555         // broadcasting the right event to other nodes in payment path.
2556         // A ------------------> B ----------------------> C (timeout)
2557         //    B's commitment tx                 C's commitment tx
2558         //            \                                  \
2559         //         B's HTLC timeout tx               B's timeout tx
2560
2561         let chanmon_cfgs = create_chanmon_cfgs(3);
2562         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
2563         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
2564         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
2565
2566         // Create some intial channels
2567         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2568         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
2569
2570         // Rebalance the network a bit by relaying one payment thorugh all the channels...
2571         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
2572         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
2573
2574         let (_payment_preimage, payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
2575         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2576
2577         // Broadcast legit commitment tx from C on B's chain
2578         let commitment_tx = get_local_commitment_txn!(nodes[2], chan_2.2);
2579         check_spends!(commitment_tx[0], chan_2.3);
2580         nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
2581         check_added_monitors!(nodes[2], 0);
2582         expect_pending_htlcs_forwardable!(nodes[2]);
2583         check_added_monitors!(nodes[2], 1);
2584
2585         let events = nodes[2].node.get_and_clear_pending_msg_events();
2586         assert_eq!(events.len(), 1);
2587         match events[0] {
2588                 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, .. } } => {
2589                         assert!(update_add_htlcs.is_empty());
2590                         assert!(!update_fail_htlcs.is_empty());
2591                         assert!(update_fulfill_htlcs.is_empty());
2592                         assert!(update_fail_malformed_htlcs.is_empty());
2593                         assert_eq!(nodes[1].node.get_our_node_id(), *node_id);
2594                 },
2595                 _ => panic!("Unexpected event"),
2596         };
2597         nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
2598         check_closed_broadcast!(nodes[2], false);
2599         check_added_monitors!(nodes[2], 1);
2600         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 1 (commitment tx)
2601         assert_eq!(node_txn.len(), 1);
2602         check_spends!(node_txn[0], chan_2.3);
2603         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 71);
2604
2605         // Broadcast timeout transaction by B on received output from C's commitment tx on B's chain
2606         // Verify that B's ChannelManager is able to detect that HTLC is timeout by its own tx and react backward in consequence
2607         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 200);
2608         let timeout_tx;
2609         {
2610                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2611                 assert_eq!(node_txn.len(), 5); // ChannelManager : 2 (commitment tx, HTLC-Timeout tx), ChannelMonitor : 2 (local commitment tx + HTLC-timeout), 1 timeout tx
2612                 assert_eq!(node_txn[1], node_txn[3]);
2613                 assert_eq!(node_txn[2], node_txn[4]);
2614
2615                 check_spends!(node_txn[0], commitment_tx[0]);
2616                 assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2617
2618                 check_spends!(node_txn[1], chan_2.3);
2619                 check_spends!(node_txn[2], node_txn[1]);
2620                 assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
2621                 assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2622
2623                 timeout_tx = node_txn[0].clone();
2624                 node_txn.clear();
2625         }
2626
2627         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![timeout_tx]}, 1);
2628         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
2629         check_added_monitors!(nodes[1], 1);
2630         check_closed_broadcast!(nodes[1], false);
2631
2632         expect_pending_htlcs_forwardable!(nodes[1]);
2633         check_added_monitors!(nodes[1], 1);
2634         let events = nodes[1].node.get_and_clear_pending_msg_events();
2635         assert_eq!(events.len(), 1);
2636         match events[0] {
2637                 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, .. } } => {
2638                         assert!(update_add_htlcs.is_empty());
2639                         assert!(!update_fail_htlcs.is_empty());
2640                         assert!(update_fulfill_htlcs.is_empty());
2641                         assert!(update_fail_malformed_htlcs.is_empty());
2642                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2643                 },
2644                 _ => panic!("Unexpected event"),
2645         };
2646         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
2647         assert_eq!(node_txn.len(), 0);
2648
2649         // Broadcast legit commitment tx from B on A's chain
2650         let commitment_tx = get_local_commitment_txn!(nodes[1], chan_1.2);
2651         check_spends!(commitment_tx[0], chan_1.3);
2652
2653         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 200);
2654         check_closed_broadcast!(nodes[0], false);
2655         check_added_monitors!(nodes[0], 1);
2656         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Timeout tx), ChannelMonitor : 1 timeout tx
2657         assert_eq!(node_txn.len(), 3);
2658         check_spends!(node_txn[0], commitment_tx[0]);
2659         assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2660         check_spends!(node_txn[1], chan_1.3);
2661         check_spends!(node_txn[2], node_txn[1]);
2662         assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
2663         assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2664 }
2665
2666 #[test]
2667 fn test_simple_commitment_revoked_fail_backward() {
2668         // Test that in case of a revoked commitment tx, we detect the resolution of output by justice tx
2669         // and fail backward accordingly.
2670
2671         let chanmon_cfgs = create_chanmon_cfgs(3);
2672         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
2673         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
2674         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
2675
2676         // Create some initial channels
2677         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2678         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
2679
2680         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 3000000);
2681         // Get the will-be-revoked local txn from nodes[2]
2682         let revoked_local_txn = get_local_commitment_txn!(nodes[2], chan_2.2);
2683         // Revoke the old state
2684         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage, 3_000_000);
2685
2686         route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 3000000);
2687
2688         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2689         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2690         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
2691         check_added_monitors!(nodes[1], 1);
2692         check_closed_broadcast!(nodes[1], false);
2693
2694         expect_pending_htlcs_forwardable!(nodes[1]);
2695         check_added_monitors!(nodes[1], 1);
2696         let events = nodes[1].node.get_and_clear_pending_msg_events();
2697         assert_eq!(events.len(), 1);
2698         match events[0] {
2699                 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, .. } } => {
2700                         assert!(update_add_htlcs.is_empty());
2701                         assert_eq!(update_fail_htlcs.len(), 1);
2702                         assert!(update_fulfill_htlcs.is_empty());
2703                         assert!(update_fail_malformed_htlcs.is_empty());
2704                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2705
2706                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[0]);
2707                         commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true);
2708
2709                         let events = nodes[0].node.get_and_clear_pending_msg_events();
2710                         assert_eq!(events.len(), 1);
2711                         match events[0] {
2712                                 MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
2713                                 _ => panic!("Unexpected event"),
2714                         }
2715                         let events = nodes[0].node.get_and_clear_pending_events();
2716                         assert_eq!(events.len(), 1);
2717                         match events[0] {
2718                                 Event::PaymentFailed { .. } => {},
2719                                 _ => panic!("Unexpected event"),
2720                         }
2721                 },
2722                 _ => panic!("Unexpected event"),
2723         }
2724 }
2725
2726 fn do_test_commitment_revoked_fail_backward_exhaustive(deliver_bs_raa: bool, use_dust: bool, no_to_remote: bool) {
2727         // Test that if our counterparty broadcasts a revoked commitment transaction we fail all
2728         // pending HTLCs on that channel backwards even if the HTLCs aren't present in our latest
2729         // commitment transaction anymore.
2730         // To do this, we have the peer which will broadcast a revoked commitment transaction send
2731         // a number of update_fail/commitment_signed updates without ever sending the RAA in
2732         // response to our commitment_signed. This is somewhat misbehavior-y, though not
2733         // technically disallowed and we should probably handle it reasonably.
2734         // Note that this is pretty exhaustive as an outbound HTLC which we haven't yet
2735         // failed/fulfilled backwards must be in at least one of the latest two remote commitment
2736         // transactions:
2737         // * Once we move it out of our holding cell/add it, we will immediately include it in a
2738         //   commitment_signed (implying it will be in the latest remote commitment transaction).
2739         // * Once they remove it, we will send a (the first) commitment_signed without the HTLC,
2740         //   and once they revoke the previous commitment transaction (allowing us to send a new
2741         //   commitment_signed) we will be free to fail/fulfill the HTLC backwards.
2742         let chanmon_cfgs = create_chanmon_cfgs(3);
2743         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
2744         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
2745         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
2746
2747         // Create some initial channels
2748         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2749         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
2750
2751         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], if no_to_remote { 10_000 } else { 3_000_000 });
2752         // Get the will-be-revoked local txn from nodes[2]
2753         let revoked_local_txn = get_local_commitment_txn!(nodes[2], chan_2.2);
2754         assert_eq!(revoked_local_txn[0].output.len(), if no_to_remote { 1 } else { 2 });
2755         // Revoke the old state
2756         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage, if no_to_remote { 10_000 } else { 3_000_000});
2757
2758         let value = if use_dust {
2759                 // The dust limit applied to HTLC outputs considers the fee of the HTLC transaction as
2760                 // well, so HTLCs at exactly the dust limit will not be included in commitment txn.
2761                 nodes[2].node.channel_state.lock().unwrap().by_id.get(&chan_2.2).unwrap().our_dust_limit_satoshis * 1000
2762         } else { 3000000 };
2763
2764         let (_, first_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2765         let (_, second_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2766         let (_, third_payment_hash) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], value);
2767
2768         assert!(nodes[2].node.fail_htlc_backwards(&first_payment_hash, &None));
2769         expect_pending_htlcs_forwardable!(nodes[2]);
2770         check_added_monitors!(nodes[2], 1);
2771         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2772         assert!(updates.update_add_htlcs.is_empty());
2773         assert!(updates.update_fulfill_htlcs.is_empty());
2774         assert!(updates.update_fail_malformed_htlcs.is_empty());
2775         assert_eq!(updates.update_fail_htlcs.len(), 1);
2776         assert!(updates.update_fee.is_none());
2777         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
2778         let bs_raa = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
2779         // Drop the last RAA from 3 -> 2
2780
2781         assert!(nodes[2].node.fail_htlc_backwards(&second_payment_hash, &None));
2782         expect_pending_htlcs_forwardable!(nodes[2]);
2783         check_added_monitors!(nodes[2], 1);
2784         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2785         assert!(updates.update_add_htlcs.is_empty());
2786         assert!(updates.update_fulfill_htlcs.is_empty());
2787         assert!(updates.update_fail_malformed_htlcs.is_empty());
2788         assert_eq!(updates.update_fail_htlcs.len(), 1);
2789         assert!(updates.update_fee.is_none());
2790         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
2791         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &updates.commitment_signed);
2792         check_added_monitors!(nodes[1], 1);
2793         // Note that nodes[1] is in AwaitingRAA, so won't send a CS
2794         let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
2795         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
2796         check_added_monitors!(nodes[2], 1);
2797
2798         assert!(nodes[2].node.fail_htlc_backwards(&third_payment_hash, &None));
2799         expect_pending_htlcs_forwardable!(nodes[2]);
2800         check_added_monitors!(nodes[2], 1);
2801         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
2802         assert!(updates.update_add_htlcs.is_empty());
2803         assert!(updates.update_fulfill_htlcs.is_empty());
2804         assert!(updates.update_fail_malformed_htlcs.is_empty());
2805         assert_eq!(updates.update_fail_htlcs.len(), 1);
2806         assert!(updates.update_fee.is_none());
2807         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
2808         // At this point first_payment_hash has dropped out of the latest two commitment
2809         // transactions that nodes[1] is tracking...
2810         nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &updates.commitment_signed);
2811         check_added_monitors!(nodes[1], 1);
2812         // Note that nodes[1] is (still) in AwaitingRAA, so won't send a CS
2813         let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
2814         nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
2815         check_added_monitors!(nodes[2], 1);
2816
2817         // Add a fourth HTLC, this one will get sequestered away in nodes[1]'s holding cell waiting
2818         // on nodes[2]'s RAA.
2819         let route = nodes[1].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
2820         let (_, fourth_payment_hash) = get_payment_preimage_hash!(nodes[0]);
2821         nodes[1].node.send_payment(&route, fourth_payment_hash, &None).unwrap();
2822         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
2823         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
2824         check_added_monitors!(nodes[1], 0);
2825
2826         if deliver_bs_raa {
2827                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_raa);
2828                 // One monitor for the new revocation preimage, no second on as we won't generate a new
2829                 // commitment transaction for nodes[0] until process_pending_htlc_forwards().
2830                 check_added_monitors!(nodes[1], 1);
2831                 let events = nodes[1].node.get_and_clear_pending_events();
2832                 assert_eq!(events.len(), 1);
2833                 match events[0] {
2834                         Event::PendingHTLCsForwardable { .. } => { },
2835                         _ => panic!("Unexpected event"),
2836                 };
2837                 // Deliberately don't process the pending fail-back so they all fail back at once after
2838                 // block connection just like the !deliver_bs_raa case
2839         }
2840
2841         let mut failed_htlcs = HashSet::new();
2842         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
2843
2844         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
2845         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
2846         check_added_monitors!(nodes[1], 1);
2847         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
2848
2849         let events = nodes[1].node.get_and_clear_pending_events();
2850         assert_eq!(events.len(), if deliver_bs_raa { 1 } else { 2 });
2851         match events[0] {
2852                 Event::PaymentFailed { ref payment_hash, .. } => {
2853                         assert_eq!(*payment_hash, fourth_payment_hash);
2854                 },
2855                 _ => panic!("Unexpected event"),
2856         }
2857         if !deliver_bs_raa {
2858                 match events[1] {
2859                         Event::PendingHTLCsForwardable { .. } => { },
2860                         _ => panic!("Unexpected event"),
2861                 };
2862         }
2863         nodes[1].node.process_pending_htlc_forwards();
2864         check_added_monitors!(nodes[1], 1);
2865
2866         let events = nodes[1].node.get_and_clear_pending_msg_events();
2867         assert_eq!(events.len(), if deliver_bs_raa { 3 } else { 2 });
2868         match events[if deliver_bs_raa { 1 } else { 0 }] {
2869                 MessageSendEvent::BroadcastChannelUpdate { msg: msgs::ChannelUpdate { .. } } => {},
2870                 _ => panic!("Unexpected event"),
2871         }
2872         if deliver_bs_raa {
2873                 match events[0] {
2874                         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, .. } } => {
2875                                 assert_eq!(nodes[2].node.get_our_node_id(), *node_id);
2876                                 assert_eq!(update_add_htlcs.len(), 1);
2877                                 assert!(update_fulfill_htlcs.is_empty());
2878                                 assert!(update_fail_htlcs.is_empty());
2879                                 assert!(update_fail_malformed_htlcs.is_empty());
2880                         },
2881                         _ => panic!("Unexpected event"),
2882                 }
2883         }
2884         match events[if deliver_bs_raa { 2 } else { 1 }] {
2885                 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, .. } } => {
2886                         assert!(update_add_htlcs.is_empty());
2887                         assert_eq!(update_fail_htlcs.len(), 3);
2888                         assert!(update_fulfill_htlcs.is_empty());
2889                         assert!(update_fail_malformed_htlcs.is_empty());
2890                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
2891
2892                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[0]);
2893                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[1]);
2894                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlcs[2]);
2895
2896                         commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true);
2897
2898                         let events = nodes[0].node.get_and_clear_pending_msg_events();
2899                         // If we delivered B's RAA we got an unknown preimage error, not something
2900                         // that we should update our routing table for.
2901                         assert_eq!(events.len(), if deliver_bs_raa { 2 } else { 3 });
2902                         for event in events {
2903                                 match event {
2904                                         MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
2905                                         _ => panic!("Unexpected event"),
2906                                 }
2907                         }
2908                         let events = nodes[0].node.get_and_clear_pending_events();
2909                         assert_eq!(events.len(), 3);
2910                         match events[0] {
2911                                 Event::PaymentFailed { ref payment_hash, .. } => {
2912                                         assert!(failed_htlcs.insert(payment_hash.0));
2913                                 },
2914                                 _ => panic!("Unexpected event"),
2915                         }
2916                         match events[1] {
2917                                 Event::PaymentFailed { ref payment_hash, .. } => {
2918                                         assert!(failed_htlcs.insert(payment_hash.0));
2919                                 },
2920                                 _ => panic!("Unexpected event"),
2921                         }
2922                         match events[2] {
2923                                 Event::PaymentFailed { ref payment_hash, .. } => {
2924                                         assert!(failed_htlcs.insert(payment_hash.0));
2925                                 },
2926                                 _ => panic!("Unexpected event"),
2927                         }
2928                 },
2929                 _ => panic!("Unexpected event"),
2930         }
2931
2932         assert!(failed_htlcs.contains(&first_payment_hash.0));
2933         assert!(failed_htlcs.contains(&second_payment_hash.0));
2934         assert!(failed_htlcs.contains(&third_payment_hash.0));
2935 }
2936
2937 #[test]
2938 fn test_commitment_revoked_fail_backward_exhaustive_a() {
2939         do_test_commitment_revoked_fail_backward_exhaustive(false, true, false);
2940         do_test_commitment_revoked_fail_backward_exhaustive(true, true, false);
2941         do_test_commitment_revoked_fail_backward_exhaustive(false, false, false);
2942         do_test_commitment_revoked_fail_backward_exhaustive(true, false, false);
2943 }
2944
2945 #[test]
2946 fn test_commitment_revoked_fail_backward_exhaustive_b() {
2947         do_test_commitment_revoked_fail_backward_exhaustive(false, true, true);
2948         do_test_commitment_revoked_fail_backward_exhaustive(true, true, true);
2949         do_test_commitment_revoked_fail_backward_exhaustive(false, false, true);
2950         do_test_commitment_revoked_fail_backward_exhaustive(true, false, true);
2951 }
2952
2953 #[test]
2954 fn fail_backward_pending_htlc_upon_channel_failure() {
2955         let chanmon_cfgs = create_chanmon_cfgs(2);
2956         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
2957         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
2958         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2959         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 500_000_000, InitFeatures::supported(), InitFeatures::supported());
2960
2961         // Alice -> Bob: Route a payment but without Bob sending revoke_and_ack.
2962         {
2963                 let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
2964                 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 50_000, TEST_FINAL_CLTV).unwrap();
2965                 nodes[0].node.send_payment(&route, payment_hash, &None).unwrap();
2966                 check_added_monitors!(nodes[0], 1);
2967
2968                 let payment_event = {
2969                         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
2970                         assert_eq!(events.len(), 1);
2971                         SendEvent::from_event(events.remove(0))
2972                 };
2973                 assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
2974                 assert_eq!(payment_event.msgs.len(), 1);
2975         }
2976
2977         // Alice -> Bob: Route another payment but now Alice waits for Bob's earlier revoke_and_ack.
2978         let (_, failed_payment_hash) = get_payment_preimage_hash!(nodes[0]);
2979         {
2980                 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 50_000, TEST_FINAL_CLTV).unwrap();
2981                 nodes[0].node.send_payment(&route, failed_payment_hash, &None).unwrap();
2982                 check_added_monitors!(nodes[0], 0);
2983
2984                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
2985         }
2986
2987         // Alice <- Bob: Send a malformed update_add_htlc so Alice fails the channel.
2988         {
2989                 let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 50_000, TEST_FINAL_CLTV).unwrap();
2990                 let (_, payment_hash) = get_payment_preimage_hash!(nodes[1]);
2991
2992                 let secp_ctx = Secp256k1::new();
2993                 let session_priv = {
2994                         let mut session_key = [0; 32];
2995                         let mut rng = thread_rng();
2996                         rng.fill_bytes(&mut session_key);
2997                         SecretKey::from_slice(&session_key).expect("RNG is bad!")
2998                 };
2999
3000                 let current_height = nodes[1].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
3001                 let (onion_payloads, _amount_msat, cltv_expiry) = onion_utils::build_onion_payloads(&route.paths[0], 50_000, &None, current_height).unwrap();
3002                 let onion_keys = onion_utils::construct_onion_keys(&secp_ctx, &route.paths[0], &session_priv).unwrap();
3003                 let onion_routing_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &payment_hash);
3004
3005                 // Send a 0-msat update_add_htlc to fail the channel.
3006                 let update_add_htlc = msgs::UpdateAddHTLC {
3007                         channel_id: chan.2,
3008                         htlc_id: 0,
3009                         amount_msat: 0,
3010                         payment_hash,
3011                         cltv_expiry,
3012                         onion_routing_packet,
3013                 };
3014                 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &update_add_htlc);
3015         }
3016
3017         // Check that Alice fails backward the pending HTLC from the second payment.
3018         expect_payment_failed!(nodes[0], failed_payment_hash, true);
3019         check_closed_broadcast!(nodes[0], true);
3020         check_added_monitors!(nodes[0], 1);
3021 }
3022
3023 #[test]
3024 fn test_htlc_ignore_latest_remote_commitment() {
3025         // Test that HTLC transactions spending the latest remote commitment transaction are simply
3026         // ignored if we cannot claim them. This originally tickled an invalid unwrap().
3027         let chanmon_cfgs = create_chanmon_cfgs(2);
3028         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3029         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3030         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3031         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3032
3033         route_payment(&nodes[0], &[&nodes[1]], 10000000);
3034         nodes[0].node.force_close_channel(&nodes[0].node.list_channels()[0].channel_id);
3035         check_closed_broadcast!(nodes[0], false);
3036         check_added_monitors!(nodes[0], 1);
3037
3038         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
3039         assert_eq!(node_txn.len(), 2);
3040
3041         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
3042         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone(), node_txn[1].clone()]}, 1);
3043         check_closed_broadcast!(nodes[1], false);
3044         check_added_monitors!(nodes[1], 1);
3045
3046         // Duplicate the block_connected call since this may happen due to other listeners
3047         // registering new transactions
3048         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone(), node_txn[1].clone()]}, 1);
3049 }
3050
3051 #[test]
3052 fn test_force_close_fail_back() {
3053         // Check which HTLCs are failed-backwards on channel force-closure
3054         let chanmon_cfgs = create_chanmon_cfgs(3);
3055         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
3056         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
3057         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
3058         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3059         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
3060
3061         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, 42).unwrap();
3062
3063         let (our_payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
3064
3065         let mut payment_event = {
3066                 nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
3067                 check_added_monitors!(nodes[0], 1);
3068
3069                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
3070                 assert_eq!(events.len(), 1);
3071                 SendEvent::from_event(events.remove(0))
3072         };
3073
3074         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
3075         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
3076
3077         expect_pending_htlcs_forwardable!(nodes[1]);
3078
3079         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
3080         assert_eq!(events_2.len(), 1);
3081         payment_event = SendEvent::from_event(events_2.remove(0));
3082         assert_eq!(payment_event.msgs.len(), 1);
3083
3084         check_added_monitors!(nodes[1], 1);
3085         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]);
3086         nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &payment_event.commitment_msg);
3087         check_added_monitors!(nodes[2], 1);
3088         let (_, _) = get_revoke_commit_msgs!(nodes[2], nodes[1].node.get_our_node_id());
3089
3090         // nodes[2] now has the latest commitment transaction, but hasn't revoked its previous
3091         // state or updated nodes[1]' state. Now force-close and broadcast that commitment/HTLC
3092         // transaction and ensure nodes[1] doesn't fail-backwards (this was originally a bug!).
3093
3094         nodes[2].node.force_close_channel(&payment_event.commitment_msg.channel_id);
3095         check_closed_broadcast!(nodes[2], false);
3096         check_added_monitors!(nodes[2], 1);
3097         let tx = {
3098                 let mut node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap();
3099                 // Note that we don't bother broadcasting the HTLC-Success transaction here as we don't
3100                 // have a use for it unless nodes[2] learns the preimage somehow, the funds will go
3101                 // back to nodes[1] upon timeout otherwise.
3102                 assert_eq!(node_txn.len(), 1);
3103                 node_txn.remove(0)
3104         };
3105
3106         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
3107         nodes[1].block_notifier.block_connected_checked(&header, 1, &[&tx], &[1]);
3108
3109         // Note no UpdateHTLCs event here from nodes[1] to nodes[0]!
3110         check_closed_broadcast!(nodes[1], false);
3111         check_added_monitors!(nodes[1], 1);
3112
3113         // Now check that if we add the preimage to ChannelMonitor it broadcasts our HTLC-Success..
3114         {
3115                 let mut monitors = nodes[2].chan_monitor.simple_monitor.monitors.lock().unwrap();
3116                 monitors.get_mut(&OutPoint::new(Sha256dHash::from_slice(&payment_event.commitment_msg.channel_id[..]).unwrap(), 0)).unwrap()
3117                         .provide_payment_preimage(&our_payment_hash, &our_payment_preimage);
3118         }
3119         nodes[2].block_notifier.block_connected_checked(&header, 1, &[&tx], &[1]);
3120         let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap();
3121         assert_eq!(node_txn.len(), 1);
3122         assert_eq!(node_txn[0].input.len(), 1);
3123         assert_eq!(node_txn[0].input[0].previous_output.txid, tx.txid());
3124         assert_eq!(node_txn[0].lock_time, 0); // Must be an HTLC-Success
3125         assert_eq!(node_txn[0].input[0].witness.len(), 5); // Must be an HTLC-Success
3126
3127         check_spends!(node_txn[0], tx);
3128 }
3129
3130 #[test]
3131 fn test_unconf_chan() {
3132         // After creating a chan between nodes, we disconnect all blocks previously seen to force a channel close on nodes[0] side
3133         let chanmon_cfgs = create_chanmon_cfgs(2);
3134         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3135         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3136         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3137         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3138
3139         let channel_state = nodes[0].node.channel_state.lock().unwrap();
3140         assert_eq!(channel_state.by_id.len(), 1);
3141         assert_eq!(channel_state.short_to_id.len(), 1);
3142         mem::drop(channel_state);
3143
3144         let mut headers = Vec::new();
3145         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
3146         headers.push(header.clone());
3147         for _i in 2..100 {
3148                 header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
3149                 headers.push(header.clone());
3150         }
3151         let mut height = 99;
3152         while !headers.is_empty() {
3153                 nodes[0].node.block_disconnected(&headers.pop().unwrap(), height);
3154                 height -= 1;
3155         }
3156         check_closed_broadcast!(nodes[0], false);
3157         check_added_monitors!(nodes[0], 1);
3158         let channel_state = nodes[0].node.channel_state.lock().unwrap();
3159         assert_eq!(channel_state.by_id.len(), 0);
3160         assert_eq!(channel_state.short_to_id.len(), 0);
3161 }
3162
3163 #[test]
3164 fn test_simple_peer_disconnect() {
3165         // Test that we can reconnect when there are no lost messages
3166         let chanmon_cfgs = create_chanmon_cfgs(3);
3167         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
3168         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
3169         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
3170         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3171         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
3172
3173         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3174         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3175         reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3176
3177         let payment_preimage_1 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
3178         let payment_hash_2 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
3179         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_hash_2);
3180         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_preimage_1, 1_000_000);
3181
3182         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3183         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3184         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3185
3186         let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
3187         let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
3188         let payment_hash_5 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
3189         let payment_hash_6 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
3190
3191         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3192         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3193
3194         claim_payment_along_route(&nodes[0], &vec!(&nodes[1], &nodes[2]), true, payment_preimage_3, 1_000_000);
3195         fail_payment_along_route(&nodes[0], &[&nodes[1], &nodes[2]], true, payment_hash_5);
3196
3197         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (1, 0), (1, 0), (false, false));
3198         {
3199                 let events = nodes[0].node.get_and_clear_pending_events();
3200                 assert_eq!(events.len(), 2);
3201                 match events[0] {
3202                         Event::PaymentSent { payment_preimage } => {
3203                                 assert_eq!(payment_preimage, payment_preimage_3);
3204                         },
3205                         _ => panic!("Unexpected event"),
3206                 }
3207                 match events[1] {
3208                         Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
3209                                 assert_eq!(payment_hash, payment_hash_5);
3210                                 assert!(rejected_by_dest);
3211                         },
3212                         _ => panic!("Unexpected event"),
3213                 }
3214         }
3215
3216         claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_preimage_4, 1_000_000);
3217         fail_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), payment_hash_6);
3218 }
3219
3220 fn do_test_drop_messages_peer_disconnect(messages_delivered: u8) {
3221         // Test that we can reconnect when in-flight HTLC updates get dropped
3222         let chanmon_cfgs = create_chanmon_cfgs(2);
3223         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3224         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3225         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3226         if messages_delivered == 0 {
3227                 create_chan_between_nodes_with_value_a(&nodes[0], &nodes[1], 100000, 10001, InitFeatures::supported(), InitFeatures::supported());
3228                 // nodes[1] doesn't receive the funding_locked message (it'll be re-sent on reconnect)
3229         } else {
3230                 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3231         }
3232
3233         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();
3234         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
3235
3236         let payment_event = {
3237                 nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
3238                 check_added_monitors!(nodes[0], 1);
3239
3240                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
3241                 assert_eq!(events.len(), 1);
3242                 SendEvent::from_event(events.remove(0))
3243         };
3244         assert_eq!(nodes[1].node.get_our_node_id(), payment_event.node_id);
3245
3246         if messages_delivered < 2 {
3247                 // Drop the payment_event messages, and let them get re-generated in reconnect_nodes!
3248         } else {
3249                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
3250                 if messages_delivered >= 3 {
3251                         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
3252                         check_added_monitors!(nodes[1], 1);
3253                         let (bs_revoke_and_ack, bs_commitment_signed) = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
3254
3255                         if messages_delivered >= 4 {
3256                                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
3257                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3258                                 check_added_monitors!(nodes[0], 1);
3259
3260                                 if messages_delivered >= 5 {
3261                                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment_signed);
3262                                         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3263                                         // No commitment_signed so get_event_msg's assert(len == 1) passes
3264                                         check_added_monitors!(nodes[0], 1);
3265
3266                                         if messages_delivered >= 6 {
3267                                                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
3268                                                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3269                                                 check_added_monitors!(nodes[1], 1);
3270                                         }
3271                                 }
3272                         }
3273                 }
3274         }
3275
3276         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3277         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3278         if messages_delivered < 3 {
3279                 // Even if the funding_locked messages get exchanged, as long as nothing further was
3280                 // received on either side, both sides will need to resend them.
3281                 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 1), (0, 0), (0, 0), (0, 0), (false, false));
3282         } else if messages_delivered == 3 {
3283                 // nodes[0] still wants its RAA + commitment_signed
3284                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (-1, 0), (0, 0), (0, 0), (0, 0), (true, false));
3285         } else if messages_delivered == 4 {
3286                 // nodes[0] still wants its commitment_signed
3287                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (-1, 0), (0, 0), (0, 0), (0, 0), (false, false));
3288         } else if messages_delivered == 5 {
3289                 // nodes[1] still wants its final RAA
3290                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, true));
3291         } else if messages_delivered == 6 {
3292                 // Everything was delivered...
3293                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3294         }
3295
3296         let events_1 = nodes[1].node.get_and_clear_pending_events();
3297         assert_eq!(events_1.len(), 1);
3298         match events_1[0] {
3299                 Event::PendingHTLCsForwardable { .. } => { },
3300                 _ => panic!("Unexpected event"),
3301         };
3302
3303         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3304         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3305         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3306
3307         nodes[1].node.process_pending_htlc_forwards();
3308
3309         let events_2 = nodes[1].node.get_and_clear_pending_events();
3310         assert_eq!(events_2.len(), 1);
3311         match events_2[0] {
3312                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
3313                         assert_eq!(payment_hash_1, *payment_hash);
3314                         assert_eq!(*payment_secret, None);
3315                         assert_eq!(amt, 1000000);
3316                 },
3317                 _ => panic!("Unexpected event"),
3318         }
3319
3320         nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000);
3321         check_added_monitors!(nodes[1], 1);
3322
3323         let events_3 = nodes[1].node.get_and_clear_pending_msg_events();
3324         assert_eq!(events_3.len(), 1);
3325         let (update_fulfill_htlc, commitment_signed) = match events_3[0] {
3326                 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
3327                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3328                         assert!(updates.update_add_htlcs.is_empty());
3329                         assert!(updates.update_fail_htlcs.is_empty());
3330                         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
3331                         assert!(updates.update_fail_malformed_htlcs.is_empty());
3332                         assert!(updates.update_fee.is_none());
3333                         (updates.update_fulfill_htlcs[0].clone(), updates.commitment_signed.clone())
3334                 },
3335                 _ => panic!("Unexpected event"),
3336         };
3337
3338         if messages_delivered >= 1 {
3339                 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlc);
3340
3341                 let events_4 = nodes[0].node.get_and_clear_pending_events();
3342                 assert_eq!(events_4.len(), 1);
3343                 match events_4[0] {
3344                         Event::PaymentSent { ref payment_preimage } => {
3345                                 assert_eq!(payment_preimage_1, *payment_preimage);
3346                         },
3347                         _ => panic!("Unexpected event"),
3348                 }
3349
3350                 if messages_delivered >= 2 {
3351                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed);
3352                         check_added_monitors!(nodes[0], 1);
3353                         let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
3354
3355                         if messages_delivered >= 3 {
3356                                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
3357                                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3358                                 check_added_monitors!(nodes[1], 1);
3359
3360                                 if messages_delivered >= 4 {
3361                                         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_signed);
3362                                         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3363                                         // No commitment_signed so get_event_msg's assert(len == 1) passes
3364                                         check_added_monitors!(nodes[1], 1);
3365
3366                                         if messages_delivered >= 5 {
3367                                                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
3368                                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3369                                                 check_added_monitors!(nodes[0], 1);
3370                                         }
3371                                 }
3372                         }
3373                 }
3374         }
3375
3376         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3377         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3378         if messages_delivered < 2 {
3379                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (1, 0), (0, 0), (0, 0), (false, false));
3380                 //TODO: Deduplicate PaymentSent events, then enable this if:
3381                 //if messages_delivered < 1 {
3382                         let events_4 = nodes[0].node.get_and_clear_pending_events();
3383                         assert_eq!(events_4.len(), 1);
3384                         match events_4[0] {
3385                                 Event::PaymentSent { ref payment_preimage } => {
3386                                         assert_eq!(payment_preimage_1, *payment_preimage);
3387                                 },
3388                                 _ => panic!("Unexpected event"),
3389                         }
3390                 //}
3391         } else if messages_delivered == 2 {
3392                 // nodes[0] still wants its RAA + commitment_signed
3393                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, -1), (0, 0), (0, 0), (0, 0), (false, true));
3394         } else if messages_delivered == 3 {
3395                 // nodes[0] still wants its commitment_signed
3396                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, -1), (0, 0), (0, 0), (0, 0), (false, false));
3397         } else if messages_delivered == 4 {
3398                 // nodes[1] still wants its final RAA
3399                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (true, false));
3400         } else if messages_delivered == 5 {
3401                 // Everything was delivered...
3402                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3403         }
3404
3405         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3406         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3407         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3408
3409         // Channel should still work fine...
3410         let payment_preimage_2 = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000).0;
3411         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
3412 }
3413
3414 #[test]
3415 fn test_drop_messages_peer_disconnect_a() {
3416         do_test_drop_messages_peer_disconnect(0);
3417         do_test_drop_messages_peer_disconnect(1);
3418         do_test_drop_messages_peer_disconnect(2);
3419         do_test_drop_messages_peer_disconnect(3);
3420 }
3421
3422 #[test]
3423 fn test_drop_messages_peer_disconnect_b() {
3424         do_test_drop_messages_peer_disconnect(4);
3425         do_test_drop_messages_peer_disconnect(5);
3426         do_test_drop_messages_peer_disconnect(6);
3427 }
3428
3429 #[test]
3430 fn test_funding_peer_disconnect() {
3431         // Test that we can lock in our funding tx while disconnected
3432         let chanmon_cfgs = create_chanmon_cfgs(2);
3433         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3434         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3435         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3436         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001, InitFeatures::supported(), InitFeatures::supported());
3437
3438         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3439         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3440
3441         confirm_transaction(&nodes[0].block_notifier, &nodes[0].chain_monitor, &tx, tx.version);
3442         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
3443         assert_eq!(events_1.len(), 1);
3444         match events_1[0] {
3445                 MessageSendEvent::SendFundingLocked { ref node_id, msg: _ } => {
3446                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
3447                 },
3448                 _ => panic!("Unexpected event"),
3449         }
3450
3451         reconnect_nodes(&nodes[0], &nodes[1], (false, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3452
3453         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3454         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3455
3456         confirm_transaction(&nodes[1].block_notifier, &nodes[1].chain_monitor, &tx, tx.version);
3457         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
3458         assert_eq!(events_2.len(), 2);
3459         let funding_locked = match events_2[0] {
3460                 MessageSendEvent::SendFundingLocked { ref node_id, ref msg } => {
3461                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3462                         msg.clone()
3463                 },
3464                 _ => panic!("Unexpected event"),
3465         };
3466         let bs_announcement_sigs = match events_2[1] {
3467                 MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
3468                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3469                         msg.clone()
3470                 },
3471                 _ => panic!("Unexpected event"),
3472         };
3473
3474         reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3475
3476         nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &funding_locked);
3477         nodes[0].node.handle_announcement_signatures(&nodes[1].node.get_our_node_id(), &bs_announcement_sigs);
3478         let events_3 = nodes[0].node.get_and_clear_pending_msg_events();
3479         assert_eq!(events_3.len(), 2);
3480         let as_announcement_sigs = match events_3[0] {
3481                 MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
3482                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
3483                         msg.clone()
3484                 },
3485                 _ => panic!("Unexpected event"),
3486         };
3487         let (as_announcement, as_update) = match events_3[1] {
3488                 MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3489                         (msg.clone(), update_msg.clone())
3490                 },
3491                 _ => panic!("Unexpected event"),
3492         };
3493
3494         nodes[1].node.handle_announcement_signatures(&nodes[0].node.get_our_node_id(), &as_announcement_sigs);
3495         let events_4 = nodes[1].node.get_and_clear_pending_msg_events();
3496         assert_eq!(events_4.len(), 1);
3497         let (_, bs_update) = match events_4[0] {
3498                 MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3499                         (msg.clone(), update_msg.clone())
3500                 },
3501                 _ => panic!("Unexpected event"),
3502         };
3503
3504         nodes[0].router.handle_channel_announcement(&as_announcement).unwrap();
3505         nodes[0].router.handle_channel_update(&bs_update).unwrap();
3506         nodes[0].router.handle_channel_update(&as_update).unwrap();
3507
3508         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3509         let (payment_preimage, _) = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000);
3510         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage, 1_000_000);
3511 }
3512
3513 #[test]
3514 fn test_drop_messages_peer_disconnect_dual_htlc() {
3515         // Test that we can handle reconnecting when both sides of a channel have pending
3516         // commitment_updates when we disconnect.
3517         let chanmon_cfgs = create_chanmon_cfgs(2);
3518         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3519         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3520         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3521         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3522
3523         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
3524
3525         // Now try to send a second payment which will fail to send
3526         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3527         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
3528
3529         nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
3530         check_added_monitors!(nodes[0], 1);
3531
3532         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
3533         assert_eq!(events_1.len(), 1);
3534         match events_1[0] {
3535                 MessageSendEvent::UpdateHTLCs { .. } => {},
3536                 _ => panic!("Unexpected event"),
3537         }
3538
3539         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
3540         check_added_monitors!(nodes[1], 1);
3541
3542         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
3543         assert_eq!(events_2.len(), 1);
3544         match events_2[0] {
3545                 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 } } => {
3546                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3547                         assert!(update_add_htlcs.is_empty());
3548                         assert_eq!(update_fulfill_htlcs.len(), 1);
3549                         assert!(update_fail_htlcs.is_empty());
3550                         assert!(update_fail_malformed_htlcs.is_empty());
3551                         assert!(update_fee.is_none());
3552
3553                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]);
3554                         let events_3 = nodes[0].node.get_and_clear_pending_events();
3555                         assert_eq!(events_3.len(), 1);
3556                         match events_3[0] {
3557                                 Event::PaymentSent { ref payment_preimage } => {
3558                                         assert_eq!(*payment_preimage, payment_preimage_1);
3559                                 },
3560                                 _ => panic!("Unexpected event"),
3561                         }
3562
3563                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed);
3564                         let _ = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3565                         // No commitment_signed so get_event_msg's assert(len == 1) passes
3566                         check_added_monitors!(nodes[0], 1);
3567                 },
3568                 _ => panic!("Unexpected event"),
3569         }
3570
3571         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3572         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3573
3574         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3575         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3576         assert_eq!(reestablish_1.len(), 1);
3577         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3578         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
3579         assert_eq!(reestablish_2.len(), 1);
3580
3581         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
3582         let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
3583         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
3584         let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
3585
3586         assert!(as_resp.0.is_none());
3587         assert!(bs_resp.0.is_none());
3588
3589         assert!(bs_resp.1.is_none());
3590         assert!(bs_resp.2.is_none());
3591
3592         assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
3593
3594         assert_eq!(as_resp.2.as_ref().unwrap().update_add_htlcs.len(), 1);
3595         assert!(as_resp.2.as_ref().unwrap().update_fulfill_htlcs.is_empty());
3596         assert!(as_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
3597         assert!(as_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
3598         assert!(as_resp.2.as_ref().unwrap().update_fee.is_none());
3599         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &as_resp.2.as_ref().unwrap().update_add_htlcs[0]);
3600         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_resp.2.as_ref().unwrap().commitment_signed);
3601         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3602         // No commitment_signed so get_event_msg's assert(len == 1) passes
3603         check_added_monitors!(nodes[1], 1);
3604
3605         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), as_resp.1.as_ref().unwrap());
3606         let bs_second_commitment_signed = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
3607         assert!(bs_second_commitment_signed.update_add_htlcs.is_empty());
3608         assert!(bs_second_commitment_signed.update_fulfill_htlcs.is_empty());
3609         assert!(bs_second_commitment_signed.update_fail_htlcs.is_empty());
3610         assert!(bs_second_commitment_signed.update_fail_malformed_htlcs.is_empty());
3611         assert!(bs_second_commitment_signed.update_fee.is_none());
3612         check_added_monitors!(nodes[1], 1);
3613
3614         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
3615         let as_commitment_signed = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
3616         assert!(as_commitment_signed.update_add_htlcs.is_empty());
3617         assert!(as_commitment_signed.update_fulfill_htlcs.is_empty());
3618         assert!(as_commitment_signed.update_fail_htlcs.is_empty());
3619         assert!(as_commitment_signed.update_fail_malformed_htlcs.is_empty());
3620         assert!(as_commitment_signed.update_fee.is_none());
3621         check_added_monitors!(nodes[0], 1);
3622
3623         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_signed.commitment_signed);
3624         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
3625         // No commitment_signed so get_event_msg's assert(len == 1) passes
3626         check_added_monitors!(nodes[0], 1);
3627
3628         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_signed.commitment_signed);
3629         let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
3630         // No commitment_signed so get_event_msg's assert(len == 1) passes
3631         check_added_monitors!(nodes[1], 1);
3632
3633         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
3634         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3635         check_added_monitors!(nodes[1], 1);
3636
3637         expect_pending_htlcs_forwardable!(nodes[1]);
3638
3639         let events_5 = nodes[1].node.get_and_clear_pending_events();
3640         assert_eq!(events_5.len(), 1);
3641         match events_5[0] {
3642                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt: _ } => {
3643                         assert_eq!(payment_hash_2, *payment_hash);
3644                         assert_eq!(*payment_secret, None);
3645                 },
3646                 _ => panic!("Unexpected event"),
3647         }
3648
3649         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack);
3650         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3651         check_added_monitors!(nodes[0], 1);
3652
3653         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
3654 }
3655
3656 #[test]
3657 fn test_invalid_channel_announcement() {
3658         //Test BOLT 7 channel_announcement msg requirement for final node, gather data to build customed channel_announcement msgs
3659         let secp_ctx = Secp256k1::new();
3660         let chanmon_cfgs = create_chanmon_cfgs(2);
3661         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3662         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3663         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3664
3665         let chan_announcement = create_chan_between_nodes(&nodes[0], &nodes[1], InitFeatures::supported(), InitFeatures::supported());
3666
3667         let a_channel_lock = nodes[0].node.channel_state.lock().unwrap();
3668         let b_channel_lock = nodes[1].node.channel_state.lock().unwrap();
3669         let as_chan = a_channel_lock.by_id.get(&chan_announcement.3).unwrap();
3670         let bs_chan = b_channel_lock.by_id.get(&chan_announcement.3).unwrap();
3671
3672         nodes[0].router.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id : as_chan.get_short_channel_id().unwrap(), is_permanent: false } );
3673
3674         let as_bitcoin_key = as_chan.get_local_keys().inner.local_channel_pubkeys.funding_pubkey;
3675         let bs_bitcoin_key = bs_chan.get_local_keys().inner.local_channel_pubkeys.funding_pubkey;
3676
3677         let as_network_key = nodes[0].node.get_our_node_id();
3678         let bs_network_key = nodes[1].node.get_our_node_id();
3679
3680         let were_node_one = as_bitcoin_key.serialize()[..] < bs_bitcoin_key.serialize()[..];
3681
3682         let mut chan_announcement;
3683
3684         macro_rules! dummy_unsigned_msg {
3685                 () => {
3686                         msgs::UnsignedChannelAnnouncement {
3687                                 features: ChannelFeatures::supported(),
3688                                 chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
3689                                 short_channel_id: as_chan.get_short_channel_id().unwrap(),
3690                                 node_id_1: if were_node_one { as_network_key } else { bs_network_key },
3691                                 node_id_2: if were_node_one { bs_network_key } else { as_network_key },
3692                                 bitcoin_key_1: if were_node_one { as_bitcoin_key } else { bs_bitcoin_key },
3693                                 bitcoin_key_2: if were_node_one { bs_bitcoin_key } else { as_bitcoin_key },
3694                                 excess_data: Vec::new(),
3695                         };
3696                 }
3697         }
3698
3699         macro_rules! sign_msg {
3700                 ($unsigned_msg: expr) => {
3701                         let msghash = Message::from_slice(&Sha256dHash::hash(&$unsigned_msg.encode()[..])[..]).unwrap();
3702                         let as_bitcoin_sig = secp_ctx.sign(&msghash, &as_chan.get_local_keys().inner.funding_key());
3703                         let bs_bitcoin_sig = secp_ctx.sign(&msghash, &bs_chan.get_local_keys().inner.funding_key());
3704                         let as_node_sig = secp_ctx.sign(&msghash, &nodes[0].keys_manager.get_node_secret());
3705                         let bs_node_sig = secp_ctx.sign(&msghash, &nodes[1].keys_manager.get_node_secret());
3706                         chan_announcement = msgs::ChannelAnnouncement {
3707                                 node_signature_1 : if were_node_one { as_node_sig } else { bs_node_sig},
3708                                 node_signature_2 : if were_node_one { bs_node_sig } else { as_node_sig},
3709                                 bitcoin_signature_1: if were_node_one { as_bitcoin_sig } else { bs_bitcoin_sig },
3710                                 bitcoin_signature_2 : if were_node_one { bs_bitcoin_sig } else { as_bitcoin_sig },
3711                                 contents: $unsigned_msg
3712                         }
3713                 }
3714         }
3715
3716         let unsigned_msg = dummy_unsigned_msg!();
3717         sign_msg!(unsigned_msg);
3718         assert_eq!(nodes[0].router.handle_channel_announcement(&chan_announcement).unwrap(), true);
3719         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 } );
3720
3721         // Configured with Network::Testnet
3722         let mut unsigned_msg = dummy_unsigned_msg!();
3723         unsigned_msg.chain_hash = genesis_block(Network::Bitcoin).header.bitcoin_hash();
3724         sign_msg!(unsigned_msg);
3725         assert!(nodes[0].router.handle_channel_announcement(&chan_announcement).is_err());
3726
3727         let mut unsigned_msg = dummy_unsigned_msg!();
3728         unsigned_msg.chain_hash = Sha256dHash::hash(&[1,2,3,4,5,6,7,8,9]);
3729         sign_msg!(unsigned_msg);
3730         assert!(nodes[0].router.handle_channel_announcement(&chan_announcement).is_err());
3731 }
3732
3733 #[test]
3734 fn test_no_txn_manager_serialize_deserialize() {
3735         let chanmon_cfgs = create_chanmon_cfgs(2);
3736         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3737         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3738         let fee_estimator: test_utils::TestFeeEstimator;
3739         let new_chan_monitor: test_utils::TestChannelMonitor;
3740         let keys_manager: test_utils::TestKeysInterface;
3741         let nodes_0_deserialized: ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>;
3742         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3743
3744         let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001, InitFeatures::supported(), InitFeatures::supported());
3745
3746         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3747
3748         let nodes_0_serialized = nodes[0].node.encode();
3749         let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
3750         nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
3751
3752         fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: 253 };
3753         new_chan_monitor = test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), &fee_estimator);
3754         nodes[0].chan_monitor = &new_chan_monitor;
3755         let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
3756         let (_, mut chan_0_monitor) = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
3757         assert!(chan_0_monitor_read.is_empty());
3758
3759         let mut nodes_0_read = &nodes_0_serialized[..];
3760         let config = UserConfig::default();
3761         keys_manager = test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new()));
3762         let (_, nodes_0_deserialized_tmp) = {
3763                 let mut channel_monitors = HashMap::new();
3764                 channel_monitors.insert(chan_0_monitor.get_funding_txo(), &mut chan_0_monitor);
3765                 <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3766                         default_config: config,
3767                         keys_manager: &keys_manager,
3768                         fee_estimator: &fee_estimator,
3769                         monitor: nodes[0].chan_monitor,
3770                         tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3771                         logger: Arc::new(test_utils::TestLogger::new()),
3772                         channel_monitors: &mut channel_monitors,
3773                 }).unwrap()
3774         };
3775         nodes_0_deserialized = nodes_0_deserialized_tmp;
3776         assert!(nodes_0_read.is_empty());
3777
3778         assert!(nodes[0].chan_monitor.add_monitor(chan_0_monitor.get_funding_txo(), chan_0_monitor).is_ok());
3779         nodes[0].node = &nodes_0_deserialized;
3780         nodes[0].block_notifier.register_listener(nodes[0].node);
3781         assert_eq!(nodes[0].node.list_channels().len(), 1);
3782         check_added_monitors!(nodes[0], 1);
3783
3784         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3785         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3786         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3787         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
3788
3789         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
3790         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
3791         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
3792         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
3793
3794         let (funding_locked, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
3795         let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked);
3796         for node in nodes.iter() {
3797                 assert!(node.router.handle_channel_announcement(&announcement).unwrap());
3798                 node.router.handle_channel_update(&as_update).unwrap();
3799                 node.router.handle_channel_update(&bs_update).unwrap();
3800         }
3801
3802         send_payment(&nodes[0], &[&nodes[1]], 1000000, 1_000_000);
3803 }
3804
3805 #[test]
3806 fn test_simple_manager_serialize_deserialize() {
3807         let chanmon_cfgs = create_chanmon_cfgs(2);
3808         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3809         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3810         let fee_estimator: test_utils::TestFeeEstimator;
3811         let new_chan_monitor: test_utils::TestChannelMonitor;
3812         let keys_manager: test_utils::TestKeysInterface;
3813         let nodes_0_deserialized: ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>;
3814         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3815         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3816
3817         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
3818         let (_, our_payment_hash) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
3819
3820         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3821
3822         let nodes_0_serialized = nodes[0].node.encode();
3823         let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
3824         nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
3825
3826         fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: 253 };
3827         new_chan_monitor = test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), &fee_estimator);
3828         nodes[0].chan_monitor = &new_chan_monitor;
3829         let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
3830         let (_, mut chan_0_monitor) = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
3831         assert!(chan_0_monitor_read.is_empty());
3832
3833         let mut nodes_0_read = &nodes_0_serialized[..];
3834         keys_manager = test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new()));
3835         let (_, nodes_0_deserialized_tmp) = {
3836                 let mut channel_monitors = HashMap::new();
3837                 channel_monitors.insert(chan_0_monitor.get_funding_txo(), &mut chan_0_monitor);
3838                 <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3839                         default_config: UserConfig::default(),
3840                         keys_manager: &keys_manager,
3841                         fee_estimator: &fee_estimator,
3842                         monitor: nodes[0].chan_monitor,
3843                         tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3844                         logger: Arc::new(test_utils::TestLogger::new()),
3845                         channel_monitors: &mut channel_monitors,
3846                 }).unwrap()
3847         };
3848         nodes_0_deserialized = nodes_0_deserialized_tmp;
3849         assert!(nodes_0_read.is_empty());
3850
3851         assert!(nodes[0].chan_monitor.add_monitor(chan_0_monitor.get_funding_txo(), chan_0_monitor).is_ok());
3852         nodes[0].node = &nodes_0_deserialized;
3853         check_added_monitors!(nodes[0], 1);
3854
3855         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3856
3857         fail_payment(&nodes[0], &[&nodes[1]], our_payment_hash);
3858         claim_payment(&nodes[0], &[&nodes[1]], our_payment_preimage, 1_000_000);
3859 }
3860
3861 #[test]
3862 fn test_manager_serialize_deserialize_inconsistent_monitor() {
3863         // Test deserializing a ChannelManager with an out-of-date ChannelMonitor
3864         let chanmon_cfgs = create_chanmon_cfgs(4);
3865         let node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
3866         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
3867         let fee_estimator: test_utils::TestFeeEstimator;
3868         let new_chan_monitor: test_utils::TestChannelMonitor;
3869         let keys_manager: test_utils::TestKeysInterface;
3870         let nodes_0_deserialized: ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>;
3871         let mut nodes = create_network(4, &node_cfgs, &node_chanmgrs);
3872         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
3873         create_announced_chan_between_nodes(&nodes, 2, 0, InitFeatures::supported(), InitFeatures::supported());
3874         let (_, _, channel_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 3, InitFeatures::supported(), InitFeatures::supported());
3875
3876         let mut node_0_stale_monitors_serialized = Vec::new();
3877         for monitor in nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter() {
3878                 let mut writer = test_utils::TestVecWriter(Vec::new());
3879                 monitor.1.write_for_disk(&mut writer).unwrap();
3880                 node_0_stale_monitors_serialized.push(writer.0);
3881         }
3882
3883         let (our_payment_preimage, _) = route_payment(&nodes[2], &[&nodes[0], &nodes[1]], 1000000);
3884
3885         // Serialize the ChannelManager here, but the monitor we keep up-to-date
3886         let nodes_0_serialized = nodes[0].node.encode();
3887
3888         route_payment(&nodes[0], &[&nodes[3]], 1000000);
3889         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3890         nodes[2].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3891         nodes[3].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3892
3893         // Now the ChannelMonitor (which is now out-of-sync with ChannelManager for channel w/
3894         // nodes[3])
3895         let mut node_0_monitors_serialized = Vec::new();
3896         for monitor in nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter() {
3897                 let mut writer = test_utils::TestVecWriter(Vec::new());
3898                 monitor.1.write_for_disk(&mut writer).unwrap();
3899                 node_0_monitors_serialized.push(writer.0);
3900         }
3901
3902         fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: 253 };
3903         new_chan_monitor = test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), &fee_estimator);
3904         nodes[0].chan_monitor = &new_chan_monitor;
3905
3906         let mut node_0_stale_monitors = Vec::new();
3907         for serialized in node_0_stale_monitors_serialized.iter() {
3908                 let mut read = &serialized[..];
3909                 let (_, monitor) = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut read, Arc::new(test_utils::TestLogger::new())).unwrap();
3910                 assert!(read.is_empty());
3911                 node_0_stale_monitors.push(monitor);
3912         }
3913
3914         let mut node_0_monitors = Vec::new();
3915         for serialized in node_0_monitors_serialized.iter() {
3916                 let mut read = &serialized[..];
3917                 let (_, monitor) = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut read, Arc::new(test_utils::TestLogger::new())).unwrap();
3918                 assert!(read.is_empty());
3919                 node_0_monitors.push(monitor);
3920         }
3921
3922         keys_manager = test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new()));
3923
3924         let mut nodes_0_read = &nodes_0_serialized[..];
3925         if let Err(msgs::DecodeError::InvalidValue) =
3926                 <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3927                 default_config: UserConfig::default(),
3928                 keys_manager: &keys_manager,
3929                 fee_estimator: &fee_estimator,
3930                 monitor: nodes[0].chan_monitor,
3931                 tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3932                 logger: Arc::new(test_utils::TestLogger::new()),
3933                 channel_monitors: &mut node_0_stale_monitors.iter_mut().map(|monitor| { (monitor.get_funding_txo(), monitor) }).collect(),
3934         }) { } else {
3935                 panic!("If the monitor(s) are stale, this indicates a bug and we should get an Err return");
3936         };
3937
3938         let mut nodes_0_read = &nodes_0_serialized[..];
3939         let (_, nodes_0_deserialized_tmp) =
3940                 <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3941                 default_config: UserConfig::default(),
3942                 keys_manager: &keys_manager,
3943                 fee_estimator: &fee_estimator,
3944                 monitor: nodes[0].chan_monitor,
3945                 tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3946                 logger: Arc::new(test_utils::TestLogger::new()),
3947                 channel_monitors: &mut node_0_monitors.iter_mut().map(|monitor| { (monitor.get_funding_txo(), monitor) }).collect(),
3948         }).unwrap();
3949         nodes_0_deserialized = nodes_0_deserialized_tmp;
3950         assert!(nodes_0_read.is_empty());
3951
3952         { // Channel close should result in a commitment tx and an HTLC tx
3953                 let txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
3954                 assert_eq!(txn.len(), 2);
3955                 assert_eq!(txn[0].input[0].previous_output.txid, funding_tx.txid());
3956                 assert_eq!(txn[1].input[0].previous_output.txid, txn[0].txid());
3957         }
3958
3959         for monitor in node_0_monitors.drain(..) {
3960                 assert!(nodes[0].chan_monitor.add_monitor(monitor.get_funding_txo(), monitor).is_ok());
3961                 check_added_monitors!(nodes[0], 1);
3962         }
3963         nodes[0].node = &nodes_0_deserialized;
3964
3965         // nodes[1] and nodes[2] have no lost state with nodes[0]...
3966         reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3967         reconnect_nodes(&nodes[0], &nodes[2], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
3968         //... and we can even still claim the payment!
3969         claim_payment(&nodes[2], &[&nodes[0], &nodes[1]], our_payment_preimage, 1_000_000);
3970
3971         nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3972         let reestablish = get_event_msg!(nodes[3], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
3973         nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
3974         nodes[0].node.handle_channel_reestablish(&nodes[3].node.get_our_node_id(), &reestablish);
3975         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
3976         assert_eq!(msg_events.len(), 1);
3977         if let MessageSendEvent::HandleError { ref action, .. } = msg_events[0] {
3978                 match action {
3979                         &ErrorAction::SendErrorMessage { ref msg } => {
3980                                 assert_eq!(msg.channel_id, channel_id);
3981                         },
3982                         _ => panic!("Unexpected event!"),
3983                 }
3984         }
3985 }
3986
3987 macro_rules! check_spendable_outputs {
3988         ($node: expr, $der_idx: expr) => {
3989                 {
3990                         let events = $node.chan_monitor.simple_monitor.get_and_clear_pending_events();
3991                         let mut txn = Vec::new();
3992                         for event in events {
3993                                 match event {
3994                                         Event::SpendableOutputs { ref outputs } => {
3995                                                 for outp in outputs {
3996                                                         match *outp {
3997                                                                 SpendableOutputDescriptor::DynamicOutputP2WPKH { ref outpoint, ref key, ref output } => {
3998                                                                         let input = TxIn {
3999                                                                                 previous_output: outpoint.clone(),
4000                                                                                 script_sig: Script::new(),
4001                                                                                 sequence: 0,
4002                                                                                 witness: Vec::new(),
4003                                                                         };
4004                                                                         let outp = TxOut {
4005                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4006                                                                                 value: output.value,
4007                                                                         };
4008                                                                         let mut spend_tx = Transaction {
4009                                                                                 version: 2,
4010                                                                                 lock_time: 0,
4011                                                                                 input: vec![input],
4012                                                                                 output: vec![outp],
4013                                                                         };
4014                                                                         let secp_ctx = Secp256k1::new();
4015                                                                         let remotepubkey = PublicKey::from_secret_key(&secp_ctx, &key);
4016                                                                         let witness_script = Address::p2pkh(&::bitcoin::PublicKey{compressed: true, key: remotepubkey}, Network::Testnet).script_pubkey();
4017                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], &witness_script, output.value)[..]).unwrap();
4018                                                                         let remotesig = secp_ctx.sign(&sighash, key);
4019                                                                         spend_tx.input[0].witness.push(remotesig.serialize_der().to_vec());
4020                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4021                                                                         spend_tx.input[0].witness.push(remotepubkey.serialize().to_vec());
4022                                                                         txn.push(spend_tx);
4023                                                                 },
4024                                                                 SpendableOutputDescriptor::DynamicOutputP2WSH { ref outpoint, ref key, ref witness_script, ref to_self_delay, ref output } => {
4025                                                                         let input = TxIn {
4026                                                                                 previous_output: outpoint.clone(),
4027                                                                                 script_sig: Script::new(),
4028                                                                                 sequence: *to_self_delay as u32,
4029                                                                                 witness: Vec::new(),
4030                                                                         };
4031                                                                         let outp = TxOut {
4032                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4033                                                                                 value: output.value,
4034                                                                         };
4035                                                                         let mut spend_tx = Transaction {
4036                                                                                 version: 2,
4037                                                                                 lock_time: 0,
4038                                                                                 input: vec![input],
4039                                                                                 output: vec![outp],
4040                                                                         };
4041                                                                         let secp_ctx = Secp256k1::new();
4042                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], witness_script, output.value)[..]).unwrap();
4043                                                                         let local_delaysig = secp_ctx.sign(&sighash, key);
4044                                                                         spend_tx.input[0].witness.push(local_delaysig.serialize_der().to_vec());
4045                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4046                                                                         spend_tx.input[0].witness.push(vec!());
4047                                                                         spend_tx.input[0].witness.push(witness_script.clone().into_bytes());
4048                                                                         txn.push(spend_tx);
4049                                                                 },
4050                                                                 SpendableOutputDescriptor::StaticOutput { ref outpoint, ref output } => {
4051                                                                         let secp_ctx = Secp256k1::new();
4052                                                                         let input = TxIn {
4053                                                                                 previous_output: outpoint.clone(),
4054                                                                                 script_sig: Script::new(),
4055                                                                                 sequence: 0,
4056                                                                                 witness: Vec::new(),
4057                                                                         };
4058                                                                         let outp = TxOut {
4059                                                                                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
4060                                                                                 value: output.value,
4061                                                                         };
4062                                                                         let mut spend_tx = Transaction {
4063                                                                                 version: 2,
4064                                                                                 lock_time: 0,
4065                                                                                 input: vec![input],
4066                                                                                 output: vec![outp.clone()],
4067                                                                         };
4068                                                                         let secret = {
4069                                                                                 match ExtendedPrivKey::new_master(Network::Testnet, &$node.node_seed) {
4070                                                                                         Ok(master_key) => {
4071                                                                                                 match master_key.ckd_priv(&secp_ctx, ChildNumber::from_hardened_idx($der_idx).expect("key space exhausted")) {
4072                                                                                                         Ok(key) => key,
4073                                                                                                         Err(_) => panic!("Your RNG is busted"),
4074                                                                                                 }
4075                                                                                         }
4076                                                                                         Err(_) => panic!("Your rng is busted"),
4077                                                                                 }
4078                                                                         };
4079                                                                         let pubkey = ExtendedPubKey::from_private(&secp_ctx, &secret).public_key;
4080                                                                         let witness_script = Address::p2pkh(&pubkey, Network::Testnet).script_pubkey();
4081                                                                         let sighash = Message::from_slice(&bip143::SighashComponents::new(&spend_tx).sighash_all(&spend_tx.input[0], &witness_script, output.value)[..]).unwrap();
4082                                                                         let sig = secp_ctx.sign(&sighash, &secret.private_key.key);
4083                                                                         spend_tx.input[0].witness.push(sig.serialize_der().to_vec());
4084                                                                         spend_tx.input[0].witness[0].push(SigHashType::All as u8);
4085                                                                         spend_tx.input[0].witness.push(pubkey.key.serialize().to_vec());
4086                                                                         txn.push(spend_tx);
4087                                                                 },
4088                                                         }
4089                                                 }
4090                                         },
4091                                         _ => panic!("Unexpected event"),
4092                                 };
4093                         }
4094                         txn
4095                 }
4096         }
4097 }
4098
4099 #[test]
4100 fn test_claim_sizeable_push_msat() {
4101         // Incidentally test SpendableOutput event generation due to detection of to_local output on commitment tx
4102         let chanmon_cfgs = create_chanmon_cfgs(2);
4103         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4104         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4105         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4106
4107         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 99000000, InitFeatures::supported(), InitFeatures::supported());
4108         nodes[1].node.force_close_channel(&chan.2);
4109         check_closed_broadcast!(nodes[1], false);
4110         check_added_monitors!(nodes[1], 1);
4111         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4112         assert_eq!(node_txn.len(), 1);
4113         check_spends!(node_txn[0], chan.3);
4114         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
4115
4116         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4117         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone()] }, 0);
4118         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4119
4120         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4121         assert_eq!(spend_txn.len(), 1);
4122         check_spends!(spend_txn[0], node_txn[0]);
4123 }
4124
4125 #[test]
4126 fn test_claim_on_remote_sizeable_push_msat() {
4127         // Same test as previous, just test on remote commitment tx, as per_commitment_point registration changes following you're funder/fundee and
4128         // to_remote output is encumbered by a P2WPKH
4129         let chanmon_cfgs = create_chanmon_cfgs(2);
4130         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4131         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4132         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4133
4134         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 99000000, InitFeatures::supported(), InitFeatures::supported());
4135         nodes[0].node.force_close_channel(&chan.2);
4136         check_closed_broadcast!(nodes[0], false);
4137         check_added_monitors!(nodes[0], 1);
4138
4139         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4140         assert_eq!(node_txn.len(), 1);
4141         check_spends!(node_txn[0], chan.3);
4142         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
4143
4144         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4145         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone()] }, 0);
4146         check_closed_broadcast!(nodes[1], false);
4147         check_added_monitors!(nodes[1], 1);
4148         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4149
4150         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4151         assert_eq!(spend_txn.len(), 2);
4152         assert_eq!(spend_txn[0], spend_txn[1]);
4153         check_spends!(spend_txn[0], node_txn[0]);
4154 }
4155
4156 #[test]
4157 fn test_claim_on_remote_revoked_sizeable_push_msat() {
4158         // Same test as previous, just test on remote revoked commitment tx, as per_commitment_point registration changes following you're funder/fundee and
4159         // to_remote output is encumbered by a P2WPKH
4160
4161         let chanmon_cfgs = create_chanmon_cfgs(2);
4162         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4163         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4164         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4165
4166         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 59000000, InitFeatures::supported(), InitFeatures::supported());
4167         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4168         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan.2);
4169         assert_eq!(revoked_local_txn[0].input.len(), 1);
4170         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan.3.txid());
4171
4172         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
4173         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4174         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 0);
4175         check_closed_broadcast!(nodes[1], false);
4176         check_added_monitors!(nodes[1], 1);
4177
4178         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4179         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4180         nodes[1].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone()] }, 1);
4181         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4182
4183         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4184         assert_eq!(spend_txn.len(), 3);
4185         assert_eq!(spend_txn[0], spend_txn[1]); // to_remote output on revoked remote commitment_tx
4186         check_spends!(spend_txn[0], revoked_local_txn[0]);
4187         check_spends!(spend_txn[2], node_txn[0]);
4188 }
4189
4190 #[test]
4191 fn test_static_spendable_outputs_preimage_tx() {
4192         let chanmon_cfgs = create_chanmon_cfgs(2);
4193         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4194         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4195         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4196
4197         // Create some initial channels
4198         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4199
4200         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4201
4202         let commitment_tx = get_local_commitment_txn!(nodes[0], chan_1.2);
4203         assert_eq!(commitment_tx[0].input.len(), 1);
4204         assert_eq!(commitment_tx[0].input[0].previous_output.txid, chan_1.3.txid());
4205
4206         // Settle A's commitment tx on B's chain
4207         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4208         assert!(nodes[1].node.claim_funds(payment_preimage, &None, 3_000_000));
4209         check_added_monitors!(nodes[1], 1);
4210         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()] }, 1);
4211         check_added_monitors!(nodes[1], 1);
4212         let events = nodes[1].node.get_and_clear_pending_msg_events();
4213         match events[0] {
4214                 MessageSendEvent::UpdateHTLCs { .. } => {},
4215                 _ => panic!("Unexpected event"),
4216         }
4217         match events[1] {
4218                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4219                 _ => panic!("Unexepected event"),
4220         }
4221
4222         // Check B's monitor was able to send back output descriptor event for preimage tx on A's commitment tx
4223         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); // ChannelManager : 2 (local commitment tx + HTLC-Success), ChannelMonitor: preimage tx
4224         assert_eq!(node_txn.len(), 3);
4225         check_spends!(node_txn[0], commitment_tx[0]);
4226         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4227         check_spends!(node_txn[1], chan_1.3);
4228         check_spends!(node_txn[2], node_txn[1]);
4229
4230         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4231         nodes[1].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone()] }, 1);
4232         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4233
4234         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4235         assert_eq!(spend_txn.len(), 1);
4236         check_spends!(spend_txn[0], node_txn[0]);
4237 }
4238
4239 #[test]
4240 fn test_static_spendable_outputs_timeout_tx() {
4241         let chanmon_cfgs = create_chanmon_cfgs(2);
4242         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4243         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4244         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4245
4246         // Create some initial channels
4247         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4248
4249         // Rebalance the network a bit by relaying one payment through all the channels ...
4250         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
4251
4252         let (_, our_payment_hash) = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000);
4253
4254         let commitment_tx = get_local_commitment_txn!(nodes[0], chan_1.2);
4255         assert_eq!(commitment_tx[0].input.len(), 1);
4256         assert_eq!(commitment_tx[0].input[0].previous_output.txid, chan_1.3.txid());
4257
4258         // Settle A's commitment tx on B' chain
4259         let header = BlockHeader { version: 0x2000_0000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
4260         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()] }, 0);
4261         check_added_monitors!(nodes[1], 1);
4262         let events = nodes[1].node.get_and_clear_pending_msg_events();
4263         match events[0] {
4264                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4265                 _ => panic!("Unexpected event"),
4266         }
4267
4268         // Check B's monitor was able to send back output descriptor event for timeout tx on A's commitment tx
4269         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4270         assert_eq!(node_txn.len(), 3); // ChannelManager : 2 (local commitent tx + HTLC-timeout), ChannelMonitor: timeout tx
4271         check_spends!(node_txn[0],  commitment_tx[0].clone());
4272         assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4273         check_spends!(node_txn[1], chan_1.3.clone());
4274         check_spends!(node_txn[2], node_txn[1]);
4275
4276         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4277         nodes[1].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone()] }, 1);
4278         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4279         let events = nodes[1].node.get_and_clear_pending_events();
4280         assert_eq!(events.len(), 1);
4281         match events[0] {
4282                 Event::PaymentFailed { payment_hash, .. } => {
4283                         assert_eq!(payment_hash, our_payment_hash);
4284                 },
4285                 _ => panic!("Unexpected event"),
4286         }
4287
4288         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4289         assert_eq!(spend_txn.len(), 3); // SpendableOutput: remote_commitment_tx.to_remote (*2), timeout_tx.output (*1)
4290         check_spends!(spend_txn[2], node_txn[0].clone());
4291 }
4292
4293 #[test]
4294 fn test_static_spendable_outputs_justice_tx_revoked_commitment_tx() {
4295         let chanmon_cfgs = create_chanmon_cfgs(2);
4296         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4297         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4298         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4299
4300         // Create some initial channels
4301         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4302
4303         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4304         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
4305         assert_eq!(revoked_local_txn[0].input.len(), 1);
4306         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4307
4308         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
4309
4310         let  header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4311         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 0);
4312         check_closed_broadcast!(nodes[1], false);
4313         check_added_monitors!(nodes[1], 1);
4314
4315         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4316         assert_eq!(node_txn.len(), 2);
4317         assert_eq!(node_txn[0].input.len(), 2);
4318         check_spends!(node_txn[0], revoked_local_txn[0]);
4319
4320         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4321         nodes[1].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone()] }, 1);
4322         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4323
4324         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4325         assert_eq!(spend_txn.len(), 1);
4326         check_spends!(spend_txn[0], node_txn[0]);
4327 }
4328
4329 #[test]
4330 fn test_static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx() {
4331         let chanmon_cfgs = create_chanmon_cfgs(2);
4332         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4333         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4334         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4335
4336         // Create some initial channels
4337         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4338
4339         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4340         let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
4341         assert_eq!(revoked_local_txn[0].input.len(), 1);
4342         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4343
4344         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
4345
4346         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4347         // A will generate HTLC-Timeout from revoked commitment tx
4348         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4349         check_closed_broadcast!(nodes[0], false);
4350         check_added_monitors!(nodes[0], 1);
4351
4352         let revoked_htlc_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4353         assert_eq!(revoked_htlc_txn.len(), 2);
4354         assert_eq!(revoked_htlc_txn[0].input.len(), 1);
4355         assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4356         check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
4357         check_spends!(revoked_htlc_txn[1], chan_1.3);
4358
4359         // B will generate justice tx from A's revoked commitment/HTLC tx
4360         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()] }, 0);
4361         check_closed_broadcast!(nodes[1], false);
4362         check_added_monitors!(nodes[1], 1);
4363
4364         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4365         assert_eq!(node_txn.len(), 4); // ChannelMonitor: justice tx on revoked commitment, justice tx on revoked HTLC-timeout, adjusted justice tx, ChannelManager: local commitment tx
4366         assert_eq!(node_txn[0].input.len(), 2);
4367         check_spends!(node_txn[0], revoked_local_txn[0]);
4368         check_spends!(node_txn[1], chan_1.3);
4369         assert_eq!(node_txn[2].input.len(), 1);
4370         check_spends!(node_txn[2], revoked_htlc_txn[0]);
4371         assert_eq!(node_txn[3].input.len(), 1);
4372         check_spends!(node_txn[3], revoked_local_txn[0]);
4373
4374         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4375         nodes[1].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone(), node_txn[2].clone()] }, 1);
4376         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4377
4378         // Check B's ChannelMonitor was able to generate the right spendable output descriptor
4379         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4380         assert_eq!(spend_txn.len(), 2);
4381         check_spends!(spend_txn[0], node_txn[0]);
4382         check_spends!(spend_txn[1], node_txn[2]);
4383 }
4384
4385 #[test]
4386 fn test_static_spendable_outputs_justice_tx_revoked_htlc_success_tx() {
4387         let chanmon_cfgs = create_chanmon_cfgs(2);
4388         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4389         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4390         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4391
4392         // Create some initial channels
4393         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4394
4395         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
4396         let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan_1.2);
4397         assert_eq!(revoked_local_txn[0].input.len(), 1);
4398         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
4399
4400         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
4401
4402         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4403         // B will generate HTLC-Success from revoked commitment tx
4404         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
4405         check_closed_broadcast!(nodes[1], false);
4406         check_added_monitors!(nodes[1], 1);
4407         let revoked_htlc_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4408
4409         assert_eq!(revoked_htlc_txn.len(), 2);
4410         assert_eq!(revoked_htlc_txn[0].input.len(), 1);
4411         assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4412         check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
4413
4414         // A will generate justice tx from B's revoked commitment/HTLC tx
4415         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()] }, 1);
4416         check_closed_broadcast!(nodes[0], false);
4417         check_added_monitors!(nodes[0], 1);
4418
4419         let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4420         assert_eq!(node_txn.len(), 3); // ChannelMonitor: justice tx on revoked commitment, justice tx on revoked HTLC-success, ChannelManager: local commitment tx
4421         assert_eq!(node_txn[2].input.len(), 1);
4422         check_spends!(node_txn[2], revoked_htlc_txn[0]);
4423
4424         let header_1 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4425         nodes[0].block_notifier.block_connected(&Block { header: header_1, txdata: vec![node_txn[0].clone(), node_txn[2].clone()] }, 1);
4426         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 1, true, header.bitcoin_hash());
4427
4428         // Check A's ChannelMonitor was able to generate the right spendable output descriptor
4429         let spend_txn = check_spendable_outputs!(nodes[0], 1);
4430         assert_eq!(spend_txn.len(), 5); // Duplicated SpendableOutput due to block rescan after revoked htlc output tracking
4431         assert_eq!(spend_txn[0], spend_txn[1]);
4432         assert_eq!(spend_txn[0], spend_txn[2]);
4433         check_spends!(spend_txn[0], revoked_local_txn[0]); // spending to_remote output from revoked local tx
4434         check_spends!(spend_txn[3], node_txn[0]); // spending justice tx output from revoked local tx htlc received output
4435         check_spends!(spend_txn[4], node_txn[2]); // spending justice tx output on htlc success tx
4436 }
4437
4438 #[test]
4439 fn test_onchain_to_onchain_claim() {
4440         // Test that in case of channel closure, we detect the state of output thanks to
4441         // ChainWatchInterface and claim HTLC on downstream peer's remote commitment tx.
4442         // First, have C claim an HTLC against its own latest commitment transaction.
4443         // Then, broadcast these to B, which should update the monitor downstream on the A<->B
4444         // channel.
4445         // Finally, check that B will claim the HTLC output if A's latest commitment transaction
4446         // gets broadcast.
4447
4448         let chanmon_cfgs = create_chanmon_cfgs(3);
4449         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
4450         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
4451         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
4452
4453         // Create some initial channels
4454         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4455         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
4456
4457         // Rebalance the network a bit by relaying one payment through all the channels ...
4458         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
4459         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000, 8_000_000);
4460
4461         let (payment_preimage, _payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
4462         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
4463         let commitment_tx = get_local_commitment_txn!(nodes[2], chan_2.2);
4464         check_spends!(commitment_tx[0], chan_2.3);
4465         nodes[2].node.claim_funds(payment_preimage, &None, 3_000_000);
4466         check_added_monitors!(nodes[2], 1);
4467         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
4468         assert!(updates.update_add_htlcs.is_empty());
4469         assert!(updates.update_fail_htlcs.is_empty());
4470         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
4471         assert!(updates.update_fail_malformed_htlcs.is_empty());
4472
4473         nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
4474         check_closed_broadcast!(nodes[2], false);
4475         check_added_monitors!(nodes[2], 1);
4476
4477         let c_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
4478         assert_eq!(c_txn.len(), 3);
4479         assert_eq!(c_txn[0], c_txn[2]);
4480         assert_eq!(commitment_tx[0], c_txn[1]);
4481         check_spends!(c_txn[1], chan_2.3);
4482         check_spends!(c_txn[2], c_txn[1]);
4483         assert_eq!(c_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
4484         assert_eq!(c_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4485         assert!(c_txn[0].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
4486         assert_eq!(c_txn[0].lock_time, 0); // Success tx
4487
4488         // 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
4489         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![c_txn[1].clone(), c_txn[2].clone()]}, 1);
4490         {
4491                 let mut b_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4492                 // ChannelMonitor: claim tx, ChannelManager: local commitment tx + HTLC-timeout tx
4493                 assert_eq!(b_txn.len(), 3);
4494                 check_spends!(b_txn[1], chan_2.3); // B local commitment tx, issued by ChannelManager
4495                 check_spends!(b_txn[2], b_txn[1]); // HTLC-Timeout on B local commitment tx, issued by ChannelManager
4496                 assert_eq!(b_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4497                 assert!(b_txn[2].output[0].script_pubkey.is_v0_p2wsh()); // revokeable output
4498                 assert_ne!(b_txn[2].lock_time, 0); // Timeout tx
4499                 check_spends!(b_txn[0], c_txn[1]); // timeout tx on C remote commitment tx, issued by ChannelMonitor, * 2 due to block rescan
4500                 assert_eq!(b_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4501                 assert!(b_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
4502                 assert_ne!(b_txn[2].lock_time, 0); // Timeout tx
4503                 b_txn.clear();
4504         }
4505         check_added_monitors!(nodes[1], 1);
4506         let msg_events = nodes[1].node.get_and_clear_pending_msg_events();
4507         check_added_monitors!(nodes[1], 1);
4508         match msg_events[0] {
4509                 MessageSendEvent::BroadcastChannelUpdate {  .. } => {},
4510                 _ => panic!("Unexpected event"),
4511         }
4512         match msg_events[1] {
4513                 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, .. } } => {
4514                         assert!(update_add_htlcs.is_empty());
4515                         assert!(update_fail_htlcs.is_empty());
4516                         assert_eq!(update_fulfill_htlcs.len(), 1);
4517                         assert!(update_fail_malformed_htlcs.is_empty());
4518                         assert_eq!(nodes[0].node.get_our_node_id(), *node_id);
4519                 },
4520                 _ => panic!("Unexpected event"),
4521         };
4522         // Broadcast A's commitment tx on B's chain to see if we are able to claim inbound HTLC with our HTLC-Success tx
4523         let commitment_tx = get_local_commitment_txn!(nodes[0], chan_1.2);
4524         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_tx[0].clone()]}, 1);
4525         let b_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4526         // ChannelMonitor: HTLC-Success tx, ChannelManager: local commitment tx + HTLC-Success tx
4527         assert_eq!(b_txn.len(), 3);
4528         check_spends!(b_txn[1], chan_1.3);
4529         check_spends!(b_txn[2], b_txn[1]);
4530         check_spends!(b_txn[0], commitment_tx[0]);
4531         assert_eq!(b_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4532         assert!(b_txn[0].output[0].script_pubkey.is_v0_p2wpkh()); // direct payment
4533         assert_eq!(b_txn[0].lock_time, 0); // Success tx
4534
4535         check_closed_broadcast!(nodes[1], false);
4536         check_added_monitors!(nodes[1], 1);
4537 }
4538
4539 #[test]
4540 fn test_duplicate_payment_hash_one_failure_one_success() {
4541         // Topology : A --> B --> C
4542         // We route 2 payments with same hash between B and C, one will be timeout, the other successfully claim
4543         let chanmon_cfgs = create_chanmon_cfgs(3);
4544         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
4545         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
4546         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
4547
4548         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4549         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
4550
4551         let (our_payment_preimage, duplicate_payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 900000);
4552         *nodes[0].network_payment_count.borrow_mut() -= 1;
4553         assert_eq!(route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 900000).1, duplicate_payment_hash);
4554
4555         let commitment_txn = get_local_commitment_txn!(nodes[2], chan_2.2);
4556         assert_eq!(commitment_txn[0].input.len(), 1);
4557         check_spends!(commitment_txn[0], chan_2.3);
4558
4559         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4560         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![commitment_txn[0].clone()] }, 1);
4561         check_closed_broadcast!(nodes[1], false);
4562         check_added_monitors!(nodes[1], 1);
4563
4564         let htlc_timeout_tx;
4565         { // Extract one of the two HTLC-Timeout transaction
4566                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4567                 // ChannelMonitor: timeout tx * 2, ChannelManager: local commitment tx + HTLC-timeout * 2
4568                 assert_eq!(node_txn.len(), 5);
4569                 check_spends!(node_txn[0], commitment_txn[0]);
4570                 assert_eq!(node_txn[0].input.len(), 1);
4571                 check_spends!(node_txn[1], commitment_txn[0]);
4572                 assert_eq!(node_txn[1].input.len(), 1);
4573                 assert_ne!(node_txn[0].input[0], node_txn[1].input[0]);
4574                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4575                 assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4576                 check_spends!(node_txn[2], chan_2.3);
4577                 check_spends!(node_txn[3], node_txn[2]);
4578                 check_spends!(node_txn[4], node_txn[2]);
4579                 htlc_timeout_tx = node_txn[1].clone();
4580         }
4581
4582         nodes[2].node.claim_funds(our_payment_preimage, &None, 900_000);
4583         nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![commitment_txn[0].clone()] }, 1);
4584         check_added_monitors!(nodes[2], 3);
4585         let events = nodes[2].node.get_and_clear_pending_msg_events();
4586         match events[0] {
4587                 MessageSendEvent::UpdateHTLCs { .. } => {},
4588                 _ => panic!("Unexpected event"),
4589         }
4590         match events[1] {
4591                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4592                 _ => panic!("Unexepected event"),
4593         }
4594         let htlc_success_txn: Vec<_> = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
4595         assert_eq!(htlc_success_txn.len(), 5); // ChannelMonitor: HTLC-Success txn (*2 due to 2-HTLC outputs), ChannelManager: local commitment tx + HTLC-Success txn (*2 due to 2-HTLC outputs)
4596         check_spends!(htlc_success_txn[2], chan_2.3);
4597         check_spends!(htlc_success_txn[3], htlc_success_txn[2]);
4598         check_spends!(htlc_success_txn[4], htlc_success_txn[2]);
4599         assert_eq!(htlc_success_txn[0], htlc_success_txn[3]);
4600         assert_eq!(htlc_success_txn[0].input.len(), 1);
4601         assert_eq!(htlc_success_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4602         assert_eq!(htlc_success_txn[1], htlc_success_txn[4]);
4603         assert_eq!(htlc_success_txn[1].input.len(), 1);
4604         assert_eq!(htlc_success_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4605         assert_ne!(htlc_success_txn[0].input[0], htlc_success_txn[1].input[0]);
4606         check_spends!(htlc_success_txn[0], commitment_txn[0]);
4607         check_spends!(htlc_success_txn[1], commitment_txn[0]);
4608
4609         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![htlc_timeout_tx] }, 200);
4610         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 200, true, header.bitcoin_hash());
4611         expect_pending_htlcs_forwardable!(nodes[1]);
4612         let htlc_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
4613         assert!(htlc_updates.update_add_htlcs.is_empty());
4614         assert_eq!(htlc_updates.update_fail_htlcs.len(), 1);
4615         assert_eq!(htlc_updates.update_fail_htlcs[0].htlc_id, 1);
4616         assert!(htlc_updates.update_fulfill_htlcs.is_empty());
4617         assert!(htlc_updates.update_fail_malformed_htlcs.is_empty());
4618         check_added_monitors!(nodes[1], 1);
4619
4620         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &htlc_updates.update_fail_htlcs[0]);
4621         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
4622         {
4623                 commitment_signed_dance!(nodes[0], nodes[1], &htlc_updates.commitment_signed, false, true);
4624                 let events = nodes[0].node.get_and_clear_pending_msg_events();
4625                 assert_eq!(events.len(), 1);
4626                 match events[0] {
4627                         MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelClosed { .. }  } => {
4628                         },
4629                         _ => { panic!("Unexpected event"); }
4630                 }
4631         }
4632         let events = nodes[0].node.get_and_clear_pending_events();
4633         match events[0] {
4634                 Event::PaymentFailed { ref payment_hash, .. } => {
4635                         assert_eq!(*payment_hash, duplicate_payment_hash);
4636                 }
4637                 _ => panic!("Unexpected event"),
4638         }
4639
4640         // Solve 2nd HTLC by broadcasting on B's chain HTLC-Success Tx from C
4641         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![htlc_success_txn[0].clone()] }, 200);
4642         let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
4643         assert!(updates.update_add_htlcs.is_empty());
4644         assert!(updates.update_fail_htlcs.is_empty());
4645         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
4646         assert_eq!(updates.update_fulfill_htlcs[0].htlc_id, 0);
4647         assert!(updates.update_fail_malformed_htlcs.is_empty());
4648         check_added_monitors!(nodes[1], 1);
4649
4650         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
4651         commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false);
4652
4653         let events = nodes[0].node.get_and_clear_pending_events();
4654         match events[0] {
4655                 Event::PaymentSent { ref payment_preimage } => {
4656                         assert_eq!(*payment_preimage, our_payment_preimage);
4657                 }
4658                 _ => panic!("Unexpected event"),
4659         }
4660 }
4661
4662 #[test]
4663 fn test_dynamic_spendable_outputs_local_htlc_success_tx() {
4664         let chanmon_cfgs = create_chanmon_cfgs(2);
4665         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4666         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4667         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4668
4669         // Create some initial channels
4670         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4671
4672         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9000000).0;
4673         let local_txn = get_local_commitment_txn!(nodes[1], chan_1.2);
4674         assert_eq!(local_txn[0].input.len(), 1);
4675         check_spends!(local_txn[0], chan_1.3);
4676
4677         // Give B knowledge of preimage to be able to generate a local HTLC-Success Tx
4678         nodes[1].node.claim_funds(payment_preimage, &None, 9_000_000);
4679         check_added_monitors!(nodes[1], 1);
4680         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4681         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![local_txn[0].clone()] }, 1);
4682         check_added_monitors!(nodes[1], 1);
4683         let events = nodes[1].node.get_and_clear_pending_msg_events();
4684         match events[0] {
4685                 MessageSendEvent::UpdateHTLCs { .. } => {},
4686                 _ => panic!("Unexpected event"),
4687         }
4688         match events[1] {
4689                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
4690                 _ => panic!("Unexepected event"),
4691         }
4692         let node_txn = {
4693                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
4694                 assert_eq!(node_txn[0].input.len(), 1);
4695                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4696                 check_spends!(node_txn[0], local_txn[0]);
4697                 vec![node_txn[0].clone(), node_txn[2].clone()]
4698         };
4699
4700         let header_201 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4701         nodes[1].block_notifier.block_connected(&Block { header: header_201, txdata: node_txn.clone() }, 201);
4702         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 201, true, header_201.bitcoin_hash());
4703
4704         // Verify that B is able to spend its own HTLC-Success tx thanks to spendable output event given back by its ChannelMonitor
4705         let spend_txn = check_spendable_outputs!(nodes[1], 1);
4706         assert_eq!(spend_txn.len(), 2);
4707         check_spends!(spend_txn[0], node_txn[0]);
4708         check_spends!(spend_txn[1], node_txn[1]);
4709 }
4710
4711 fn do_test_fail_backwards_unrevoked_remote_announce(deliver_last_raa: bool, announce_latest: bool) {
4712         // Test that we fail backwards the full set of HTLCs we need to when remote broadcasts an
4713         // unrevoked commitment transaction.
4714         // This includes HTLCs which were below the dust threshold as well as HTLCs which were awaiting
4715         // a remote RAA before they could be failed backwards (and combinations thereof).
4716         // We also test duplicate-hash HTLCs by adding two nodes on each side of the target nodes which
4717         // use the same payment hashes.
4718         // Thus, we use a six-node network:
4719         //
4720         // A \         / E
4721         //    - C - D -
4722         // B /         \ F
4723         // And test where C fails back to A/B when D announces its latest commitment transaction
4724         let chanmon_cfgs = create_chanmon_cfgs(6);
4725         let node_cfgs = create_node_cfgs(6, &chanmon_cfgs);
4726         let node_chanmgrs = create_node_chanmgrs(6, &node_cfgs, &[None, None, None, None, None, None]);
4727         let nodes = create_network(6, &node_cfgs, &node_chanmgrs);
4728
4729         create_announced_chan_between_nodes(&nodes, 0, 2, InitFeatures::supported(), InitFeatures::supported());
4730         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
4731         let chan = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::supported(), InitFeatures::supported());
4732         create_announced_chan_between_nodes(&nodes, 3, 4, InitFeatures::supported(), InitFeatures::supported());
4733         create_announced_chan_between_nodes(&nodes, 3, 5, InitFeatures::supported(), InitFeatures::supported());
4734
4735         // Rebalance and check output sanity...
4736         send_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 500000, 500_000);
4737         send_payment(&nodes[1], &[&nodes[2], &nodes[3], &nodes[5]], 500000, 500_000);
4738         assert_eq!(get_local_commitment_txn!(nodes[3], chan.2)[0].output.len(), 2);
4739
4740         let ds_dust_limit = nodes[3].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
4741         // 0th HTLC:
4742         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
4743         // 1st HTLC:
4744         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
4745         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();
4746         // 2nd HTLC:
4747         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
4748         // 3rd HTLC:
4749         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
4750         // 4th HTLC:
4751         let (_, payment_hash_3) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4752         // 5th HTLC:
4753         let (_, payment_hash_4) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4754         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
4755         // 6th HTLC:
4756         send_along_route_with_hash(&nodes[1], route.clone(), &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_3);
4757         // 7th HTLC:
4758         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_4);
4759
4760         // 8th HTLC:
4761         let (_, payment_hash_5) = route_payment(&nodes[0], &[&nodes[2], &nodes[3], &nodes[4]], 1000000);
4762         // 9th HTLC:
4763         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();
4764         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
4765
4766         // 10th HTLC:
4767         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
4768         // 11th HTLC:
4769         let route = nodes[1].router.get_route(&nodes[5].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
4770         send_along_route_with_hash(&nodes[1], route, &[&nodes[2], &nodes[3], &nodes[5]], 1000000, payment_hash_6);
4771
4772         // Double-check that six of the new HTLC were added
4773         // We now have six HTLCs pending over the dust limit and six HTLCs under the dust limit (ie,
4774         // with to_local and to_remote outputs, 8 outputs and 6 HTLCs not included).
4775         assert_eq!(get_local_commitment_txn!(nodes[3], chan.2).len(), 1);
4776         assert_eq!(get_local_commitment_txn!(nodes[3], chan.2)[0].output.len(), 8);
4777
4778         // Now fail back three of the over-dust-limit and three of the under-dust-limit payments in one go.
4779         // Fail 0th below-dust, 4th above-dust, 8th above-dust, 10th below-dust HTLCs
4780         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_1, &None));
4781         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_3, &None));
4782         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_5, &None));
4783         assert!(nodes[4].node.fail_htlc_backwards(&payment_hash_6, &None));
4784         check_added_monitors!(nodes[4], 0);
4785         expect_pending_htlcs_forwardable!(nodes[4]);
4786         check_added_monitors!(nodes[4], 1);
4787
4788         let four_removes = get_htlc_update_msgs!(nodes[4], nodes[3].node.get_our_node_id());
4789         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[0]);
4790         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[1]);
4791         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[2]);
4792         nodes[3].node.handle_update_fail_htlc(&nodes[4].node.get_our_node_id(), &four_removes.update_fail_htlcs[3]);
4793         commitment_signed_dance!(nodes[3], nodes[4], four_removes.commitment_signed, false);
4794
4795         // Fail 3rd below-dust and 7th above-dust HTLCs
4796         assert!(nodes[5].node.fail_htlc_backwards(&payment_hash_2, &None));
4797         assert!(nodes[5].node.fail_htlc_backwards(&payment_hash_4, &None));
4798         check_added_monitors!(nodes[5], 0);
4799         expect_pending_htlcs_forwardable!(nodes[5]);
4800         check_added_monitors!(nodes[5], 1);
4801
4802         let two_removes = get_htlc_update_msgs!(nodes[5], nodes[3].node.get_our_node_id());
4803         nodes[3].node.handle_update_fail_htlc(&nodes[5].node.get_our_node_id(), &two_removes.update_fail_htlcs[0]);
4804         nodes[3].node.handle_update_fail_htlc(&nodes[5].node.get_our_node_id(), &two_removes.update_fail_htlcs[1]);
4805         commitment_signed_dance!(nodes[3], nodes[5], two_removes.commitment_signed, false);
4806
4807         let ds_prev_commitment_tx = get_local_commitment_txn!(nodes[3], chan.2);
4808
4809         expect_pending_htlcs_forwardable!(nodes[3]);
4810         check_added_monitors!(nodes[3], 1);
4811         let six_removes = get_htlc_update_msgs!(nodes[3], nodes[2].node.get_our_node_id());
4812         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[0]);
4813         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[1]);
4814         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[2]);
4815         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[3]);
4816         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[4]);
4817         nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &six_removes.update_fail_htlcs[5]);
4818         if deliver_last_raa {
4819                 commitment_signed_dance!(nodes[2], nodes[3], six_removes.commitment_signed, false);
4820         } else {
4821                 let _cs_last_raa = commitment_signed_dance!(nodes[2], nodes[3], six_removes.commitment_signed, false, true, false, true);
4822         }
4823
4824         // D's latest commitment transaction now contains 1st + 2nd + 9th HTLCs (implicitly, they're
4825         // below the dust limit) and the 5th + 6th + 11th HTLCs. It has failed back the 0th, 3rd, 4th,
4826         // 7th, 8th, and 10th, but as we haven't yet delivered the final RAA to C, the fails haven't
4827         // propagated back to A/B yet (and D has two unrevoked commitment transactions).
4828         //
4829         // We now broadcast the latest commitment transaction, which *should* result in failures for
4830         // the 0th, 1st, 2nd, 3rd, 4th, 7th, 8th, 9th, and 10th HTLCs, ie all the below-dust HTLCs and
4831         // the non-broadcast above-dust HTLCs.
4832         //
4833         // Alternatively, we may broadcast the previous commitment transaction, which should only
4834         // result in failures for the below-dust HTLCs, ie the 0th, 1st, 2nd, 3rd, 9th, and 10th HTLCs.
4835         let ds_last_commitment_tx = get_local_commitment_txn!(nodes[3], chan.2);
4836
4837         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4838         if announce_latest {
4839                 nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![ds_last_commitment_tx[0].clone()]}, 1);
4840         } else {
4841                 nodes[2].block_notifier.block_connected(&Block { header, txdata: vec![ds_prev_commitment_tx[0].clone()]}, 1);
4842         }
4843         connect_blocks(&nodes[2].block_notifier, ANTI_REORG_DELAY - 1, 1, true,  header.bitcoin_hash());
4844         check_closed_broadcast!(nodes[2], false);
4845         expect_pending_htlcs_forwardable!(nodes[2]);
4846         check_added_monitors!(nodes[2], 3);
4847
4848         let cs_msgs = nodes[2].node.get_and_clear_pending_msg_events();
4849         assert_eq!(cs_msgs.len(), 2);
4850         let mut a_done = false;
4851         for msg in cs_msgs {
4852                 match msg {
4853                         MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
4854                                 // Both under-dust HTLCs and the one above-dust HTLC that we had already failed
4855                                 // should be failed-backwards here.
4856                                 let target = if *node_id == nodes[0].node.get_our_node_id() {
4857                                         // If announce_latest, expect 0th, 1st, 4th, 8th, 10th HTLCs, else only 0th, 1st, 10th below-dust HTLCs
4858                                         for htlc in &updates.update_fail_htlcs {
4859                                                 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 });
4860                                         }
4861                                         assert_eq!(updates.update_fail_htlcs.len(), if announce_latest { 5 } else { 3 });
4862                                         assert!(!a_done);
4863                                         a_done = true;
4864                                         &nodes[0]
4865                                 } else {
4866                                         // If announce_latest, expect 2nd, 3rd, 7th, 9th HTLCs, else only 2nd, 3rd, 9th below-dust HTLCs
4867                                         for htlc in &updates.update_fail_htlcs {
4868                                                 assert!(htlc.htlc_id == 1 || htlc.htlc_id == 2 || htlc.htlc_id == 5 || if announce_latest { htlc.htlc_id == 4 } else { false });
4869                                         }
4870                                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
4871                                         assert_eq!(updates.update_fail_htlcs.len(), if announce_latest { 4 } else { 3 });
4872                                         &nodes[1]
4873                                 };
4874                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
4875                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[1]);
4876                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[2]);
4877                                 if announce_latest {
4878                                         target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[3]);
4879                                         if *node_id == nodes[0].node.get_our_node_id() {
4880                                                 target.node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[4]);
4881                                         }
4882                                 }
4883                                 commitment_signed_dance!(target, nodes[2], updates.commitment_signed, false, true);
4884                         },
4885                         _ => panic!("Unexpected event"),
4886                 }
4887         }
4888
4889         let as_events = nodes[0].node.get_and_clear_pending_events();
4890         assert_eq!(as_events.len(), if announce_latest { 5 } else { 3 });
4891         let mut as_failds = HashSet::new();
4892         for event in as_events.iter() {
4893                 if let &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } = event {
4894                         assert!(as_failds.insert(*payment_hash));
4895                         if *payment_hash != payment_hash_2 {
4896                                 assert_eq!(*rejected_by_dest, deliver_last_raa);
4897                         } else {
4898                                 assert!(!rejected_by_dest);
4899                         }
4900                 } else { panic!("Unexpected event"); }
4901         }
4902         assert!(as_failds.contains(&payment_hash_1));
4903         assert!(as_failds.contains(&payment_hash_2));
4904         if announce_latest {
4905                 assert!(as_failds.contains(&payment_hash_3));
4906                 assert!(as_failds.contains(&payment_hash_5));
4907         }
4908         assert!(as_failds.contains(&payment_hash_6));
4909
4910         let bs_events = nodes[1].node.get_and_clear_pending_events();
4911         assert_eq!(bs_events.len(), if announce_latest { 4 } else { 3 });
4912         let mut bs_failds = HashSet::new();
4913         for event in bs_events.iter() {
4914                 if let &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } = event {
4915                         assert!(bs_failds.insert(*payment_hash));
4916                         if *payment_hash != payment_hash_1 && *payment_hash != payment_hash_5 {
4917                                 assert_eq!(*rejected_by_dest, deliver_last_raa);
4918                         } else {
4919                                 assert!(!rejected_by_dest);
4920                         }
4921                 } else { panic!("Unexpected event"); }
4922         }
4923         assert!(bs_failds.contains(&payment_hash_1));
4924         assert!(bs_failds.contains(&payment_hash_2));
4925         if announce_latest {
4926                 assert!(bs_failds.contains(&payment_hash_4));
4927         }
4928         assert!(bs_failds.contains(&payment_hash_5));
4929
4930         // For each HTLC which was not failed-back by normal process (ie deliver_last_raa), we should
4931         // get a PaymentFailureNetworkUpdate. A should have gotten 4 HTLCs which were failed-back due
4932         // to unknown-preimage-etc, B should have gotten 2. Thus, in the
4933         // announce_latest && deliver_last_raa case, we should have 5-4=1 and 4-2=2
4934         // PaymentFailureNetworkUpdates.
4935         let as_msg_events = nodes[0].node.get_and_clear_pending_msg_events();
4936         assert_eq!(as_msg_events.len(), if deliver_last_raa { 1 } else if !announce_latest { 3 } else { 5 });
4937         let bs_msg_events = nodes[1].node.get_and_clear_pending_msg_events();
4938         assert_eq!(bs_msg_events.len(), if deliver_last_raa { 2 } else if !announce_latest { 3 } else { 4 });
4939         for event in as_msg_events.iter().chain(bs_msg_events.iter()) {
4940                 match event {
4941                         &MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
4942                         _ => panic!("Unexpected event"),
4943                 }
4944         }
4945 }
4946
4947 #[test]
4948 fn test_fail_backwards_latest_remote_announce_a() {
4949         do_test_fail_backwards_unrevoked_remote_announce(false, true);
4950 }
4951
4952 #[test]
4953 fn test_fail_backwards_latest_remote_announce_b() {
4954         do_test_fail_backwards_unrevoked_remote_announce(true, true);
4955 }
4956
4957 #[test]
4958 fn test_fail_backwards_previous_remote_announce() {
4959         do_test_fail_backwards_unrevoked_remote_announce(false, false);
4960         // Note that true, true doesn't make sense as it implies we announce a revoked state, which is
4961         // tested for in test_commitment_revoked_fail_backward_exhaustive()
4962 }
4963
4964 #[test]
4965 fn test_dynamic_spendable_outputs_local_htlc_timeout_tx() {
4966         let chanmon_cfgs = create_chanmon_cfgs(2);
4967         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
4968         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
4969         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
4970
4971         // Create some initial channels
4972         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
4973
4974         let (_, our_payment_hash) = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9000000);
4975         let local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
4976         assert_eq!(local_txn[0].input.len(), 1);
4977         check_spends!(local_txn[0], chan_1.3);
4978
4979         // Timeout HTLC on A's chain and so it can generate a HTLC-Timeout tx
4980         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4981         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![local_txn[0].clone()] }, 200);
4982         check_closed_broadcast!(nodes[0], false);
4983         check_added_monitors!(nodes[0], 1);
4984
4985         let htlc_timeout = {
4986                 let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
4987                 assert_eq!(node_txn[0].input.len(), 1);
4988                 assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
4989                 check_spends!(node_txn[0], local_txn[0]);
4990                 node_txn[0].clone()
4991         };
4992
4993         let header_201 = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
4994         nodes[0].block_notifier.block_connected(&Block { header: header_201, txdata: vec![htlc_timeout.clone()] }, 201);
4995         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 201, true, header_201.bitcoin_hash());
4996         let events = nodes[0].node.get_and_clear_pending_events();
4997         assert_eq!(events.len(), 1);
4998         match events[0] {
4999                 Event::PaymentFailed { payment_hash, .. } => {
5000                         assert_eq!(payment_hash, our_payment_hash);
5001                 },
5002                 _ => panic!("Unexpected event"),
5003         }
5004
5005         // Verify that A is able to spend its own HTLC-Timeout tx thanks to spendable output event given back by its ChannelMonitor
5006         let spend_txn = check_spendable_outputs!(nodes[0], 1);
5007         assert_eq!(spend_txn.len(), 3);
5008         assert_eq!(spend_txn[0], spend_txn[1]);
5009         check_spends!(spend_txn[0], local_txn[0]);
5010         check_spends!(spend_txn[2], htlc_timeout);
5011 }
5012
5013 #[test]
5014 fn test_static_output_closing_tx() {
5015         let chanmon_cfgs = create_chanmon_cfgs(2);
5016         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5017         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5018         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5019
5020         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
5021
5022         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
5023         let closing_tx = close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true).2;
5024
5025         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5026         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![closing_tx.clone()] }, 0);
5027         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 0, true, header.bitcoin_hash());
5028
5029         let spend_txn = check_spendable_outputs!(nodes[0], 2);
5030         assert_eq!(spend_txn.len(), 1);
5031         check_spends!(spend_txn[0], closing_tx);
5032
5033         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![closing_tx.clone()] }, 0);
5034         connect_blocks(&nodes[1].block_notifier, ANTI_REORG_DELAY - 1, 0, true, header.bitcoin_hash());
5035
5036         let spend_txn = check_spendable_outputs!(nodes[1], 2);
5037         assert_eq!(spend_txn.len(), 1);
5038         check_spends!(spend_txn[0], closing_tx);
5039 }
5040
5041 fn do_htlc_claim_local_commitment_only(use_dust: bool) {
5042         let chanmon_cfgs = create_chanmon_cfgs(2);
5043         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5044         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5045         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5046         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
5047
5048         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1]], if use_dust { 50000 } else { 3000000 });
5049
5050         // Claim the payment, but don't deliver A's commitment_signed, resulting in the HTLC only being
5051         // present in B's local commitment transaction, but none of A's commitment transactions.
5052         assert!(nodes[1].node.claim_funds(our_payment_preimage, &None, if use_dust { 50_000 } else { 3_000_000 }));
5053         check_added_monitors!(nodes[1], 1);
5054
5055         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5056         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fulfill_htlcs[0]);
5057         let events = nodes[0].node.get_and_clear_pending_events();
5058         assert_eq!(events.len(), 1);
5059         match events[0] {
5060                 Event::PaymentSent { payment_preimage } => {
5061                         assert_eq!(payment_preimage, our_payment_preimage);
5062                 },
5063                 _ => panic!("Unexpected event"),
5064         }
5065
5066         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_updates.commitment_signed);
5067         check_added_monitors!(nodes[0], 1);
5068         let as_updates = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5069         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_updates.0);
5070         check_added_monitors!(nodes[1], 1);
5071
5072         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5073         for i in 1..TEST_FINAL_CLTV - CLTV_CLAIM_BUFFER + CHAN_CONFIRM_DEPTH + 1 {
5074                 nodes[1].block_notifier.block_connected_checked(&header, i, &Vec::new(), &Vec::new());
5075                 header.prev_blockhash = header.bitcoin_hash();
5076         }
5077         test_txn_broadcast(&nodes[1], &chan, None, if use_dust { HTLCType::NONE } else { HTLCType::SUCCESS });
5078         check_closed_broadcast!(nodes[1], false);
5079         check_added_monitors!(nodes[1], 1);
5080 }
5081
5082 fn do_htlc_claim_current_remote_commitment_only(use_dust: bool) {
5083         let chanmon_cfgs = create_chanmon_cfgs(2);
5084         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5085         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5086         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5087         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
5088
5089         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();
5090         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
5091         nodes[0].node.send_payment(&route, payment_hash, &None).unwrap();
5092         check_added_monitors!(nodes[0], 1);
5093
5094         let _as_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5095
5096         // As far as A is concerned, the HTLC is now present only in the latest remote commitment
5097         // transaction, however it is not in A's latest local commitment, so we can just broadcast that
5098         // to "time out" the HTLC.
5099
5100         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5101
5102         for i in 1..TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS + CHAN_CONFIRM_DEPTH + 1 {
5103                 nodes[0].block_notifier.block_connected(&Block { header, txdata: Vec::new()}, i);
5104                 header.prev_blockhash = header.bitcoin_hash();
5105         }
5106         test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
5107         check_closed_broadcast!(nodes[0], false);
5108         check_added_monitors!(nodes[0], 1);
5109 }
5110
5111 fn do_htlc_claim_previous_remote_commitment_only(use_dust: bool, check_revoke_no_close: bool) {
5112         let chanmon_cfgs = create_chanmon_cfgs(3);
5113         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
5114         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
5115         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
5116         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
5117
5118         // Fail the payment, but don't deliver A's final RAA, resulting in the HTLC only being present
5119         // in B's previous (unrevoked) commitment transaction, but none of A's commitment transactions.
5120         // Also optionally test that we *don't* fail the channel in case the commitment transaction was
5121         // actually revoked.
5122         let htlc_value = if use_dust { 50000 } else { 3000000 };
5123         let (_, our_payment_hash) = route_payment(&nodes[0], &[&nodes[1]], htlc_value);
5124         assert!(nodes[1].node.fail_htlc_backwards(&our_payment_hash, &None));
5125         expect_pending_htlcs_forwardable!(nodes[1]);
5126         check_added_monitors!(nodes[1], 1);
5127
5128         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5129         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fail_htlcs[0]);
5130         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_updates.commitment_signed);
5131         check_added_monitors!(nodes[0], 1);
5132         let as_updates = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5133         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_updates.0);
5134         check_added_monitors!(nodes[1], 1);
5135         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_updates.1);
5136         check_added_monitors!(nodes[1], 1);
5137         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
5138
5139         if check_revoke_no_close {
5140                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
5141                 check_added_monitors!(nodes[0], 1);
5142         }
5143
5144         let mut header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5145         for i in 1..TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS + CHAN_CONFIRM_DEPTH + 1 {
5146                 nodes[0].block_notifier.block_connected_checked(&header, i, &Vec::new(), &Vec::new());
5147                 header.prev_blockhash = header.bitcoin_hash();
5148         }
5149         if !check_revoke_no_close {
5150                 test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
5151                 check_closed_broadcast!(nodes[0], false);
5152                 check_added_monitors!(nodes[0], 1);
5153         } else {
5154                 let events = nodes[0].node.get_and_clear_pending_events();
5155                 assert_eq!(events.len(), 1);
5156                 match events[0] {
5157                         Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
5158                                 assert_eq!(payment_hash, our_payment_hash);
5159                                 assert!(rejected_by_dest);
5160                         },
5161                         _ => panic!("Unexpected event"),
5162                 }
5163         }
5164 }
5165
5166 // Test that we close channels on-chain when broadcastable HTLCs reach their timeout window.
5167 // There are only a few cases to test here:
5168 //  * its not really normative behavior, but we test that below-dust HTLCs "included" in
5169 //    broadcastable commitment transactions result in channel closure,
5170 //  * its included in an unrevoked-but-previous remote commitment transaction,
5171 //  * its included in the latest remote or local commitment transactions.
5172 // We test each of the three possible commitment transactions individually and use both dust and
5173 // non-dust HTLCs.
5174 // Note that we don't bother testing both outbound and inbound HTLC failures for each case, and we
5175 // assume they are handled the same across all six cases, as both outbound and inbound failures are
5176 // tested for at least one of the cases in other tests.
5177 #[test]
5178 fn htlc_claim_single_commitment_only_a() {
5179         do_htlc_claim_local_commitment_only(true);
5180         do_htlc_claim_local_commitment_only(false);
5181
5182         do_htlc_claim_current_remote_commitment_only(true);
5183         do_htlc_claim_current_remote_commitment_only(false);
5184 }
5185
5186 #[test]
5187 fn htlc_claim_single_commitment_only_b() {
5188         do_htlc_claim_previous_remote_commitment_only(true, false);
5189         do_htlc_claim_previous_remote_commitment_only(false, false);
5190         do_htlc_claim_previous_remote_commitment_only(true, true);
5191         do_htlc_claim_previous_remote_commitment_only(false, true);
5192 }
5193
5194 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>)
5195         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
5196                                 F2: FnMut(),
5197 {
5198         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);
5199 }
5200
5201 // test_case
5202 // 0: node1 fails backward
5203 // 1: final node fails backward
5204 // 2: payment completed but the user rejects the payment
5205 // 3: final node fails backward (but tamper onion payloads from node0)
5206 // 100: trigger error in the intermediate node and tamper returning fail_htlc
5207 // 200: trigger error in the final node and tamper returning fail_htlc
5208 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>)
5209         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
5210                                 F2: for <'a> FnMut(&'a mut msgs::UpdateFailHTLC),
5211                                 F3: FnMut(),
5212 {
5213
5214         // reset block height
5215         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5216         for ix in 0..nodes.len() {
5217                 nodes[ix].block_notifier.block_connected_checked(&header, 1, &[], &[]);
5218         }
5219
5220         macro_rules! expect_event {
5221                 ($node: expr, $event_type: path) => {{
5222                         let events = $node.node.get_and_clear_pending_events();
5223                         assert_eq!(events.len(), 1);
5224                         match events[0] {
5225                                 $event_type { .. } => {},
5226                                 _ => panic!("Unexpected event"),
5227                         }
5228                 }}
5229         }
5230
5231         macro_rules! expect_htlc_forward {
5232                 ($node: expr) => {{
5233                         expect_event!($node, Event::PendingHTLCsForwardable);
5234                         $node.node.process_pending_htlc_forwards();
5235                 }}
5236         }
5237
5238         // 0 ~~> 2 send payment
5239         nodes[0].node.send_payment(&route, payment_hash.clone(), &None).unwrap();
5240         check_added_monitors!(nodes[0], 1);
5241         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5242         // temper update_add (0 => 1)
5243         let mut update_add_0 = update_0.update_add_htlcs[0].clone();
5244         if test_case == 0 || test_case == 3 || test_case == 100 {
5245                 callback_msg(&mut update_add_0);
5246                 callback_node();
5247         }
5248         // 0 => 1 update_add & CS
5249         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add_0);
5250         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
5251
5252         let update_1_0 = match test_case {
5253                 0|100 => { // intermediate node failure; fail backward to 0
5254                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5255                         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));
5256                         update_1_0
5257                 },
5258                 1|2|3|200 => { // final node failure; forwarding to 2
5259                         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
5260                         // forwarding on 1
5261                         if test_case != 200 {
5262                                 callback_node();
5263                         }
5264                         expect_htlc_forward!(&nodes[1]);
5265
5266                         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
5267                         check_added_monitors!(&nodes[1], 1);
5268                         assert_eq!(update_1.update_add_htlcs.len(), 1);
5269                         // tamper update_add (1 => 2)
5270                         let mut update_add_1 = update_1.update_add_htlcs[0].clone();
5271                         if test_case != 3 && test_case != 200 {
5272                                 callback_msg(&mut update_add_1);
5273                         }
5274
5275                         // 1 => 2
5276                         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &update_add_1);
5277                         commitment_signed_dance!(nodes[2], nodes[1], update_1.commitment_signed, false, true);
5278
5279                         if test_case == 2 || test_case == 200 {
5280                                 expect_htlc_forward!(&nodes[2]);
5281                                 expect_event!(&nodes[2], Event::PaymentReceived);
5282                                 callback_node();
5283                                 expect_pending_htlcs_forwardable!(nodes[2]);
5284                         }
5285
5286                         let update_2_1 = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
5287                         if test_case == 2 || test_case == 200 {
5288                                 check_added_monitors!(&nodes[2], 1);
5289                         }
5290                         assert!(update_2_1.update_fail_htlcs.len() == 1);
5291
5292                         let mut fail_msg = update_2_1.update_fail_htlcs[0].clone();
5293                         if test_case == 200 {
5294                                 callback_fail(&mut fail_msg);
5295                         }
5296
5297                         // 2 => 1
5298                         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &fail_msg);
5299                         commitment_signed_dance!(nodes[1], nodes[2], update_2_1.commitment_signed, true);
5300
5301                         // backward fail on 1
5302                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
5303                         assert!(update_1_0.update_fail_htlcs.len() == 1);
5304                         update_1_0
5305                 },
5306                 _ => unreachable!(),
5307         };
5308
5309         // 1 => 0 commitment_signed_dance
5310         if update_1_0.update_fail_htlcs.len() > 0 {
5311                 let mut fail_msg = update_1_0.update_fail_htlcs[0].clone();
5312                 if test_case == 100 {
5313                         callback_fail(&mut fail_msg);
5314                 }
5315                 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
5316         } else {
5317                 nodes[0].node.handle_update_fail_malformed_htlc(&nodes[1].node.get_our_node_id(), &update_1_0.update_fail_malformed_htlcs[0]);
5318         };
5319
5320         commitment_signed_dance!(nodes[0], nodes[1], update_1_0.commitment_signed, false, true);
5321
5322         let events = nodes[0].node.get_and_clear_pending_events();
5323         assert_eq!(events.len(), 1);
5324         if let &Event::PaymentFailed { payment_hash:_, ref rejected_by_dest, ref error_code, error_data: _ } = &events[0] {
5325                 assert_eq!(*rejected_by_dest, !expected_retryable);
5326                 assert_eq!(*error_code, expected_error_code);
5327         } else {
5328                 panic!("Uexpected event");
5329         }
5330
5331         let events = nodes[0].node.get_and_clear_pending_msg_events();
5332         if expected_channel_update.is_some() {
5333                 assert_eq!(events.len(), 1);
5334                 match events[0] {
5335                         MessageSendEvent::PaymentFailureNetworkUpdate { ref update } => {
5336                                 match update {
5337                                         &HTLCFailChannelUpdate::ChannelUpdateMessage { .. } => {
5338                                                 if let HTLCFailChannelUpdate::ChannelUpdateMessage { .. } = expected_channel_update.unwrap() {} else {
5339                                                         panic!("channel_update not found!");
5340                                                 }
5341                                         },
5342                                         &HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id, ref is_permanent } => {
5343                                                 if let HTLCFailChannelUpdate::ChannelClosed { short_channel_id: ref expected_short_channel_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
5344                                                         assert!(*short_channel_id == *expected_short_channel_id);
5345                                                         assert!(*is_permanent == *expected_is_permanent);
5346                                                 } else {
5347                                                         panic!("Unexpected message event");
5348                                                 }
5349                                         },
5350                                         &HTLCFailChannelUpdate::NodeFailure { ref node_id, ref is_permanent } => {
5351                                                 if let HTLCFailChannelUpdate::NodeFailure { node_id: ref expected_node_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
5352                                                         assert!(*node_id == *expected_node_id);
5353                                                         assert!(*is_permanent == *expected_is_permanent);
5354                                                 } else {
5355                                                         panic!("Unexpected message event");
5356                                                 }
5357                                         },
5358                                 }
5359                         },
5360                         _ => panic!("Unexpected message event"),
5361                 }
5362         } else {
5363                 assert_eq!(events.len(), 0);
5364         }
5365 }
5366
5367 impl msgs::ChannelUpdate {
5368         fn dummy() -> msgs::ChannelUpdate {
5369                 use secp256k1::ffi::Signature as FFISignature;
5370                 use secp256k1::Signature;
5371                 msgs::ChannelUpdate {
5372                         signature: Signature::from(FFISignature::new()),
5373                         contents: msgs::UnsignedChannelUpdate {
5374                                 chain_hash: Sha256dHash::hash(&vec![0u8][..]),
5375                                 short_channel_id: 0,
5376                                 timestamp: 0,
5377                                 flags: 0,
5378                                 cltv_expiry_delta: 0,
5379                                 htlc_minimum_msat: 0,
5380                                 fee_base_msat: 0,
5381                                 fee_proportional_millionths: 0,
5382                                 excess_data: vec![],
5383                         }
5384                 }
5385         }
5386 }
5387
5388 struct BogusOnionHopData {
5389         data: Vec<u8>
5390 }
5391 impl BogusOnionHopData {
5392         fn new(orig: msgs::OnionHopData) -> Self {
5393                 Self { data: orig.encode() }
5394         }
5395 }
5396 impl Writeable for BogusOnionHopData {
5397         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
5398                 writer.write_all(&self.data[..])
5399         }
5400 }
5401
5402 #[test]
5403 fn test_onion_failure() {
5404         use ln::msgs::ChannelUpdate;
5405         use ln::channelmanager::CLTV_FAR_FAR_AWAY;
5406         use secp256k1;
5407
5408         const BADONION: u16 = 0x8000;
5409         const PERM: u16 = 0x4000;
5410         const NODE: u16 = 0x2000;
5411         const UPDATE: u16 = 0x1000;
5412
5413         let chanmon_cfgs = create_chanmon_cfgs(3);
5414         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
5415         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
5416         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
5417         for node in nodes.iter() {
5418                 *node.keys_manager.override_session_priv.lock().unwrap() = Some(SecretKey::from_slice(&[3; 32]).unwrap());
5419         }
5420         let channels = [create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()), create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported())];
5421         let (_, payment_hash) = get_payment_preimage_hash!(nodes[0]);
5422         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 40000, TEST_FINAL_CLTV).unwrap();
5423         // positve case
5424         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 40000, 40_000);
5425
5426         // intermediate node failure
5427         run_onion_failure_test("invalid_realm", 0, &nodes, &route, &payment_hash, |msg| {
5428                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5429                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5430                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5431                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, cur_height).unwrap();
5432                 let mut new_payloads = Vec::new();
5433                 for payload in onion_payloads.drain(..) {
5434                         new_payloads.push(BogusOnionHopData::new(payload));
5435                 }
5436                 // break the first (non-final) hop payload by swapping the realm (0) byte for a byte
5437                 // describing a length-1 TLV payload, which is obviously bogus.
5438                 new_payloads[0].data[0] = 1;
5439                 msg.onion_routing_packet = onion_utils::construct_onion_packet_bogus_hopdata(new_payloads, onion_keys, [0; 32], &payment_hash);
5440         }, ||{}, true, Some(PERM|22), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));//XXX incremented channels idx here
5441
5442         // final node failure
5443         run_onion_failure_test("invalid_realm", 3, &nodes, &route, &payment_hash, |msg| {
5444                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5445                 let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5446                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5447                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, cur_height).unwrap();
5448                 let mut new_payloads = Vec::new();
5449                 for payload in onion_payloads.drain(..) {
5450                         new_payloads.push(BogusOnionHopData::new(payload));
5451                 }
5452                 // break the last-hop payload by swapping the realm (0) byte for a byte describing a
5453                 // length-1 TLV payload, which is obviously bogus.
5454                 new_payloads[1].data[0] = 1;
5455                 msg.onion_routing_packet = onion_utils::construct_onion_packet_bogus_hopdata(new_payloads, onion_keys, [0; 32], &payment_hash);
5456         }, ||{}, false, Some(PERM|22), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5457
5458         // the following three with run_onion_failure_test_with_fail_intercept() test only the origin node
5459         // receiving simulated fail messages
5460         // intermediate node failure
5461         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 100, &nodes, &route, &payment_hash, |msg| {
5462                 // trigger error
5463                 msg.amount_msat -= 1;
5464         }, |msg| {
5465                 // and tamper returning error message
5466                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5467                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5468                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], NODE|2, &[0;0]);
5469         }, ||{}, true, Some(NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: false}));
5470
5471         // final node failure
5472         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5473                 // and tamper returning error message
5474                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5475                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5476                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], NODE|2, &[0;0]);
5477         }, ||{
5478                 nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
5479         }, true, Some(NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: false}));
5480
5481         // intermediate node failure
5482         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 100, &nodes, &route, &payment_hash, |msg| {
5483                 msg.amount_msat -= 1;
5484         }, |msg| {
5485                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5486                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5487                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|NODE|2, &[0;0]);
5488         }, ||{}, true, Some(PERM|NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: true}));
5489
5490         // final node failure
5491         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5492                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5493                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5494                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], PERM|NODE|2, &[0;0]);
5495         }, ||{
5496                 nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
5497         }, false, Some(PERM|NODE|2), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: true}));
5498
5499         // intermediate node failure
5500         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 100, &nodes, &route, &payment_hash, |msg| {
5501                 msg.amount_msat -= 1;
5502         }, |msg| {
5503                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5504                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5505                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|NODE|3, &[0;0]);
5506         }, ||{
5507                 nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
5508         }, true, Some(PERM|NODE|3), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: true}));
5509
5510         // final node failure
5511         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 200, &nodes, &route, &payment_hash, |_msg| {}, |msg| {
5512                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5513                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5514                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[1].shared_secret[..], PERM|NODE|3, &[0;0]);
5515         }, ||{
5516                 nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
5517         }, false, Some(PERM|NODE|3), Some(msgs::HTLCFailChannelUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: true}));
5518
5519         run_onion_failure_test("invalid_onion_version", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.version = 1; }, ||{}, true,
5520                 Some(BADONION|PERM|4), None);
5521
5522         run_onion_failure_test("invalid_onion_hmac", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.hmac = [3; 32]; }, ||{}, true,
5523                 Some(BADONION|PERM|5), None);
5524
5525         run_onion_failure_test("invalid_onion_key", 0, &nodes, &route, &payment_hash, |msg| { msg.onion_routing_packet.public_key = Err(secp256k1::Error::InvalidPublicKey);}, ||{}, true,
5526                 Some(BADONION|PERM|6), None);
5527
5528         run_onion_failure_test_with_fail_intercept("temporary_channel_failure", 100, &nodes, &route, &payment_hash, |msg| {
5529                 msg.amount_msat -= 1;
5530         }, |msg| {
5531                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5532                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5533                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], UPDATE|7, &ChannelUpdate::dummy().encode_with_len()[..]);
5534         }, ||{}, true, Some(UPDATE|7), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5535
5536         run_onion_failure_test_with_fail_intercept("permanent_channel_failure", 100, &nodes, &route, &payment_hash, |msg| {
5537                 msg.amount_msat -= 1;
5538         }, |msg| {
5539                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5540                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5541                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|8, &[0;0]);
5542                 // short_channel_id from the processing node
5543         }, ||{}, true, Some(PERM|8), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5544
5545         run_onion_failure_test_with_fail_intercept("required_channel_feature_missing", 100, &nodes, &route, &payment_hash, |msg| {
5546                 msg.amount_msat -= 1;
5547         }, |msg| {
5548                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5549                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5550                 msg.reason = onion_utils::build_first_hop_failure_packet(&onion_keys[0].shared_secret[..], PERM|9, &[0;0]);
5551                 // short_channel_id from the processing node
5552         }, ||{}, true, Some(PERM|9), Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: channels[1].0.contents.short_channel_id, is_permanent: true}));
5553
5554         let mut bogus_route = route.clone();
5555         bogus_route.paths[0][1].short_channel_id -= 1;
5556         run_onion_failure_test("unknown_next_peer", 0, &nodes, &bogus_route, &payment_hash, |_| {}, ||{}, true, Some(PERM|10),
5557           Some(msgs::HTLCFailChannelUpdate::ChannelClosed{short_channel_id: bogus_route.paths[0][1].short_channel_id, is_permanent:true}));
5558
5559         let amt_to_forward = nodes[1].node.channel_state.lock().unwrap().by_id.get(&channels[1].2).unwrap().get_their_htlc_minimum_msat() - 1;
5560         let mut bogus_route = route.clone();
5561         let route_len = bogus_route.paths[0].len();
5562         bogus_route.paths[0][route_len-1].fee_msat = amt_to_forward;
5563         run_onion_failure_test("amount_below_minimum", 0, &nodes, &bogus_route, &payment_hash, |_| {}, ||{}, true, Some(UPDATE|11), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5564
5565         //TODO: with new config API, we will be able to generate both valid and
5566         //invalid channel_update cases.
5567         run_onion_failure_test("fee_insufficient", 0, &nodes, &route, &payment_hash, |msg| {
5568                 msg.amount_msat -= 1;
5569         }, || {}, true, Some(UPDATE|12), Some(msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id: channels[0].0.contents.short_channel_id, is_permanent: true}));
5570
5571         run_onion_failure_test("incorrect_cltv_expiry", 0, &nodes, &route, &payment_hash, |msg| {
5572                 // need to violate: cltv_expiry - cltv_expiry_delta >= outgoing_cltv_value
5573                 msg.cltv_expiry -= 1;
5574         }, || {}, true, Some(UPDATE|13), Some(msgs::HTLCFailChannelUpdate::ChannelClosed { short_channel_id: channels[0].0.contents.short_channel_id, is_permanent: true}));
5575
5576         run_onion_failure_test("expiry_too_soon", 0, &nodes, &route, &payment_hash, |msg| {
5577                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - LATENCY_GRACE_PERIOD_BLOCKS + 1;
5578                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5579
5580                 nodes[1].block_notifier.block_connected_checked(&header, height, &[], &[]);
5581         }, ||{}, true, Some(UPDATE|14), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5582
5583         run_onion_failure_test("unknown_payment_hash", 2, &nodes, &route, &payment_hash, |_| {}, || {
5584                 nodes[2].node.fail_htlc_backwards(&payment_hash, &None);
5585         }, false, Some(PERM|15), None);
5586
5587         run_onion_failure_test("final_expiry_too_soon", 1, &nodes, &route, &payment_hash, |msg| {
5588                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - LATENCY_GRACE_PERIOD_BLOCKS + 1;
5589                 let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
5590
5591                 nodes[2].block_notifier.block_connected_checked(&header, height, &[], &[]);
5592         }, || {}, true, Some(17), None);
5593
5594         run_onion_failure_test("final_incorrect_cltv_expiry", 1, &nodes, &route, &payment_hash, |_| {}, || {
5595                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
5596                         for f in pending_forwards.iter_mut() {
5597                                 match f {
5598                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
5599                                                 forward_info.outgoing_cltv_value += 1,
5600                                         _ => {},
5601                                 }
5602                         }
5603                 }
5604         }, true, Some(18), None);
5605
5606         run_onion_failure_test("final_incorrect_htlc_amount", 1, &nodes, &route, &payment_hash, |_| {}, || {
5607                 // violate amt_to_forward > msg.amount_msat
5608                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
5609                         for f in pending_forwards.iter_mut() {
5610                                 match f {
5611                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
5612                                                 forward_info.amt_to_forward -= 1,
5613                                         _ => {},
5614                                 }
5615                         }
5616                 }
5617         }, true, Some(19), None);
5618
5619         run_onion_failure_test("channel_disabled", 0, &nodes, &route, &payment_hash, |_| {}, || {
5620                 // disconnect event to the channel between nodes[1] ~ nodes[2]
5621                 nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), false);
5622                 nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
5623         }, true, Some(UPDATE|20), Some(msgs::HTLCFailChannelUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy()}));
5624         reconnect_nodes(&nodes[1], &nodes[2], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
5625
5626         run_onion_failure_test("expiry_too_far", 0, &nodes, &route, &payment_hash, |msg| {
5627                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
5628                 let mut route = route.clone();
5629                 let height = 1;
5630                 route.paths[0][1].cltv_expiry_delta += CLTV_FAR_FAR_AWAY + route.paths[0][0].cltv_expiry_delta + 1;
5631                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
5632                 let (onion_payloads, _, htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, height).unwrap();
5633                 let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &payment_hash);
5634                 msg.cltv_expiry = htlc_cltv;
5635                 msg.onion_routing_packet = onion_packet;
5636         }, ||{}, true, Some(21), None);
5637 }
5638
5639 #[test]
5640 #[should_panic]
5641 fn bolt2_open_channel_sending_node_checks_part1() { //This test needs to be on its own as we are catching a panic
5642         let chanmon_cfgs = create_chanmon_cfgs(2);
5643         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5644         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5645         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5646         //Force duplicate channel ids
5647         for node in nodes.iter() {
5648                 *node.keys_manager.override_channel_id_priv.lock().unwrap() = Some([0; 32]);
5649         }
5650
5651         // BOLT #2 spec: Sending node must ensure temporary_channel_id is unique from any other channel ID with the same peer.
5652         let channel_value_satoshis=10000;
5653         let push_msat=10001;
5654         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).unwrap();
5655         let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
5656         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &node0_to_1_send_open_channel);
5657
5658         //Create a second channel with a channel_id collision
5659         assert!(nodes[0].node.create_channel(nodes[0].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
5660 }
5661
5662 #[test]
5663 fn bolt2_open_channel_sending_node_checks_part2() {
5664         let chanmon_cfgs = create_chanmon_cfgs(2);
5665         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5666         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5667         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5668
5669         // BOLT #2 spec: Sending node must set funding_satoshis to less than 2^24 satoshis
5670         let channel_value_satoshis=2^24;
5671         let push_msat=10001;
5672         assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
5673
5674         // BOLT #2 spec: Sending node must set push_msat to equal or less than 1000 * funding_satoshis
5675         let channel_value_satoshis=10000;
5676         // Test when push_msat is equal to 1000 * funding_satoshis.
5677         let push_msat=1000*channel_value_satoshis+1;
5678         assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_err());
5679
5680         // BOLT #2 spec: Sending node must set set channel_reserve_satoshis greater than or equal to dust_limit_satoshis
5681         let channel_value_satoshis=10000;
5682         let push_msat=10001;
5683         assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).is_ok()); //Create a valid channel
5684         let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
5685         assert!(node0_to_1_send_open_channel.channel_reserve_satoshis>=node0_to_1_send_open_channel.dust_limit_satoshis);
5686
5687         // BOLT #2 spec: Sending node must set undefined bits in channel_flags to 0
5688         // 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
5689         assert!(node0_to_1_send_open_channel.channel_flags<=1);
5690
5691         // 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.
5692         assert!(BREAKDOWN_TIMEOUT>0);
5693         assert!(node0_to_1_send_open_channel.to_self_delay==BREAKDOWN_TIMEOUT);
5694
5695         // BOLT #2 spec: Sending node must ensure the chain_hash value identifies the chain it wishes to open the channel within.
5696         let chain_hash=genesis_block(Network::Testnet).header.bitcoin_hash();
5697         assert_eq!(node0_to_1_send_open_channel.chain_hash,chain_hash);
5698
5699         // 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.
5700         assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.funding_pubkey.serialize()).is_ok());
5701         assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.revocation_basepoint.serialize()).is_ok());
5702         assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.htlc_basepoint.serialize()).is_ok());
5703         assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.payment_basepoint.serialize()).is_ok());
5704         assert!(PublicKey::from_slice(&node0_to_1_send_open_channel.delayed_payment_basepoint.serialize()).is_ok());
5705 }
5706
5707 // BOLT 2 Requirements for the Sender when constructing and sending an update_add_htlc message.
5708 // 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.
5709 //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.
5710
5711 #[test]
5712 fn test_update_add_htlc_bolt2_sender_value_below_minimum_msat() {
5713         //BOLT2 Requirement: MUST NOT offer amount_msat below the receiving node's htlc_minimum_msat (same validation check catches both of these)
5714         let chanmon_cfgs = create_chanmon_cfgs(2);
5715         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5716         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5717         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5718         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5719         let mut route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5720         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5721
5722         route.paths[0][0].fee_msat = 100;
5723
5724         unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
5725                 assert_eq!(err, "Cannot send less than their minimum HTLC value"));
5726         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
5727         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send less than their minimum HTLC value".to_string(), 1);
5728 }
5729
5730 #[test]
5731 fn test_update_add_htlc_bolt2_sender_zero_value_msat() {
5732         //BOLT2 Requirement: MUST offer amount_msat greater than 0.
5733         let chanmon_cfgs = create_chanmon_cfgs(2);
5734         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5735         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5736         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5737         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5738         let mut route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5739         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5740
5741         route.paths[0][0].fee_msat = 0;
5742
5743         unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
5744                 assert_eq!(err, "Cannot send 0-msat HTLC"));
5745         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
5746         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send 0-msat HTLC".to_string(), 1);
5747 }
5748
5749 #[test]
5750 fn test_update_add_htlc_bolt2_receiver_zero_value_msat() {
5751         //BOLT2 Requirement: MUST offer amount_msat greater than 0.
5752         let chanmon_cfgs = create_chanmon_cfgs(2);
5753         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5754         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5755         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5756         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5757         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5758         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5759
5760         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5761         check_added_monitors!(nodes[0], 1);
5762         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5763         updates.update_add_htlcs[0].amount_msat = 0;
5764
5765         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5766         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Remote side tried to send a 0-msat HTLC".to_string(), 1);
5767         check_closed_broadcast!(nodes[1], true).unwrap();
5768         check_added_monitors!(nodes[1], 1);
5769 }
5770
5771 #[test]
5772 fn test_update_add_htlc_bolt2_sender_cltv_expiry_too_high() {
5773         //BOLT 2 Requirement: MUST set cltv_expiry less than 500000000.
5774         //It is enforced when constructing a route.
5775         let chanmon_cfgs = create_chanmon_cfgs(2);
5776         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5777         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5778         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5779         let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 0, InitFeatures::supported(), InitFeatures::supported());
5780         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000000, 500000001).unwrap();
5781         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5782
5783         unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::RouteError { err },
5784                 assert_eq!(err, "Channel CLTV overflowed?!"));
5785 }
5786
5787 #[test]
5788 fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment() {
5789         //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.
5790         //BOLT 2 Requirement: for the first HTLC it offers MUST set id to 0.
5791         //BOLT 2 Requirement: MUST increase the value of id by 1 for each successive offer.
5792         let chanmon_cfgs = create_chanmon_cfgs(2);
5793         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5794         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5795         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5796         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 0, InitFeatures::supported(), InitFeatures::supported());
5797         let max_accepted_htlcs = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().their_max_accepted_htlcs as u64;
5798
5799         for i in 0..max_accepted_htlcs {
5800                 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5801                 let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5802                 let payment_event = {
5803                         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5804                         check_added_monitors!(nodes[0], 1);
5805
5806                         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
5807                         assert_eq!(events.len(), 1);
5808                         if let MessageSendEvent::UpdateHTLCs { node_id: _, updates: msgs::CommitmentUpdate{ update_add_htlcs: ref htlcs, .. }, } = events[0] {
5809                                 assert_eq!(htlcs[0].htlc_id, i);
5810                         } else {
5811                                 assert!(false);
5812                         }
5813                         SendEvent::from_event(events.remove(0))
5814                 };
5815                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
5816                 check_added_monitors!(nodes[1], 0);
5817                 commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
5818
5819                 expect_pending_htlcs_forwardable!(nodes[1]);
5820                 expect_payment_received!(nodes[1], our_payment_hash, 100000);
5821         }
5822         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
5823         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5824         unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
5825                 assert_eq!(err, "Cannot push more than their max accepted HTLCs"));
5826
5827         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
5828         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot push more than their max accepted HTLCs".to_string(), 1);
5829 }
5830
5831 #[test]
5832 fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_value_in_flight() {
5833         //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.
5834         let chanmon_cfgs = create_chanmon_cfgs(2);
5835         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5836         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5837         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5838         let channel_value = 100000;
5839         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, channel_value, 0, InitFeatures::supported(), InitFeatures::supported());
5840         let max_in_flight = get_channel_value_stat!(nodes[0], chan.2).their_max_htlc_value_in_flight_msat;
5841
5842         send_payment(&nodes[0], &vec!(&nodes[1])[..], max_in_flight, max_in_flight);
5843
5844         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], max_in_flight+1, TEST_FINAL_CLTV).unwrap();
5845         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5846         unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &None), true, APIError::ChannelUnavailable { err },
5847                 assert_eq!(err, "Cannot send value that would put us over the max HTLC value in flight our peer will accept"));
5848
5849         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
5850         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Cannot send value that would put us over the max HTLC value in flight our peer will accept".to_string(), 1);
5851
5852         send_payment(&nodes[0], &[&nodes[1]], max_in_flight, max_in_flight);
5853 }
5854
5855 // BOLT 2 Requirements for the Receiver when handling an update_add_htlc message.
5856 #[test]
5857 fn test_update_add_htlc_bolt2_receiver_check_amount_received_more_than_min() {
5858         //BOLT2 Requirement: receiving an amount_msat equal to 0, OR less than its own htlc_minimum_msat -> SHOULD fail the channel.
5859         let chanmon_cfgs = create_chanmon_cfgs(2);
5860         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5861         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5862         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5863         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5864         let htlc_minimum_msat: u64;
5865         {
5866                 let chan_lock = nodes[0].node.channel_state.lock().unwrap();
5867                 let channel = chan_lock.by_id.get(&chan.2).unwrap();
5868                 htlc_minimum_msat = channel.get_our_htlc_minimum_msat();
5869         }
5870         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], htlc_minimum_msat, TEST_FINAL_CLTV).unwrap();
5871         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5872         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5873         check_added_monitors!(nodes[0], 1);
5874         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5875         updates.update_add_htlcs[0].amount_msat = htlc_minimum_msat-1;
5876         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5877         assert!(nodes[1].node.list_channels().is_empty());
5878         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
5879         assert_eq!(err_msg.data, "Remote side tried to send less than our minimum HTLC value");
5880         check_added_monitors!(nodes[1], 1);
5881 }
5882
5883 #[test]
5884 fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
5885         //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
5886         let chanmon_cfgs = create_chanmon_cfgs(2);
5887         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5888         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5889         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5890         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5891
5892         let their_channel_reserve = get_channel_value_stat!(nodes[0], chan.2).channel_reserve_msat;
5893
5894         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 5000000-their_channel_reserve, TEST_FINAL_CLTV).unwrap();
5895         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5896         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5897         check_added_monitors!(nodes[0], 1);
5898         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5899
5900         updates.update_add_htlcs[0].amount_msat = 5000000-their_channel_reserve+1;
5901         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5902
5903         assert!(nodes[1].node.list_channels().is_empty());
5904         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
5905         assert_eq!(err_msg.data, "Remote HTLC add would put them over their reserve value");
5906         check_added_monitors!(nodes[1], 1);
5907 }
5908
5909 #[test]
5910 fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
5911         //BOLT 2 Requirement: if a sending node adds more than its max_accepted_htlcs HTLCs to its local commitment transaction: SHOULD fail the channel
5912         //BOLT 2 Requirement: MUST allow multiple HTLCs with the same payment_hash.
5913         let chanmon_cfgs = create_chanmon_cfgs(2);
5914         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5915         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5916         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5917         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5918         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 3999999, TEST_FINAL_CLTV).unwrap();
5919         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5920
5921         let session_priv = SecretKey::from_slice(&{
5922                 let mut session_key = [0; 32];
5923                 let mut rng = thread_rng();
5924                 rng.fill_bytes(&mut session_key);
5925                 session_key
5926         }).expect("RNG is bad!");
5927
5928         let cur_height = nodes[0].node.latest_block_height.load(Ordering::Acquire) as u32 + 1;
5929         let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::signing_only(), &route.paths[0], &session_priv).unwrap();
5930         let (onion_payloads, _htlc_msat, htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 3999999, &None, cur_height).unwrap();
5931         let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &our_payment_hash);
5932
5933         let mut msg = msgs::UpdateAddHTLC {
5934                 channel_id: chan.2,
5935                 htlc_id: 0,
5936                 amount_msat: 1000,
5937                 payment_hash: our_payment_hash,
5938                 cltv_expiry: htlc_cltv,
5939                 onion_routing_packet: onion_packet.clone(),
5940         };
5941
5942         for i in 0..super::channel::OUR_MAX_HTLCS {
5943                 msg.htlc_id = i as u64;
5944                 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg);
5945         }
5946         msg.htlc_id = (super::channel::OUR_MAX_HTLCS) as u64;
5947         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg);
5948
5949         assert!(nodes[1].node.list_channels().is_empty());
5950         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
5951         assert_eq!(err_msg.data, "Remote tried to push more than our max accepted HTLCs");
5952         check_added_monitors!(nodes[1], 1);
5953 }
5954
5955 #[test]
5956 fn test_update_add_htlc_bolt2_receiver_check_max_in_flight_msat() {
5957         //OR adds more than its max_htlc_value_in_flight_msat worth of offered HTLCs to its local commitment transaction: SHOULD fail the channel
5958         let chanmon_cfgs = create_chanmon_cfgs(2);
5959         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5960         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5961         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5962         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, InitFeatures::supported(), InitFeatures::supported());
5963         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
5964         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5965         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5966         check_added_monitors!(nodes[0], 1);
5967         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5968         updates.update_add_htlcs[0].amount_msat = get_channel_value_stat!(nodes[1], chan.2).their_max_htlc_value_in_flight_msat + 1;
5969         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5970
5971         assert!(nodes[1].node.list_channels().is_empty());
5972         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
5973         assert_eq!(err_msg.data,"Remote HTLC add would put them over our max HTLC value");
5974         check_added_monitors!(nodes[1], 1);
5975 }
5976
5977 #[test]
5978 fn test_update_add_htlc_bolt2_receiver_check_cltv_expiry() {
5979         //BOLT2 Requirement: if sending node sets cltv_expiry to greater or equal to 500000000: SHOULD fail the channel.
5980         let chanmon_cfgs = create_chanmon_cfgs(2);
5981         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
5982         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
5983         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
5984         create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 95000000, InitFeatures::supported(), InitFeatures::supported());
5985         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 3999999, TEST_FINAL_CLTV).unwrap();
5986         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
5987         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
5988         check_added_monitors!(nodes[0], 1);
5989         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
5990         updates.update_add_htlcs[0].cltv_expiry = 500000000;
5991         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
5992
5993         assert!(nodes[1].node.list_channels().is_empty());
5994         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
5995         assert_eq!(err_msg.data,"Remote provided CLTV expiry in seconds instead of block height");
5996         check_added_monitors!(nodes[1], 1);
5997 }
5998
5999 #[test]
6000 fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
6001         //BOLT 2 requirement: if the sender did not previously acknowledge the commitment of that HTLC: MUST ignore a repeated id value after a reconnection.
6002         // We test this by first testing that that repeated HTLCs pass commitment signature checks
6003         // after disconnect and that non-sequential htlc_ids result in a channel failure.
6004         let chanmon_cfgs = create_chanmon_cfgs(2);
6005         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6006         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6007         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6008         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6009         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
6010         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6011         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6012         check_added_monitors!(nodes[0], 1);
6013         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6014         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6015
6016         //Disconnect and Reconnect
6017         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
6018         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
6019         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6020         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
6021         assert_eq!(reestablish_1.len(), 1);
6022         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6023         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
6024         assert_eq!(reestablish_2.len(), 1);
6025         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
6026         handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
6027         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
6028         handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
6029
6030         //Resend HTLC
6031         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6032         assert_eq!(updates.commitment_signed.htlc_signatures.len(), 1);
6033         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &updates.commitment_signed);
6034         check_added_monitors!(nodes[1], 1);
6035         let _bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
6036
6037         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6038
6039         assert!(nodes[1].node.list_channels().is_empty());
6040         let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
6041         assert_eq!(err_msg.data, "Remote skipped HTLC ID");
6042         check_added_monitors!(nodes[1], 1);
6043 }
6044
6045 #[test]
6046 fn test_update_fulfill_htlc_bolt2_update_fulfill_htlc_before_commitment() {
6047         //BOLT 2 Requirement: until the corresponding HTLC is irrevocably committed in both sides' commitment transactions:     MUST NOT send an update_fulfill_htlc, update_fail_htlc, or update_fail_malformed_htlc.
6048
6049         let chanmon_cfgs = create_chanmon_cfgs(2);
6050         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6051         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6052         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6053         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6054
6055         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
6056         let (our_payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6057         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6058         check_added_monitors!(nodes[0], 1);
6059         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6060         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6061
6062         let update_msg = msgs::UpdateFulfillHTLC{
6063                 channel_id: chan.2,
6064                 htlc_id: 0,
6065                 payment_preimage: our_payment_preimage,
6066         };
6067
6068         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_msg);
6069
6070         assert!(nodes[0].node.list_channels().is_empty());
6071         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6072         assert_eq!(err_msg.data, "Remote tried to fulfill/fail HTLC before it had been committed");
6073         check_added_monitors!(nodes[0], 1);
6074 }
6075
6076 #[test]
6077 fn test_update_fulfill_htlc_bolt2_update_fail_htlc_before_commitment() {
6078         //BOLT 2 Requirement: until the corresponding HTLC is irrevocably committed in both sides' commitment transactions:     MUST NOT send an update_fulfill_htlc, update_fail_htlc, or update_fail_malformed_htlc.
6079
6080         let chanmon_cfgs = create_chanmon_cfgs(2);
6081         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6082         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6083         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6084         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6085
6086         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
6087         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6088         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6089         check_added_monitors!(nodes[0], 1);
6090         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6091         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6092
6093         let update_msg = msgs::UpdateFailHTLC{
6094                 channel_id: chan.2,
6095                 htlc_id: 0,
6096                 reason: msgs::OnionErrorPacket { data: Vec::new()},
6097         };
6098
6099         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_msg);
6100
6101         assert!(nodes[0].node.list_channels().is_empty());
6102         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6103         assert_eq!(err_msg.data, "Remote tried to fulfill/fail HTLC before it had been committed");
6104         check_added_monitors!(nodes[0], 1);
6105 }
6106
6107 #[test]
6108 fn test_update_fulfill_htlc_bolt2_update_fail_malformed_htlc_before_commitment() {
6109         //BOLT 2 Requirement: until the corresponding HTLC is irrevocably committed in both sides' commitment transactions:     MUST NOT send an update_fulfill_htlc, update_fail_htlc, or update_fail_malformed_htlc.
6110
6111         let chanmon_cfgs = create_chanmon_cfgs(2);
6112         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6113         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6114         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6115         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6116
6117         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
6118         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6119         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6120         check_added_monitors!(nodes[0], 1);
6121         let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6122         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6123
6124         let update_msg = msgs::UpdateFailMalformedHTLC{
6125                 channel_id: chan.2,
6126                 htlc_id: 0,
6127                 sha256_of_onion: [1; 32],
6128                 failure_code: 0x8000,
6129         };
6130
6131         nodes[0].node.handle_update_fail_malformed_htlc(&nodes[1].node.get_our_node_id(), &update_msg);
6132
6133         assert!(nodes[0].node.list_channels().is_empty());
6134         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6135         assert_eq!(err_msg.data, "Remote tried to fulfill/fail HTLC before it had been committed");
6136         check_added_monitors!(nodes[0], 1);
6137 }
6138
6139 #[test]
6140 fn test_update_fulfill_htlc_bolt2_incorrect_htlc_id() {
6141         //BOLT 2 Requirement: A receiving node: if the id does not correspond to an HTLC in its current commitment transaction MUST fail the channel.
6142
6143         let chanmon_cfgs = create_chanmon_cfgs(2);
6144         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6145         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6146         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6147         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6148
6149         let our_payment_preimage = route_payment(&nodes[0], &[&nodes[1]], 100000).0;
6150
6151         nodes[1].node.claim_funds(our_payment_preimage, &None, 100_000);
6152         check_added_monitors!(nodes[1], 1);
6153
6154         let events = nodes[1].node.get_and_clear_pending_msg_events();
6155         assert_eq!(events.len(), 1);
6156         let mut update_fulfill_msg: msgs::UpdateFulfillHTLC = {
6157                 match events[0] {
6158                         MessageSendEvent::UpdateHTLCs { 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, .. } } => {
6159                                 assert!(update_add_htlcs.is_empty());
6160                                 assert_eq!(update_fulfill_htlcs.len(), 1);
6161                                 assert!(update_fail_htlcs.is_empty());
6162                                 assert!(update_fail_malformed_htlcs.is_empty());
6163                                 assert!(update_fee.is_none());
6164                                 update_fulfill_htlcs[0].clone()
6165                         },
6166                         _ => panic!("Unexpected event"),
6167                 }
6168         };
6169
6170         update_fulfill_msg.htlc_id = 1;
6171
6172         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_msg);
6173
6174         assert!(nodes[0].node.list_channels().is_empty());
6175         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6176         assert_eq!(err_msg.data, "Remote tried to fulfill/fail an HTLC we couldn't find");
6177         check_added_monitors!(nodes[0], 1);
6178 }
6179
6180 #[test]
6181 fn test_update_fulfill_htlc_bolt2_wrong_preimage() {
6182         //BOLT 2 Requirement: A receiving node: if the payment_preimage value in update_fulfill_htlc doesn't SHA256 hash to the corresponding HTLC payment_hash MUST fail the channel.
6183
6184         let chanmon_cfgs = create_chanmon_cfgs(2);
6185         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6186         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6187         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6188         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6189
6190         let our_payment_preimage = route_payment(&nodes[0], &[&nodes[1]], 100000).0;
6191
6192         nodes[1].node.claim_funds(our_payment_preimage, &None, 100_000);
6193         check_added_monitors!(nodes[1], 1);
6194
6195         let events = nodes[1].node.get_and_clear_pending_msg_events();
6196         assert_eq!(events.len(), 1);
6197         let mut update_fulfill_msg: msgs::UpdateFulfillHTLC = {
6198                 match events[0] {
6199                         MessageSendEvent::UpdateHTLCs { 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, .. } } => {
6200                                 assert!(update_add_htlcs.is_empty());
6201                                 assert_eq!(update_fulfill_htlcs.len(), 1);
6202                                 assert!(update_fail_htlcs.is_empty());
6203                                 assert!(update_fail_malformed_htlcs.is_empty());
6204                                 assert!(update_fee.is_none());
6205                                 update_fulfill_htlcs[0].clone()
6206                         },
6207                         _ => panic!("Unexpected event"),
6208                 }
6209         };
6210
6211         update_fulfill_msg.payment_preimage = PaymentPreimage([1; 32]);
6212
6213         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_msg);
6214
6215         assert!(nodes[0].node.list_channels().is_empty());
6216         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6217         assert_eq!(err_msg.data, "Remote tried to fulfill HTLC with an incorrect preimage");
6218         check_added_monitors!(nodes[0], 1);
6219 }
6220
6221 #[test]
6222 fn test_update_fulfill_htlc_bolt2_missing_badonion_bit_for_malformed_htlc_message() {
6223         //BOLT 2 Requirement: A receiving node: if the BADONION bit in failure_code is not set for update_fail_malformed_htlc MUST fail the channel.
6224
6225         let chanmon_cfgs = create_chanmon_cfgs(2);
6226         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6227         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6228         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6229         create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, InitFeatures::supported(), InitFeatures::supported());
6230         let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
6231         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6232         nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6233         check_added_monitors!(nodes[0], 1);
6234
6235         let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6236         updates.update_add_htlcs[0].onion_routing_packet.version = 1; //Produce a malformed HTLC message
6237
6238         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6239         check_added_monitors!(nodes[1], 0);
6240         commitment_signed_dance!(nodes[1], nodes[0], updates.commitment_signed, false, true);
6241
6242         let events = nodes[1].node.get_and_clear_pending_msg_events();
6243
6244         let mut update_msg: msgs::UpdateFailMalformedHTLC = {
6245                 match events[0] {
6246                         MessageSendEvent::UpdateHTLCs { 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, .. } } => {
6247                                 assert!(update_add_htlcs.is_empty());
6248                                 assert!(update_fulfill_htlcs.is_empty());
6249                                 assert!(update_fail_htlcs.is_empty());
6250                                 assert_eq!(update_fail_malformed_htlcs.len(), 1);
6251                                 assert!(update_fee.is_none());
6252                                 update_fail_malformed_htlcs[0].clone()
6253                         },
6254                         _ => panic!("Unexpected event"),
6255                 }
6256         };
6257         update_msg.failure_code &= !0x8000;
6258         nodes[0].node.handle_update_fail_malformed_htlc(&nodes[1].node.get_our_node_id(), &update_msg);
6259
6260         assert!(nodes[0].node.list_channels().is_empty());
6261         let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
6262         assert_eq!(err_msg.data, "Got update_fail_malformed_htlc with BADONION not set");
6263         check_added_monitors!(nodes[0], 1);
6264 }
6265
6266 #[test]
6267 fn test_update_fulfill_htlc_bolt2_after_malformed_htlc_message_must_forward_update_fail_htlc() {
6268         //BOLT 2 Requirement: a receiving node which has an outgoing HTLC canceled by update_fail_malformed_htlc:
6269         //    * MUST return an error in the update_fail_htlc sent to the link which originally sent the HTLC, using the failure_code given and setting the data to sha256_of_onion.
6270
6271         let chanmon_cfgs = create_chanmon_cfgs(3);
6272         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
6273         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
6274         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
6275         create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, InitFeatures::supported(), InitFeatures::supported());
6276         create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 1000000, 1000000, InitFeatures::supported(), InitFeatures::supported());
6277
6278         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 100000, TEST_FINAL_CLTV).unwrap();
6279         let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
6280
6281         //First hop
6282         let mut payment_event = {
6283                 nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
6284                 check_added_monitors!(nodes[0], 1);
6285                 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
6286                 assert_eq!(events.len(), 1);
6287                 SendEvent::from_event(events.remove(0))
6288         };
6289         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
6290         check_added_monitors!(nodes[1], 0);
6291         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
6292         expect_pending_htlcs_forwardable!(nodes[1]);
6293         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
6294         assert_eq!(events_2.len(), 1);
6295         check_added_monitors!(nodes[1], 1);
6296         payment_event = SendEvent::from_event(events_2.remove(0));
6297         assert_eq!(payment_event.msgs.len(), 1);
6298
6299         //Second Hop
6300         payment_event.msgs[0].onion_routing_packet.version = 1; //Produce a malformed HTLC message
6301         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]);
6302         check_added_monitors!(nodes[2], 0);
6303         commitment_signed_dance!(nodes[2], nodes[1], payment_event.commitment_msg, false, true);
6304
6305         let events_3 = nodes[2].node.get_and_clear_pending_msg_events();
6306         assert_eq!(events_3.len(), 1);
6307         let update_msg : (msgs::UpdateFailMalformedHTLC, msgs::CommitmentSigned) = {
6308                 match events_3[0] {
6309                         MessageSendEvent::UpdateHTLCs { 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 } } => {
6310                                 assert!(update_add_htlcs.is_empty());
6311                                 assert!(update_fulfill_htlcs.is_empty());
6312                                 assert!(update_fail_htlcs.is_empty());
6313                                 assert_eq!(update_fail_malformed_htlcs.len(), 1);
6314                                 assert!(update_fee.is_none());
6315                                 (update_fail_malformed_htlcs[0].clone(), commitment_signed.clone())
6316                         },
6317                         _ => panic!("Unexpected event"),
6318                 }
6319         };
6320
6321         nodes[1].node.handle_update_fail_malformed_htlc(&nodes[2].node.get_our_node_id(), &update_msg.0);
6322
6323         check_added_monitors!(nodes[1], 0);
6324         commitment_signed_dance!(nodes[1], nodes[2], update_msg.1, false, true);
6325         expect_pending_htlcs_forwardable!(nodes[1]);
6326         let events_4 = nodes[1].node.get_and_clear_pending_msg_events();
6327         assert_eq!(events_4.len(), 1);
6328
6329         //Confirm that handlinge the update_malformed_htlc message produces an update_fail_htlc message to be forwarded back along the route
6330         match events_4[0] {
6331                 MessageSendEvent::UpdateHTLCs { 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, .. } } => {
6332                         assert!(update_add_htlcs.is_empty());
6333                         assert!(update_fulfill_htlcs.is_empty());
6334                         assert_eq!(update_fail_htlcs.len(), 1);
6335                         assert!(update_fail_malformed_htlcs.is_empty());
6336                         assert!(update_fee.is_none());
6337                 },
6338                 _ => panic!("Unexpected event"),
6339         };
6340
6341         check_added_monitors!(nodes[1], 1);
6342 }
6343
6344 fn do_test_failure_delay_dust_htlc_local_commitment(announce_latest: bool) {
6345         // Dust-HTLC failure updates must be delayed until failure-trigger tx (in this case local commitment) reach ANTI_REORG_DELAY
6346         // We can have at most two valid local commitment tx, so both cases must be covered, and both txs must be checked to get them all as
6347         // HTLC could have been removed from lastest local commitment tx but still valid until we get remote RAA
6348
6349         let chanmon_cfgs = create_chanmon_cfgs(2);
6350         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6351         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6352         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6353         let chan =create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6354
6355         let bs_dust_limit = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
6356
6357         // We route 2 dust-HTLCs between A and B
6358         let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1]], bs_dust_limit*1000);
6359         let (_, payment_hash_2) = route_payment(&nodes[0], &[&nodes[1]], bs_dust_limit*1000);
6360         route_payment(&nodes[0], &[&nodes[1]], 1000000);
6361
6362         // Cache one local commitment tx as previous
6363         let as_prev_commitment_tx = get_local_commitment_txn!(nodes[0], chan.2);
6364
6365         // Fail one HTLC to prune it in the will-be-latest-local commitment tx
6366         assert!(nodes[1].node.fail_htlc_backwards(&payment_hash_2, &None));
6367         check_added_monitors!(nodes[1], 0);
6368         expect_pending_htlcs_forwardable!(nodes[1]);
6369         check_added_monitors!(nodes[1], 1);
6370
6371         let remove = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
6372         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &remove.update_fail_htlcs[0]);
6373         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &remove.commitment_signed);
6374         check_added_monitors!(nodes[0], 1);
6375
6376         // Cache one local commitment tx as lastest
6377         let as_last_commitment_tx = get_local_commitment_txn!(nodes[0], chan.2);
6378
6379         let events = nodes[0].node.get_and_clear_pending_msg_events();
6380         match events[0] {
6381                 MessageSendEvent::SendRevokeAndACK { node_id, .. } => {
6382                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
6383                 },
6384                 _ => panic!("Unexpected event"),
6385         }
6386         match events[1] {
6387                 MessageSendEvent::UpdateHTLCs { node_id, .. } => {
6388                         assert_eq!(node_id, nodes[1].node.get_our_node_id());
6389                 },
6390                 _ => panic!("Unexpected event"),
6391         }
6392
6393         assert_ne!(as_prev_commitment_tx, as_last_commitment_tx);
6394         // Fail the 2 dust-HTLCs, move their failure in maturation buffer (htlc_updated_waiting_threshold_conf)
6395         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6396
6397         if announce_latest {
6398                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![as_last_commitment_tx[0].clone()]}, 1);
6399         } else {
6400                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![as_prev_commitment_tx[0].clone()]}, 1);
6401         }
6402
6403         check_closed_broadcast!(nodes[0], false);
6404         check_added_monitors!(nodes[0], 1);
6405
6406         assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6407         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 1, true,  header.bitcoin_hash());
6408         let events = nodes[0].node.get_and_clear_pending_events();
6409         // Only 2 PaymentFailed events should show up, over-dust HTLC has to be failed by timeout tx
6410         assert_eq!(events.len(), 2);
6411         let mut first_failed = false;
6412         for event in events {
6413                 match event {
6414                         Event::PaymentFailed { payment_hash, .. } => {
6415                                 if payment_hash == payment_hash_1 {
6416                                         assert!(!first_failed);
6417                                         first_failed = true;
6418                                 } else {
6419                                         assert_eq!(payment_hash, payment_hash_2);
6420                                 }
6421                         }
6422                         _ => panic!("Unexpected event"),
6423                 }
6424         }
6425 }
6426
6427 #[test]
6428 fn test_failure_delay_dust_htlc_local_commitment() {
6429         do_test_failure_delay_dust_htlc_local_commitment(true);
6430         do_test_failure_delay_dust_htlc_local_commitment(false);
6431 }
6432
6433 #[test]
6434 fn test_no_failure_dust_htlc_local_commitment() {
6435         // Transaction filters for failing back dust htlc based on local commitment txn infos has been
6436         // prone to error, we test here that a dummy transaction don't fail them.
6437
6438         let chanmon_cfgs = create_chanmon_cfgs(2);
6439         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6440         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6441         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6442         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6443
6444         // Rebalance a bit
6445         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
6446
6447         let as_dust_limit = nodes[0].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
6448         let bs_dust_limit = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
6449
6450         // We route 2 dust-HTLCs between A and B
6451         let (preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], bs_dust_limit*1000);
6452         let (preimage_2, _) = route_payment(&nodes[1], &[&nodes[0]], as_dust_limit*1000);
6453
6454         // Build a dummy invalid transaction trying to spend a commitment tx
6455         let input = TxIn {
6456                 previous_output: BitcoinOutPoint { txid: chan.3.txid(), vout: 0 },
6457                 script_sig: Script::new(),
6458                 sequence: 0,
6459                 witness: Vec::new(),
6460         };
6461
6462         let outp = TxOut {
6463                 script_pubkey: Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(),
6464                 value: 10000,
6465         };
6466
6467         let dummy_tx = Transaction {
6468                 version: 2,
6469                 lock_time: 0,
6470                 input: vec![input],
6471                 output: vec![outp]
6472         };
6473
6474         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6475         nodes[0].chan_monitor.simple_monitor.block_connected(&header, 1, &[&dummy_tx], &[1;1]);
6476         assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6477         assert_eq!(nodes[0].node.get_and_clear_pending_msg_events().len(), 0);
6478         // We broadcast a few more block to check everything is all right
6479         connect_blocks(&nodes[0].block_notifier, 20, 1, true,  header.bitcoin_hash());
6480         assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6481         assert_eq!(nodes[0].node.get_and_clear_pending_msg_events().len(), 0);
6482
6483         claim_payment(&nodes[0], &vec!(&nodes[1])[..], preimage_1, bs_dust_limit*1000);
6484         claim_payment(&nodes[1], &vec!(&nodes[0])[..], preimage_2, as_dust_limit*1000);
6485 }
6486
6487 fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
6488         // Outbound HTLC-failure updates must be cancelled if we get a reorg before we reach ANTI_REORG_DELAY.
6489         // Broadcast of revoked remote commitment tx, trigger failure-update of dust/non-dust HTLCs
6490         // Broadcast of remote commitment tx, trigger failure-update of dust-HTLCs
6491         // Broadcast of timeout tx on remote commitment tx, trigger failure-udate of non-dust HTLCs
6492         // Broadcast of local commitment tx, trigger failure-update of dust-HTLCs
6493         // Broadcast of HTLC-timeout tx on local commitment tx, trigger failure-update of non-dust HTLCs
6494
6495         let chanmon_cfgs = create_chanmon_cfgs(3);
6496         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
6497         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
6498         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
6499         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6500
6501         let bs_dust_limit = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().our_dust_limit_satoshis;
6502
6503         let (_payment_preimage_1, dust_hash) = route_payment(&nodes[0], &[&nodes[1]], bs_dust_limit*1000);
6504         let (_payment_preimage_2, non_dust_hash) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
6505
6506         let as_commitment_tx = get_local_commitment_txn!(nodes[0], chan.2);
6507         let bs_commitment_tx = get_local_commitment_txn!(nodes[1], chan.2);
6508
6509         // We revoked bs_commitment_tx
6510         if revoked {
6511                 let (payment_preimage_3, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
6512                 claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3, 1_000_000);
6513         }
6514
6515         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6516         let mut timeout_tx = Vec::new();
6517         if local {
6518                 // We fail dust-HTLC 1 by broadcast of local commitment tx
6519                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![as_commitment_tx[0].clone()]}, 1);
6520                 check_closed_broadcast!(nodes[0], false);
6521                 check_added_monitors!(nodes[0], 1);
6522                 assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6523                 timeout_tx.push(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap()[0].clone());
6524                 let parent_hash  = connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 2, true, header.bitcoin_hash());
6525                 let events = nodes[0].node.get_and_clear_pending_events();
6526                 assert_eq!(events.len(), 1);
6527                 match events[0] {
6528                         Event::PaymentFailed { payment_hash, .. } => {
6529                                 assert_eq!(payment_hash, dust_hash);
6530                         },
6531                         _ => panic!("Unexpected event"),
6532                 }
6533                 assert_eq!(timeout_tx[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
6534                 // We fail non-dust-HTLC 2 by broadcast of local HTLC-timeout tx on local commitment tx
6535                 let header_2 = BlockHeader { version: 0x20000000, prev_blockhash: parent_hash, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6536                 assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6537                 nodes[0].block_notifier.block_connected(&Block { header: header_2, txdata: vec![timeout_tx[0].clone()]}, 7);
6538                 let header_3 = BlockHeader { version: 0x20000000, prev_blockhash: header_2.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6539                 connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 8, true, header_3.bitcoin_hash());
6540                 let events = nodes[0].node.get_and_clear_pending_events();
6541                 assert_eq!(events.len(), 1);
6542                 match events[0] {
6543                         Event::PaymentFailed { payment_hash, .. } => {
6544                                 assert_eq!(payment_hash, non_dust_hash);
6545                         },
6546                         _ => panic!("Unexpected event"),
6547                 }
6548         } else {
6549                 // We fail dust-HTLC 1 by broadcast of remote commitment tx. If revoked, fail also non-dust HTLC
6550                 nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![bs_commitment_tx[0].clone()]}, 1);
6551                 check_closed_broadcast!(nodes[0], false);
6552                 check_added_monitors!(nodes[0], 1);
6553                 assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6554                 timeout_tx.push(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap()[0].clone());
6555                 let parent_hash  = connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 2, true, header.bitcoin_hash());
6556                 let header_2 = BlockHeader { version: 0x20000000, prev_blockhash: parent_hash, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6557                 if !revoked {
6558                         let events = nodes[0].node.get_and_clear_pending_events();
6559                         assert_eq!(events.len(), 1);
6560                         match events[0] {
6561                                 Event::PaymentFailed { payment_hash, .. } => {
6562                                         assert_eq!(payment_hash, dust_hash);
6563                                 },
6564                                 _ => panic!("Unexpected event"),
6565                         }
6566                         assert_eq!(timeout_tx[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6567                         // We fail non-dust-HTLC 2 by broadcast of local timeout tx on remote commitment tx
6568                         nodes[0].block_notifier.block_connected(&Block { header: header_2, txdata: vec![timeout_tx[0].clone()]}, 7);
6569                         assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
6570                         let header_3 = BlockHeader { version: 0x20000000, prev_blockhash: header_2.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
6571                         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 8, true, header_3.bitcoin_hash());
6572                         let events = nodes[0].node.get_and_clear_pending_events();
6573                         assert_eq!(events.len(), 1);
6574                         match events[0] {
6575                                 Event::PaymentFailed { payment_hash, .. } => {
6576                                         assert_eq!(payment_hash, non_dust_hash);
6577                                 },
6578                                 _ => panic!("Unexpected event"),
6579                         }
6580                 } else {
6581                         // If revoked, both dust & non-dust HTLCs should have been failed after ANTI_REORG_DELAY confs of revoked
6582                         // commitment tx
6583                         let events = nodes[0].node.get_and_clear_pending_events();
6584                         assert_eq!(events.len(), 2);
6585                         let first;
6586                         match events[0] {
6587                                 Event::PaymentFailed { payment_hash, .. } => {
6588                                         if payment_hash == dust_hash { first = true; }
6589                                         else { first = false; }
6590                                 },
6591                                 _ => panic!("Unexpected event"),
6592                         }
6593                         match events[1] {
6594                                 Event::PaymentFailed { payment_hash, .. } => {
6595                                         if first { assert_eq!(payment_hash, non_dust_hash); }
6596                                         else { assert_eq!(payment_hash, dust_hash); }
6597                                 },
6598                                 _ => panic!("Unexpected event"),
6599                         }
6600                 }
6601         }
6602 }
6603
6604 #[test]
6605 fn test_sweep_outbound_htlc_failure_update() {
6606         do_test_sweep_outbound_htlc_failure_update(false, true);
6607         do_test_sweep_outbound_htlc_failure_update(false, false);
6608         do_test_sweep_outbound_htlc_failure_update(true, false);
6609 }
6610
6611 #[test]
6612 fn test_upfront_shutdown_script() {
6613         // BOLT 2 : Option upfront shutdown script, if peer commit its closing_script at channel opening
6614         // enforce it at shutdown message
6615
6616         let mut config = UserConfig::default();
6617         config.channel_options.announced_channel = true;
6618         config.peer_channel_config_limits.force_announced_channel_preference = false;
6619         config.channel_options.commit_upfront_shutdown_pubkey = false;
6620         let user_cfgs = [None, Some(config), None];
6621         let chanmon_cfgs = create_chanmon_cfgs(3);
6622         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
6623         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &user_cfgs);
6624         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
6625
6626         // We test that in case of peer committing upfront to a script, if it changes at closing, we refuse to sign
6627         let flags = InitFeatures::supported();
6628         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000, flags.clone(), flags.clone());
6629         nodes[0].node.close_channel(&OutPoint::new(chan.3.txid(), 0).to_channel_id()).unwrap();
6630         let mut node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
6631         node_0_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
6632         // Test we enforce upfront_scriptpbukey if by providing a diffrent one at closing that  we disconnect peer
6633         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
6634         assert_eq!(check_closed_broadcast!(nodes[2], true).unwrap().data, "Got shutdown request with a scriptpubkey which did not match their previous scriptpubkey");
6635         check_added_monitors!(nodes[2], 1);
6636
6637         // We test that in case of peer committing upfront to a script, if it doesn't change at closing, we sign
6638         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 2, 1000000, 1000000, flags.clone(), flags.clone());
6639         nodes[0].node.close_channel(&OutPoint::new(chan.3.txid(), 0).to_channel_id()).unwrap();
6640         let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[2].node.get_our_node_id());
6641         // We test that in case of peer committing upfront to a script, if it oesn't change at closing, we sign
6642         nodes[2].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_0_shutdown);
6643         let events = nodes[2].node.get_and_clear_pending_msg_events();
6644         assert_eq!(events.len(), 1);
6645         match events[0] {
6646                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
6647                 _ => panic!("Unexpected event"),
6648         }
6649
6650         // We test that if case of peer non-signaling we don't enforce committed script at channel opening
6651         let mut flags_no = InitFeatures::supported();
6652         flags_no.unset_upfront_shutdown_script();
6653         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, flags_no, flags.clone());
6654         nodes[0].node.close_channel(&OutPoint::new(chan.3.txid(), 0).to_channel_id()).unwrap();
6655         let mut node_1_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
6656         node_1_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
6657         nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &node_1_shutdown);
6658         let events = nodes[1].node.get_and_clear_pending_msg_events();
6659         assert_eq!(events.len(), 1);
6660         match events[0] {
6661                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[0].node.get_our_node_id()) }
6662                 _ => panic!("Unexpected event"),
6663         }
6664
6665         // We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
6666         // channel smoothly, opt-out is from channel initiator here
6667         let chan = create_announced_chan_between_nodes_with_value(&nodes, 1, 0, 1000000, 1000000, flags.clone(), flags.clone());
6668         nodes[1].node.close_channel(&OutPoint::new(chan.3.txid(), 0).to_channel_id()).unwrap();
6669         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
6670         node_0_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
6671         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
6672         let events = nodes[0].node.get_and_clear_pending_msg_events();
6673         assert_eq!(events.len(), 1);
6674         match events[0] {
6675                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
6676                 _ => panic!("Unexpected event"),
6677         }
6678
6679         //// We test that if user opt-out, we provide a zero-length script at channel opening and we are able to close
6680         //// channel smoothly
6681         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, flags.clone(), flags.clone());
6682         nodes[1].node.close_channel(&OutPoint::new(chan.3.txid(), 0).to_channel_id()).unwrap();
6683         let mut node_0_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
6684         node_0_shutdown.scriptpubkey = Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script().to_p2sh();
6685         nodes[0].node.handle_shutdown(&nodes[1].node.get_our_node_id(), &node_0_shutdown);
6686         let events = nodes[0].node.get_and_clear_pending_msg_events();
6687         assert_eq!(events.len(), 2);
6688         match events[0] {
6689                 MessageSendEvent::SendShutdown { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
6690                 _ => panic!("Unexpected event"),
6691         }
6692         match events[1] {
6693                 MessageSendEvent::SendClosingSigned { node_id, .. } => { assert_eq!(node_id, nodes[1].node.get_our_node_id()) }
6694                 _ => panic!("Unexpected event"),
6695         }
6696 }
6697
6698 #[test]
6699 fn test_user_configurable_csv_delay() {
6700         // We test our channel constructors yield errors when we pass them absurd csv delay
6701
6702         let mut low_our_to_self_config = UserConfig::default();
6703         low_our_to_self_config.own_channel_config.our_to_self_delay = 6;
6704         let mut high_their_to_self_config = UserConfig::default();
6705         high_their_to_self_config.peer_channel_config_limits.their_to_self_delay = 100;
6706         let user_cfgs = [Some(high_their_to_self_config.clone()), None];
6707         let chanmon_cfgs = create_chanmon_cfgs(2);
6708         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6709         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &user_cfgs);
6710         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6711
6712         // We test config.our_to_self > BREAKDOWN_TIMEOUT is enforced in Channel::new_outbound()
6713         let keys_manager: Arc<KeysInterface<ChanKeySigner = EnforcingChannelKeys>> = Arc::new(test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new())));
6714         if let Err(error) = Channel::new_outbound(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &keys_manager, nodes[1].node.get_our_node_id(), 1000000, 1000000, 0, Arc::new(test_utils::TestLogger::new()), &low_our_to_self_config) {
6715                 match error {
6716                         APIError::APIMisuseError { err } => { assert_eq!(err, "Configured with an unreasonable our_to_self_delay putting user funds at risks"); },
6717                         _ => panic!("Unexpected event"),
6718                 }
6719         } else { assert!(false) }
6720
6721         // We test config.our_to_self > BREAKDOWN_TIMEOUT is enforced in Channel::new_from_req()
6722         nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
6723         let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
6724         open_channel.to_self_delay = 200;
6725         if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::supported(), &open_channel, 0, Arc::new(test_utils::TestLogger::new()), &low_our_to_self_config) {
6726                 match error {
6727                         ChannelError::Close(err) => { assert_eq!(err, "Configured with an unreasonable our_to_self_delay putting user funds at risks"); },
6728                         _ => panic!("Unexpected event"),
6729                 }
6730         } else { assert!(false); }
6731
6732         // We test msg.to_self_delay <= config.their_to_self_delay is enforced in Chanel::accept_channel()
6733         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
6734         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
6735         let mut accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
6736         accept_channel.to_self_delay = 200;
6737         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::supported(), &accept_channel);
6738         if let MessageSendEvent::HandleError { ref action, .. } = nodes[0].node.get_and_clear_pending_msg_events()[0] {
6739                 match action {
6740                         &ErrorAction::SendErrorMessage { ref msg } => {
6741                                 assert_eq!(msg.data,"They wanted our payments to be delayed by a needlessly long period");
6742                         },
6743                         _ => { assert!(false); }
6744                 }
6745         } else { assert!(false); }
6746
6747         // We test msg.to_self_delay <= config.their_to_self_delay is enforced in Channel::new_from_req()
6748         nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
6749         let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
6750         open_channel.to_self_delay = 200;
6751         if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::supported(), &open_channel, 0, Arc::new(test_utils::TestLogger::new()), &high_their_to_self_config) {
6752                 match error {
6753                         ChannelError::Close(err) => { assert_eq!(err, "They wanted our payments to be delayed by a needlessly long period"); },
6754                         _ => panic!("Unexpected event"),
6755                 }
6756         } else { assert!(false); }
6757 }
6758
6759 #[test]
6760 fn test_data_loss_protect() {
6761         // We want to be sure that :
6762         // * we don't broadcast our Local Commitment Tx in case of fallen behind
6763         // * we close channel in case of detecting other being fallen behind
6764         // * we are able to claim our own outputs thanks to remote my_current_per_commitment_point
6765         let keys_manager;
6766         let fee_estimator;
6767         let tx_broadcaster;
6768         let monitor;
6769         let node_state_0;
6770         let chanmon_cfgs = create_chanmon_cfgs(2);
6771         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6772         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6773         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6774
6775         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000, InitFeatures::supported(), InitFeatures::supported());
6776
6777         // Cache node A state before any channel update
6778         let previous_node_state = nodes[0].node.encode();
6779         let mut previous_chan_monitor_state = test_utils::TestVecWriter(Vec::new());
6780         nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut previous_chan_monitor_state).unwrap();
6781
6782         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
6783         send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000, 8_000_000);
6784
6785         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
6786         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
6787
6788         // Restore node A from previous state
6789         let logger: Arc<Logger> = Arc::new(test_utils::TestLogger::with_id(format!("node {}", 0)));
6790         let mut chan_monitor = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut ::std::io::Cursor::new(previous_chan_monitor_state.0), Arc::clone(&logger)).unwrap().1;
6791         let chain_monitor = Arc::new(ChainWatchInterfaceUtil::new(Network::Testnet, Arc::clone(&logger)));
6792         tx_broadcaster = test_utils::TestBroadcaster{txn_broadcasted: Mutex::new(Vec::new())};
6793         fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: 253 };
6794         keys_manager = test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::clone(&logger));
6795         monitor = test_utils::TestChannelMonitor::new(chain_monitor.clone(), &tx_broadcaster, logger.clone(), &fee_estimator);
6796         node_state_0 = {
6797                 let mut channel_monitors = HashMap::new();
6798                 channel_monitors.insert(OutPoint { txid: chan.3.txid(), index: 0 }, &mut chan_monitor);
6799                 <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut ::std::io::Cursor::new(previous_node_state), ChannelManagerReadArgs {
6800                         keys_manager: &keys_manager,
6801                         fee_estimator: &fee_estimator,
6802                         monitor: &monitor,
6803                         logger: Arc::clone(&logger),
6804                         tx_broadcaster: &tx_broadcaster,
6805                         default_config: UserConfig::default(),
6806                         channel_monitors: &mut channel_monitors,
6807                 }).unwrap().1
6808         };
6809         nodes[0].node = &node_state_0;
6810         assert!(monitor.add_monitor(OutPoint { txid: chan.3.txid(), index: 0 }, chan_monitor).is_ok());
6811         nodes[0].chan_monitor = &monitor;
6812         nodes[0].chain_monitor = chain_monitor;
6813
6814         nodes[0].block_notifier = BlockNotifier::new(nodes[0].chain_monitor.clone());
6815         nodes[0].block_notifier.register_listener(&nodes[0].chan_monitor.simple_monitor);
6816         nodes[0].block_notifier.register_listener(nodes[0].node);
6817
6818         check_added_monitors!(nodes[0], 1);
6819
6820         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6821         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6822
6823         let reestablish_0 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
6824
6825         // Check we update monitor following learning of per_commitment_point from B
6826         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_0[0]);
6827         check_added_monitors!(nodes[0], 2);
6828
6829         {
6830                 let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
6831                 assert_eq!(node_txn.len(), 0);
6832         }
6833
6834         let mut reestablish_1 = Vec::with_capacity(1);
6835         for msg in nodes[0].node.get_and_clear_pending_msg_events() {
6836                 if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
6837                         assert_eq!(*node_id, nodes[1].node.get_our_node_id());
6838                         reestablish_1.push(msg.clone());
6839                 } else if let MessageSendEvent::BroadcastChannelUpdate { .. } = msg {
6840                 } else if let MessageSendEvent::HandleError { ref action, .. } = msg {
6841                         match action {
6842                                 &ErrorAction::SendErrorMessage { ref msg } => {
6843                                         assert_eq!(msg.data, "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting");
6844                                 },
6845                                 _ => panic!("Unexpected event!"),
6846                         }
6847                 } else {
6848                         panic!("Unexpected event")
6849                 }
6850         }
6851
6852         // Check we close channel detecting A is fallen-behind
6853         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
6854         assert_eq!(check_closed_broadcast!(nodes[1], true).unwrap().data, "Peer attempted to reestablish channel with a very old local commitment transaction");
6855         check_added_monitors!(nodes[1], 1);
6856
6857
6858         // Check A is able to claim to_remote output
6859         let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
6860         assert_eq!(node_txn.len(), 1);
6861         check_spends!(node_txn[0], chan.3);
6862         assert_eq!(node_txn[0].output.len(), 2);
6863         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42};
6864         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![node_txn[0].clone()]}, 0);
6865         connect_blocks(&nodes[0].block_notifier, ANTI_REORG_DELAY - 1, 0, true, header.bitcoin_hash());
6866         let spend_txn = check_spendable_outputs!(nodes[0], 1);
6867         assert_eq!(spend_txn.len(), 1);
6868         check_spends!(spend_txn[0], node_txn[0]);
6869 }
6870
6871 #[test]
6872 fn test_check_htlc_underpaying() {
6873         // Send payment through A -> B but A is maliciously
6874         // sending a probe payment (i.e less than expected value0
6875         // to B, B should refuse payment.
6876
6877         let chanmon_cfgs = create_chanmon_cfgs(2);
6878         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6879         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6880         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6881
6882         // Create some initial channels
6883         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
6884
6885         let (payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1]], 10_000);
6886
6887         // Node 3 is expecting payment of 100_000 but receive 10_000,
6888         // fail htlc like we didn't know the preimage.
6889         nodes[1].node.claim_funds(payment_preimage, &None, 100_000);
6890         nodes[1].node.process_pending_htlc_forwards();
6891
6892         let events = nodes[1].node.get_and_clear_pending_msg_events();
6893         assert_eq!(events.len(), 1);
6894         let (update_fail_htlc, commitment_signed) = match events[0] {
6895                 MessageSendEvent::UpdateHTLCs { 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 } } => {
6896                         assert!(update_add_htlcs.is_empty());
6897                         assert!(update_fulfill_htlcs.is_empty());
6898                         assert_eq!(update_fail_htlcs.len(), 1);
6899                         assert!(update_fail_malformed_htlcs.is_empty());
6900                         assert!(update_fee.is_none());
6901                         (update_fail_htlcs[0].clone(), commitment_signed)
6902                 },
6903                 _ => panic!("Unexpected event"),
6904         };
6905         check_added_monitors!(nodes[1], 1);
6906
6907         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_fail_htlc);
6908         commitment_signed_dance!(nodes[0], nodes[1], commitment_signed, false, true);
6909
6910         let events = nodes[0].node.get_and_clear_pending_events();
6911         assert_eq!(events.len(), 1);
6912         if let &Event::PaymentFailed { payment_hash:_, ref rejected_by_dest, ref error_code, ref error_data } = &events[0] {
6913                 assert_eq!(*rejected_by_dest, true);
6914                 assert_eq!(error_code.unwrap(), 0x4000|15);
6915                 // 10_000 msat as u64, followed by a height of 99 as u32
6916                 assert_eq!(&error_data.as_ref().unwrap()[..], &[
6917                         ((10_000u64 >> 7*8) & 0xff) as u8,
6918                         ((10_000u64 >> 6*8) & 0xff) as u8,
6919                         ((10_000u64 >> 5*8) & 0xff) as u8,
6920                         ((10_000u64 >> 4*8) & 0xff) as u8,
6921                         ((10_000u64 >> 3*8) & 0xff) as u8,
6922                         ((10_000u64 >> 2*8) & 0xff) as u8,
6923                         ((10_000u64 >> 1*8) & 0xff) as u8,
6924                         ((10_000u64 >> 0*8) & 0xff) as u8,
6925                         0, 0, 0, 99]);
6926         } else {
6927                 panic!("Unexpected event");
6928         }
6929         nodes[1].node.get_and_clear_pending_events();
6930 }
6931
6932 #[test]
6933 fn test_announce_disable_channels() {
6934         // Create 2 channels between A and B. Disconnect B. Call timer_chan_freshness_every_min and check for generated
6935         // ChannelUpdate. Reconnect B, reestablish and check there is non-generated ChannelUpdate.
6936
6937         let chanmon_cfgs = create_chanmon_cfgs(2);
6938         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
6939         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
6940         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6941
6942         let short_id_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
6943         let short_id_2 = create_announced_chan_between_nodes(&nodes, 1, 0, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
6944         let short_id_3 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
6945
6946         // Disconnect peers
6947         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
6948         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
6949
6950         nodes[0].node.timer_chan_freshness_every_min(); // dirty -> stagged
6951         nodes[0].node.timer_chan_freshness_every_min(); // staged -> fresh
6952         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
6953         assert_eq!(msg_events.len(), 3);
6954         for e in msg_events {
6955                 match e {
6956                         MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
6957                                 let short_id = msg.contents.short_channel_id;
6958                                 // Check generated channel_update match list in PendingChannelUpdate
6959                                 if short_id != short_id_1 && short_id != short_id_2 && short_id != short_id_3 {
6960                                         panic!("Generated ChannelUpdate for wrong chan!");
6961                                 }
6962                         },
6963                         _ => panic!("Unexpected event"),
6964                 }
6965         }
6966         // Reconnect peers
6967         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6968         let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
6969         assert_eq!(reestablish_1.len(), 3);
6970         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6971         let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
6972         assert_eq!(reestablish_2.len(), 3);
6973
6974         // Reestablish chan_1
6975         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
6976         handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
6977         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
6978         handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
6979         // Reestablish chan_2
6980         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[1]);
6981         handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
6982         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[1]);
6983         handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
6984         // Reestablish chan_3
6985         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[2]);
6986         handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
6987         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[2]);
6988         handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
6989
6990         nodes[0].node.timer_chan_freshness_every_min();
6991         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
6992 }
6993
6994 #[test]
6995 fn test_bump_penalty_txn_on_revoked_commitment() {
6996         // In case of penalty txn with too low feerates for getting into mempools, RBF-bump them to be sure
6997         // we're able to claim outputs on revoked commitment transaction before timelocks expiration
6998
6999         let chanmon_cfgs = create_chanmon_cfgs(2);
7000         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7001         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7002         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7003
7004         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::supported(), InitFeatures::supported());
7005         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
7006         let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 3000000, 30).unwrap();
7007         send_along_route(&nodes[1], route, &vec!(&nodes[0])[..], 3000000);
7008
7009         let revoked_txn = get_local_commitment_txn!(nodes[0], chan.2);
7010         // Revoked commitment txn with 4 outputs : to_local, to_remote, 1 outgoing HTLC, 1 incoming HTLC
7011         assert_eq!(revoked_txn[0].output.len(), 4);
7012         assert_eq!(revoked_txn[0].input.len(), 1);
7013         assert_eq!(revoked_txn[0].input[0].previous_output.txid, chan.3.txid());
7014         let revoked_txid = revoked_txn[0].txid();
7015
7016         let mut penalty_sum = 0;
7017         for outp in revoked_txn[0].output.iter() {
7018                 if outp.script_pubkey.is_v0_p2wsh() {
7019                         penalty_sum += outp.value;
7020                 }
7021         }
7022
7023         // Connect blocks to change height_timer range to see if we use right soonest_timelock
7024         let header_114 = connect_blocks(&nodes[1].block_notifier, 114, 0, false, Default::default());
7025
7026         // Actually revoke tx by claiming a HTLC
7027         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
7028         let header = BlockHeader { version: 0x20000000, prev_blockhash: header_114, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7029         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_txn[0].clone()] }, 115);
7030         check_added_monitors!(nodes[1], 1);
7031
7032         // One or more justice tx should have been broadcast, check it
7033         let penalty_1;
7034         let feerate_1;
7035         {
7036                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7037                 assert_eq!(node_txn.len(), 3); // justice tx (broadcasted from ChannelMonitor) + local commitment tx + local HTLC-timeout (broadcasted from ChannelManager)
7038                 assert_eq!(node_txn[0].input.len(), 3); // Penalty txn claims to_local, offered_htlc and received_htlc outputs
7039                 assert_eq!(node_txn[0].output.len(), 1);
7040                 check_spends!(node_txn[0], revoked_txn[0]);
7041                 let fee_1 = penalty_sum - node_txn[0].output[0].value;
7042                 feerate_1 = fee_1 * 1000 / node_txn[0].get_weight() as u64;
7043                 penalty_1 = node_txn[0].txid();
7044                 node_txn.clear();
7045         };
7046
7047         // After exhaustion of height timer, a new bumped justice tx should have been broadcast, check it
7048         let header = connect_blocks(&nodes[1].block_notifier, 3, 115,  true, header.bitcoin_hash());
7049         let mut penalty_2 = penalty_1;
7050         let mut feerate_2 = 0;
7051         {
7052                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7053                 assert_eq!(node_txn.len(), 1);
7054                 if node_txn[0].input[0].previous_output.txid == revoked_txid {
7055                         assert_eq!(node_txn[0].input.len(), 3); // Penalty txn claims to_local, offered_htlc and received_htlc outputs
7056                         assert_eq!(node_txn[0].output.len(), 1);
7057                         check_spends!(node_txn[0], revoked_txn[0]);
7058                         penalty_2 = node_txn[0].txid();
7059                         // Verify new bumped tx is different from last claiming transaction, we don't want spurrious rebroadcast
7060                         assert_ne!(penalty_2, penalty_1);
7061                         let fee_2 = penalty_sum - node_txn[0].output[0].value;
7062                         feerate_2 = fee_2 * 1000 / node_txn[0].get_weight() as u64;
7063                         // Verify 25% bump heuristic
7064                         assert!(feerate_2 * 100 >= feerate_1 * 125);
7065                         node_txn.clear();
7066                 }
7067         }
7068         assert_ne!(feerate_2, 0);
7069
7070         // After exhaustion of height timer for a 2nd time, a new bumped justice tx should have been broadcast, check it
7071         connect_blocks(&nodes[1].block_notifier, 3, 118, true, header);
7072         let penalty_3;
7073         let mut feerate_3 = 0;
7074         {
7075                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7076                 assert_eq!(node_txn.len(), 1);
7077                 if node_txn[0].input[0].previous_output.txid == revoked_txid {
7078                         assert_eq!(node_txn[0].input.len(), 3); // Penalty txn claims to_local, offered_htlc and received_htlc outputs
7079                         assert_eq!(node_txn[0].output.len(), 1);
7080                         check_spends!(node_txn[0], revoked_txn[0]);
7081                         penalty_3 = node_txn[0].txid();
7082                         // Verify new bumped tx is different from last claiming transaction, we don't want spurrious rebroadcast
7083                         assert_ne!(penalty_3, penalty_2);
7084                         let fee_3 = penalty_sum - node_txn[0].output[0].value;
7085                         feerate_3 = fee_3 * 1000 / node_txn[0].get_weight() as u64;
7086                         // Verify 25% bump heuristic
7087                         assert!(feerate_3 * 100 >= feerate_2 * 125);
7088                         node_txn.clear();
7089                 }
7090         }
7091         assert_ne!(feerate_3, 0);
7092
7093         nodes[1].node.get_and_clear_pending_events();
7094         nodes[1].node.get_and_clear_pending_msg_events();
7095 }
7096
7097 #[test]
7098 fn test_bump_penalty_txn_on_revoked_htlcs() {
7099         // In case of penalty txn with too low feerates for getting into mempools, RBF-bump them to sure
7100         // we're able to claim outputs on revoked HTLC transactions before timelocks expiration
7101
7102         let chanmon_cfgs = create_chanmon_cfgs(2);
7103         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7104         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7105         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7106
7107         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::supported(), InitFeatures::supported());
7108         // Lock HTLC in both directions
7109         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3_000_000).0;
7110         route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000).0;
7111
7112         let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan.2);
7113         assert_eq!(revoked_local_txn[0].input.len(), 1);
7114         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan.3.txid());
7115
7116         // Revoke local commitment tx
7117         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 3_000_000);
7118
7119         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7120         // B will generate both revoked HTLC-timeout/HTLC-preimage txn from revoked commitment tx
7121         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1);
7122         check_closed_broadcast!(nodes[1], false);
7123         check_added_monitors!(nodes[1], 1);
7124
7125         let revoked_htlc_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7126         assert_eq!(revoked_htlc_txn.len(), 4);
7127         if revoked_htlc_txn[0].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
7128                 assert_eq!(revoked_htlc_txn[0].input.len(), 1);
7129                 check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
7130                 assert_eq!(revoked_htlc_txn[1].input.len(), 1);
7131                 assert_eq!(revoked_htlc_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7132                 check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
7133         } else if revoked_htlc_txn[1].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
7134                 assert_eq!(revoked_htlc_txn[1].input.len(), 1);
7135                 check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
7136                 assert_eq!(revoked_htlc_txn[0].input.len(), 1);
7137                 assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7138                 check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
7139         }
7140
7141         // Broadcast set of revoked txn on A
7142         let header_128 = connect_blocks(&nodes[0].block_notifier, 128, 0, true, header.bitcoin_hash());
7143         let header_129 = BlockHeader { version: 0x20000000, prev_blockhash: header_128, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7144         nodes[0].block_notifier.block_connected(&Block { header: header_129, txdata: vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone(), revoked_htlc_txn[1].clone()] }, 129);
7145         let first;
7146         let feerate_1;
7147         let penalty_txn;
7148         {
7149                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7150                 assert_eq!(node_txn.len(), 5); // 3 penalty txn on revoked commitment tx + A commitment tx + 1 penalty tnx on revoked HTLC txn
7151                 // Verify claim tx are spending revoked HTLC txn
7152                 assert_eq!(node_txn[4].input.len(), 2);
7153                 assert_eq!(node_txn[4].output.len(), 1);
7154                 check_spends!(node_txn[4], revoked_htlc_txn[0], revoked_htlc_txn[1]);
7155                 first = node_txn[4].txid();
7156                 // Store both feerates for later comparison
7157                 let fee_1 = revoked_htlc_txn[0].output[0].value + revoked_htlc_txn[1].output[0].value - node_txn[4].output[0].value;
7158                 feerate_1 = fee_1 * 1000 / node_txn[4].get_weight() as u64;
7159                 penalty_txn = vec![node_txn[0].clone(), node_txn[1].clone(), node_txn[2].clone()];
7160                 node_txn.clear();
7161         }
7162
7163         // Connect three more block to see if bumped penalty are issued for HTLC txn
7164         let header_130 = BlockHeader { version: 0x20000000, prev_blockhash: header_129.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7165         nodes[0].block_notifier.block_connected(&Block { header: header_130, txdata: penalty_txn }, 130);
7166         {
7167                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7168                 assert_eq!(node_txn.len(), 2); // 2 bumped penalty txn on revoked commitment tx
7169
7170                 check_spends!(node_txn[0], revoked_local_txn[0]);
7171                 check_spends!(node_txn[1], revoked_local_txn[0]);
7172
7173                 node_txn.clear();
7174         };
7175
7176         // Few more blocks to confirm penalty txn
7177         let header_135 = connect_blocks(&nodes[0].block_notifier, 5, 130, true, header_130.bitcoin_hash());
7178         assert!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().is_empty());
7179         let header_144 = connect_blocks(&nodes[0].block_notifier, 9, 135, true, header_135);
7180         let node_txn = {
7181                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7182                 assert_eq!(node_txn.len(), 1);
7183
7184                 assert_eq!(node_txn[0].input.len(), 2);
7185                 check_spends!(node_txn[0], revoked_htlc_txn[0], revoked_htlc_txn[1]);
7186                 // Verify bumped tx is different and 25% bump heuristic
7187                 assert_ne!(first, node_txn[0].txid());
7188                 let fee_2 = revoked_htlc_txn[0].output[0].value + revoked_htlc_txn[1].output[0].value - node_txn[0].output[0].value;
7189                 let feerate_2 = fee_2 * 1000 / node_txn[0].get_weight() as u64;
7190                 assert!(feerate_2 * 100 > feerate_1 * 125);
7191                 let txn = vec![node_txn[0].clone()];
7192                 node_txn.clear();
7193                 txn
7194         };
7195         // Broadcast claim txn and confirm blocks to avoid further bumps on this outputs
7196         let header_145 = BlockHeader { version: 0x20000000, prev_blockhash: header_144, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7197         nodes[0].block_notifier.block_connected(&Block { header: header_145, txdata: node_txn }, 145);
7198         connect_blocks(&nodes[0].block_notifier, 20, 145, true, header_145.bitcoin_hash());
7199         {
7200                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7201                 // We verify than no new transaction has been broadcast because previously
7202                 // we were buggy on this exact behavior by not tracking for monitoring remote HTLC outputs (see #411)
7203                 // which means we wouldn't see a spend of them by a justice tx and bumped justice tx
7204                 // were generated forever instead of safe cleaning after confirmation and ANTI_REORG_SAFE_DELAY blocks.
7205                 // Enforce spending of revoked htlc output by claiming transaction remove request as expected and dry
7206                 // up bumped justice generation.
7207                 assert_eq!(node_txn.len(), 0);
7208                 node_txn.clear();
7209         }
7210         check_closed_broadcast!(nodes[0], false);
7211         check_added_monitors!(nodes[0], 1);
7212 }
7213
7214 #[test]
7215 fn test_bump_penalty_txn_on_remote_commitment() {
7216         // In case of claim txn with too low feerates for getting into mempools, RBF-bump them to be sure
7217         // we're able to claim outputs on remote commitment transaction before timelocks expiration
7218
7219         // Create 2 HTLCs
7220         // Provide preimage for one
7221         // Check aggregation
7222
7223         let chanmon_cfgs = create_chanmon_cfgs(2);
7224         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7225         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7226         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7227
7228         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::supported(), InitFeatures::supported());
7229         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
7230         route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000).0;
7231
7232         // Remote commitment txn with 4 outputs : to_local, to_remote, 1 outgoing HTLC, 1 incoming HTLC
7233         let remote_txn = get_local_commitment_txn!(nodes[0], chan.2);
7234         assert_eq!(remote_txn[0].output.len(), 4);
7235         assert_eq!(remote_txn[0].input.len(), 1);
7236         assert_eq!(remote_txn[0].input[0].previous_output.txid, chan.3.txid());
7237
7238         // Claim a HTLC without revocation (provide B monitor with preimage)
7239         nodes[1].node.claim_funds(payment_preimage, &None, 3_000_000);
7240         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7241         nodes[1].block_notifier.block_connected(&Block { header, txdata: vec![remote_txn[0].clone()] }, 1);
7242         check_added_monitors!(nodes[1], 2);
7243
7244         // One or more claim tx should have been broadcast, check it
7245         let timeout;
7246         let preimage;
7247         let feerate_timeout;
7248         let feerate_preimage;
7249         {
7250                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7251                 assert_eq!(node_txn.len(), 5); // 2 * claim tx (broadcasted from ChannelMonitor) + local commitment tx + local HTLC-timeout + local HTLC-success (broadcasted from ChannelManager)
7252                 assert_eq!(node_txn[0].input.len(), 1);
7253                 assert_eq!(node_txn[1].input.len(), 1);
7254                 check_spends!(node_txn[0], remote_txn[0]);
7255                 check_spends!(node_txn[1], remote_txn[0]);
7256                 check_spends!(node_txn[2], chan.3);
7257                 check_spends!(node_txn[3], node_txn[2]);
7258                 check_spends!(node_txn[4], node_txn[2]);
7259                 if node_txn[0].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
7260                         timeout = node_txn[0].txid();
7261                         let index = node_txn[0].input[0].previous_output.vout;
7262                         let fee = remote_txn[0].output[index as usize].value - node_txn[0].output[0].value;
7263                         feerate_timeout = fee * 1000 / node_txn[0].get_weight() as u64;
7264
7265                         preimage = node_txn[1].txid();
7266                         let index = node_txn[1].input[0].previous_output.vout;
7267                         let fee = remote_txn[0].output[index as usize].value - node_txn[1].output[0].value;
7268                         feerate_preimage = fee * 1000 / node_txn[1].get_weight() as u64;
7269                 } else {
7270                         timeout = node_txn[1].txid();
7271                         let index = node_txn[1].input[0].previous_output.vout;
7272                         let fee = remote_txn[0].output[index as usize].value - node_txn[1].output[0].value;
7273                         feerate_timeout = fee * 1000 / node_txn[1].get_weight() as u64;
7274
7275                         preimage = node_txn[0].txid();
7276                         let index = node_txn[0].input[0].previous_output.vout;
7277                         let fee = remote_txn[0].output[index as usize].value - node_txn[0].output[0].value;
7278                         feerate_preimage = fee * 1000 / node_txn[0].get_weight() as u64;
7279                 }
7280                 node_txn.clear();
7281         };
7282         assert_ne!(feerate_timeout, 0);
7283         assert_ne!(feerate_preimage, 0);
7284
7285         // After exhaustion of height timer, new bumped claim txn should have been broadcast, check it
7286         connect_blocks(&nodes[1].block_notifier, 15, 1,  true, header.bitcoin_hash());
7287         {
7288                 let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7289                 assert_eq!(node_txn.len(), 2);
7290                 assert_eq!(node_txn[0].input.len(), 1);
7291                 assert_eq!(node_txn[1].input.len(), 1);
7292                 check_spends!(node_txn[0], remote_txn[0]);
7293                 check_spends!(node_txn[1], remote_txn[0]);
7294                 if node_txn[0].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
7295                         let index = node_txn[0].input[0].previous_output.vout;
7296                         let fee = remote_txn[0].output[index as usize].value - node_txn[0].output[0].value;
7297                         let new_feerate = fee * 1000 / node_txn[0].get_weight() as u64;
7298                         assert!(new_feerate * 100 > feerate_timeout * 125);
7299                         assert_ne!(timeout, node_txn[0].txid());
7300
7301                         let index = node_txn[1].input[0].previous_output.vout;
7302                         let fee = remote_txn[0].output[index as usize].value - node_txn[1].output[0].value;
7303                         let new_feerate = fee * 1000 / node_txn[1].get_weight() as u64;
7304                         assert!(new_feerate * 100 > feerate_preimage * 125);
7305                         assert_ne!(preimage, node_txn[1].txid());
7306                 } else {
7307                         let index = node_txn[1].input[0].previous_output.vout;
7308                         let fee = remote_txn[0].output[index as usize].value - node_txn[1].output[0].value;
7309                         let new_feerate = fee * 1000 / node_txn[1].get_weight() as u64;
7310                         assert!(new_feerate * 100 > feerate_timeout * 125);
7311                         assert_ne!(timeout, node_txn[1].txid());
7312
7313                         let index = node_txn[0].input[0].previous_output.vout;
7314                         let fee = remote_txn[0].output[index as usize].value - node_txn[0].output[0].value;
7315                         let new_feerate = fee * 1000 / node_txn[0].get_weight() as u64;
7316                         assert!(new_feerate * 100 > feerate_preimage * 125);
7317                         assert_ne!(preimage, node_txn[0].txid());
7318                 }
7319                 node_txn.clear();
7320         }
7321
7322         nodes[1].node.get_and_clear_pending_events();
7323         nodes[1].node.get_and_clear_pending_msg_events();
7324 }
7325
7326 #[test]
7327 fn test_set_outpoints_partial_claiming() {
7328         // - remote party claim tx, new bump tx
7329         // - disconnect remote claiming tx, new bump
7330         // - disconnect tx, see no tx anymore
7331         let chanmon_cfgs = create_chanmon_cfgs(2);
7332         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7333         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7334         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7335
7336         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::supported(), InitFeatures::supported());
7337         let payment_preimage_1 = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000).0;
7338         let payment_preimage_2 = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000).0;
7339
7340         // Remote commitment txn with 4 outputs: to_local, to_remote, 2 outgoing HTLC
7341         let remote_txn = get_local_commitment_txn!(nodes[1], chan.2);
7342         assert_eq!(remote_txn.len(), 3);
7343         assert_eq!(remote_txn[0].output.len(), 4);
7344         assert_eq!(remote_txn[0].input.len(), 1);
7345         assert_eq!(remote_txn[0].input[0].previous_output.txid, chan.3.txid());
7346         check_spends!(remote_txn[1], remote_txn[0]);
7347         check_spends!(remote_txn[2], remote_txn[0]);
7348
7349         // Connect blocks on node A to advance height towards TEST_FINAL_CLTV
7350         let prev_header_100 = connect_blocks(&nodes[1].block_notifier, 100, 0, false, Default::default());
7351         // Provide node A with both preimage
7352         nodes[0].node.claim_funds(payment_preimage_1, &None, 3_000_000);
7353         nodes[0].node.claim_funds(payment_preimage_2, &None, 3_000_000);
7354         check_added_monitors!(nodes[0], 2);
7355         nodes[0].node.get_and_clear_pending_events();
7356         nodes[0].node.get_and_clear_pending_msg_events();
7357
7358         // Connect blocks on node A commitment transaction
7359         let header = BlockHeader { version: 0x20000000, prev_blockhash: prev_header_100, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7360         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![remote_txn[0].clone()] }, 101);
7361         check_closed_broadcast!(nodes[0], false);
7362         check_added_monitors!(nodes[0], 1);
7363         // Verify node A broadcast tx claiming both HTLCs
7364         {
7365                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7366                 // ChannelMonitor: claim tx, ChannelManager: local commitment tx + HTLC-Success*2
7367                 assert_eq!(node_txn.len(), 4);
7368                 check_spends!(node_txn[0], remote_txn[0]);
7369                 check_spends!(node_txn[1], chan.3);
7370                 check_spends!(node_txn[2], node_txn[1]);
7371                 check_spends!(node_txn[3], node_txn[1]);
7372                 assert_eq!(node_txn[0].input.len(), 2);
7373                 node_txn.clear();
7374         }
7375
7376         // Connect blocks on node B
7377         connect_blocks(&nodes[1].block_notifier, 135, 0, false, Default::default());
7378         check_closed_broadcast!(nodes[1], false);
7379         check_added_monitors!(nodes[1], 1);
7380         // Verify node B broadcast 2 HTLC-timeout txn
7381         let partial_claim_tx = {
7382                 let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
7383                 assert_eq!(node_txn.len(), 3);
7384                 check_spends!(node_txn[1], node_txn[0]);
7385                 check_spends!(node_txn[2], node_txn[0]);
7386                 assert_eq!(node_txn[1].input.len(), 1);
7387                 assert_eq!(node_txn[2].input.len(), 1);
7388                 node_txn[1].clone()
7389         };
7390
7391         // Broadcast partial claim on node A, should regenerate a claiming tx with HTLC dropped
7392         let header = BlockHeader { version: 0x20000000, prev_blockhash: header.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7393         nodes[0].block_notifier.block_connected(&Block { header, txdata: vec![partial_claim_tx.clone()] }, 102);
7394         {
7395                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7396                 assert_eq!(node_txn.len(), 1);
7397                 check_spends!(node_txn[0], remote_txn[0]);
7398                 assert_eq!(node_txn[0].input.len(), 1); //dropped HTLC
7399                 node_txn.clear();
7400         }
7401         nodes[0].node.get_and_clear_pending_msg_events();
7402
7403         // Disconnect last block on node A, should regenerate a claiming tx with HTLC dropped
7404         nodes[0].block_notifier.block_disconnected(&header, 102);
7405         {
7406                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7407                 assert_eq!(node_txn.len(), 1);
7408                 check_spends!(node_txn[0], remote_txn[0]);
7409                 assert_eq!(node_txn[0].input.len(), 2); //resurrected HTLC
7410                 node_txn.clear();
7411         }
7412
7413         //// Disconnect one more block and then reconnect multiple no transaction should be generated
7414         nodes[0].block_notifier.block_disconnected(&header, 101);
7415         connect_blocks(&nodes[1].block_notifier, 15, 101, false, prev_header_100);
7416         {
7417                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7418                 assert_eq!(node_txn.len(), 0);
7419                 node_txn.clear();
7420         }
7421 }
7422
7423 #[test]
7424 fn test_counterparty_raa_skip_no_crash() {
7425         // Previously, if our counterparty sent two RAAs in a row without us having provided a
7426         // commitment transaction, we would have happily carried on and provided them the next
7427         // commitment transaction based on one RAA forward. This would probably eventually have led to
7428         // channel closure, but it would not have resulted in funds loss. Still, our
7429         // EnforcingChannelKeys would have paniced as it doesn't like jumps into the future. Here, we
7430         // check simply that the channel is closed in response to such an RAA, but don't check whether
7431         // we decide to punish our counterparty for revoking their funds (as we don't currently
7432         // implement that).
7433         let chanmon_cfgs = create_chanmon_cfgs(2);
7434         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7435         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7436         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7437         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).2;
7438
7439         let commitment_seed = nodes[0].node.channel_state.lock().unwrap().by_id.get_mut(&channel_id).unwrap().local_keys.commitment_seed().clone();
7440         const INITIAL_COMMITMENT_NUMBER: u64 = (1 << 48) - 1;
7441         let next_per_commitment_point = PublicKey::from_secret_key(&Secp256k1::new(),
7442                 &SecretKey::from_slice(&chan_utils::build_commitment_secret(&commitment_seed, INITIAL_COMMITMENT_NUMBER - 2)).unwrap());
7443         let per_commitment_secret = chan_utils::build_commitment_secret(&commitment_seed, INITIAL_COMMITMENT_NUMBER);
7444
7445         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(),
7446                 &msgs::RevokeAndACK { channel_id, per_commitment_secret, next_per_commitment_point });
7447         assert_eq!(check_closed_broadcast!(nodes[1], true).unwrap().data, "Received an unexpected revoke_and_ack");
7448         check_added_monitors!(nodes[1], 1);
7449 }
7450
7451 #[test]
7452 fn test_bump_txn_sanitize_tracking_maps() {
7453         // Sanitizing pendning_claim_request and claimable_outpoints used to be buggy,
7454         // verify we clean then right after expiration of ANTI_REORG_DELAY.
7455
7456         let chanmon_cfgs = create_chanmon_cfgs(2);
7457         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7458         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7459         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7460
7461         let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::supported(), InitFeatures::supported());
7462         // Lock HTLC in both directions
7463         let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9_000_000).0;
7464         route_payment(&nodes[1], &vec!(&nodes[0])[..], 9_000_000).0;
7465
7466         let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan.2);
7467         assert_eq!(revoked_local_txn[0].input.len(), 1);
7468         assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan.3.txid());
7469
7470         // Revoke local commitment tx
7471         claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage, 9_000_000);
7472
7473         // Broadcast set of revoked txn on A
7474         let header_128 = connect_blocks(&nodes[0].block_notifier, 128, 0,  false, Default::default());
7475         let header_129 = BlockHeader { version: 0x20000000, prev_blockhash: header_128, merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7476         nodes[0].block_notifier.block_connected(&Block { header: header_129, txdata: vec![revoked_local_txn[0].clone()] }, 129);
7477         check_closed_broadcast!(nodes[0], false);
7478         check_added_monitors!(nodes[0], 1);
7479         let penalty_txn = {
7480                 let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7481                 assert_eq!(node_txn.len(), 4); //ChannelMonitor: justice txn * 3, ChannelManager: local commitment tx
7482                 check_spends!(node_txn[0], revoked_local_txn[0]);
7483                 check_spends!(node_txn[1], revoked_local_txn[0]);
7484                 check_spends!(node_txn[2], revoked_local_txn[0]);
7485                 let penalty_txn = vec![node_txn[0].clone(), node_txn[1].clone(), node_txn[2].clone()];
7486                 node_txn.clear();
7487                 penalty_txn
7488         };
7489         let header_130 = BlockHeader { version: 0x20000000, prev_blockhash: header_129.bitcoin_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7490         nodes[0].block_notifier.block_connected(&Block { header: header_130, txdata: penalty_txn }, 130);
7491         connect_blocks(&nodes[0].block_notifier, 5, 130,  false, header_130.bitcoin_hash());
7492         {
7493                 let monitors = nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap();
7494                 if let Some(monitor) = monitors.get(&OutPoint::new(chan.3.txid(), 0)) {
7495                         assert!(monitor.onchain_tx_handler.pending_claim_requests.is_empty());
7496                         assert!(monitor.onchain_tx_handler.claimable_outpoints.is_empty());
7497                 }
7498         }
7499 }
7500
7501 #[test]
7502 fn test_override_channel_config() {
7503         let chanmon_cfgs = create_chanmon_cfgs(2);
7504         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7505         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7506         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7507
7508         // Node0 initiates a channel to node1 using the override config.
7509         let mut override_config = UserConfig::default();
7510         override_config.own_channel_config.our_to_self_delay = 200;
7511
7512         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 16_000_000, 12_000_000, 42, Some(override_config)).unwrap();
7513
7514         // Assert the channel created by node0 is using the override config.
7515         let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
7516         assert_eq!(res.channel_flags, 0);
7517         assert_eq!(res.to_self_delay, 200);
7518 }
7519
7520 #[test]
7521 fn test_override_0msat_htlc_minimum() {
7522         let mut zero_config = UserConfig::default();
7523         zero_config.own_channel_config.our_htlc_minimum_msat = 0;
7524         let chanmon_cfgs = create_chanmon_cfgs(2);
7525         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7526         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(zero_config.clone())]);
7527         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7528
7529         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 16_000_000, 12_000_000, 42, Some(zero_config)).unwrap();
7530         let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
7531         assert_eq!(res.htlc_minimum_msat, 1);
7532
7533         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &res);
7534         let res = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
7535         assert_eq!(res.htlc_minimum_msat, 1);
7536 }
7537
7538 #[test]
7539 fn test_simple_payment_secret() {
7540         // Simple test of sending a payment with a payment_secret present. This does not use any AMP
7541         // features, however.
7542         let chanmon_cfgs = create_chanmon_cfgs(3);
7543         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
7544         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
7545         let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
7546
7547         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
7548         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
7549
7550         let (payment_preimage, payment_hash) = get_payment_preimage_hash!(&nodes[0]);
7551         let payment_secret = PaymentSecret([0xdb; 32]);
7552         let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
7553         send_along_route_with_secret(&nodes[0], route, &[&[&nodes[1], &nodes[2]]], 100000, payment_hash, Some(payment_secret.clone()));
7554         // Claiming with all the correct values but the wrong secret should result in nothing...
7555         assert_eq!(nodes[2].node.claim_funds(payment_preimage, &None, 100_000), false);
7556         assert_eq!(nodes[2].node.claim_funds(payment_preimage, &Some(PaymentSecret([42; 32])), 100_000), false);
7557         // ...but with the right secret we should be able to claim all the way back
7558         claim_payment_along_route_with_secret(&nodes[0], &[&[&nodes[1], &nodes[2]]], false, payment_preimage, Some(payment_secret.clone()), 100_000);
7559 }
7560
7561 #[test]
7562 fn test_simple_mpp() {
7563         // Simple test of sending a multi-path payment.
7564         let chanmon_cfgs = create_chanmon_cfgs(4);
7565         let node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
7566         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
7567         let nodes = create_network(4, &node_cfgs, &node_chanmgrs);
7568
7569         let chan_1_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
7570         let chan_2_id = create_announced_chan_between_nodes(&nodes, 0, 2, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
7571         let chan_3_id = create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
7572         let chan_4_id = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::supported(), InitFeatures::supported()).0.contents.short_channel_id;
7573
7574         let (payment_preimage, payment_hash) = get_payment_preimage_hash!(&nodes[0]);
7575         let payment_secret = PaymentSecret([0xdb; 32]);
7576         let mut route = nodes[0].router.get_route(&nodes[3].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
7577         let path = route.paths[0].clone();
7578         route.paths.push(path);
7579         route.paths[0][0].pubkey = nodes[1].node.get_our_node_id();
7580         route.paths[0][0].short_channel_id = chan_1_id;
7581         route.paths[0][1].short_channel_id = chan_3_id;
7582         route.paths[1][0].pubkey = nodes[2].node.get_our_node_id();
7583         route.paths[1][0].short_channel_id = chan_2_id;
7584         route.paths[1][1].short_channel_id = chan_4_id;
7585         send_along_route_with_secret(&nodes[0], route, &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], 200_000, payment_hash, Some(payment_secret.clone()));
7586         // Claiming with all the correct values but the wrong secret should result in nothing...
7587         assert_eq!(nodes[3].node.claim_funds(payment_preimage, &None, 200_000), false);
7588         assert_eq!(nodes[3].node.claim_funds(payment_preimage, &Some(PaymentSecret([42; 32])), 200_000), false);
7589         // ...but with the right secret we should be able to claim all the way back
7590         claim_payment_along_route_with_secret(&nodes[0], &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], false, payment_preimage, Some(payment_secret), 200_000);
7591 }
7592
7593 #[test]
7594 fn test_update_err_monitor_lockdown() {
7595         // Our monitor will lock update of local commitment transaction if a broadcastion condition
7596         // has been fulfilled (either force-close from Channel or block height requiring a HTLC-
7597         // timeout). Trying to update monitor after lockdown should return a ChannelMonitorUpdateErr.
7598         //
7599         // This scenario may happen in a watchtower setup, where watchtower process a block height
7600         // triggering a timeout while a slow-block-processing ChannelManager receives a local signed
7601         // commitment at same time.
7602
7603         let chanmon_cfgs = create_chanmon_cfgs(2);
7604         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
7605         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
7606         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7607
7608         // Create some initial channel
7609         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
7610         let outpoint = OutPoint { txid: chan_1.3.txid(), index: 0 };
7611
7612         // Rebalance the network to generate htlc in the two directions
7613         send_payment(&nodes[0], &vec!(&nodes[1])[..], 10_000_000, 10_000_000);
7614
7615         // Route a HTLC from node 0 to node 1 (but don't settle)
7616         let preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9_000_000).0;
7617
7618         // Copy SimpleManyChannelMonitor to simulate a watchtower and update block height of node 0 until its ChannelMonitor timeout HTLC onchain
7619         let logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", 0)));
7620         let watchtower = {
7621                 let monitors = nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap();
7622                 let monitor = monitors.get(&outpoint).unwrap();
7623                 let mut w = test_utils::TestVecWriter(Vec::new());
7624                 monitor.write_for_disk(&mut w).unwrap();
7625                 let new_monitor = <(Sha256dHash, channelmonitor::ChannelMonitor<EnforcingChannelKeys>)>::read(
7626                                 &mut ::std::io::Cursor::new(&w.0), Arc::new(test_utils::TestLogger::new())).unwrap().1;
7627                 assert!(new_monitor == *monitor);
7628                 let chain_monitor = Arc::new(chaininterface::ChainWatchInterfaceUtil::new(Network::Testnet, logger.clone() as Arc<Logger>));
7629                 let watchtower = test_utils::TestChannelMonitor::new(chain_monitor, &chanmon_cfgs[0].tx_broadcaster, logger.clone(), &chanmon_cfgs[0].fee_estimator);
7630                 assert!(watchtower.add_monitor(outpoint, new_monitor).is_ok());
7631                 watchtower
7632         };
7633         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
7634         watchtower.simple_monitor.block_connected(&header, 200, &vec![], &vec![]);
7635
7636         // Try to update ChannelMonitor
7637         assert!(nodes[1].node.claim_funds(preimage, &None, 9_000_000));
7638         check_added_monitors!(nodes[1], 1);
7639         let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
7640         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
7641         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
7642         if let Some(ref mut channel) = nodes[0].node.channel_state.lock().unwrap().by_id.get_mut(&chan_1.2) {
7643                 if let Ok((_, _, _, update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].fee_estimator) {
7644                         if let Err(_) =  watchtower.simple_monitor.update_monitor(outpoint, update.clone()) {} else { assert!(false); }
7645                         if let Ok(_) = nodes[0].chan_monitor.update_monitor(outpoint, update) {} else { assert!(false); }
7646                 } else { assert!(false); }
7647         } else { assert!(false); };
7648         // Our local monitor is in-sync and hasn't processed yet timeout
7649         check_added_monitors!(nodes[0], 1);
7650         let events = nodes[0].node.get_and_clear_pending_events();
7651         assert_eq!(events.len(), 1);
7652 }