Expose API to update a channel's ChannelConfig
[rust-lightning] / lightning / src / ln / onion_route_tests.rs
1 // This file is Copyright its original authors, visible in version control
2 // history.
3 //
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
8 // licenses.
9
10 //! Tests of the onion error messages/codes which are returned when routing a payment fails.
11 //! These tests work by standing up full nodes and route payments across the network, checking the
12 //! returned errors decode to the correct thing.
13
14 use chain::channelmonitor::{ChannelMonitor, CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS};
15 use chain::keysinterface::{KeysInterface, Recipient};
16 use ln::{PaymentHash, PaymentSecret};
17 use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, HTLCForwardInfo, CLTV_FAR_FAR_AWAY, MIN_CLTV_EXPIRY_DELTA, PendingHTLCInfo, PendingHTLCRouting};
18 use ln::onion_utils;
19 use routing::gossip::{NetworkUpdate, RoutingFees, NodeId};
20 use routing::router::{get_route, PaymentParameters, Route, RouteHint, RouteHintHop};
21 use ln::features::{InitFeatures, InvoiceFeatures, NodeFeatures};
22 use ln::msgs;
23 use ln::msgs::{ChannelMessageHandler, ChannelUpdate, OptionalField};
24 use ln::wire::Encode;
25 use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
26 use util::ser::{ReadableArgs, Writeable, Writer};
27 use util::{byte_utils, test_utils};
28 use util::config::{UserConfig, ChannelConfig};
29 use util::errors::APIError;
30
31 use bitcoin::hash_types::BlockHash;
32
33 use bitcoin::hashes::Hash;
34 use bitcoin::hashes::sha256::Hash as Sha256;
35
36 use bitcoin::secp256k1;
37 use bitcoin::secp256k1::Secp256k1;
38 use bitcoin::secp256k1::{PublicKey, SecretKey};
39
40 use io;
41 use prelude::*;
42 use core::default::Default;
43
44 use ln::functional_test_utils::*;
45
46 fn run_onion_failure_test<F1,F2>(_name: &str, test_case: u8, nodes: &Vec<Node>, route: &Route, payment_hash: &PaymentHash, payment_secret: &PaymentSecret, callback_msg: F1, callback_node: F2, expected_retryable: bool, expected_error_code: Option<u16>, expected_channel_update: Option<NetworkUpdate>, expected_short_channel_id: Option<u64>)
47         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
48                                 F2: FnMut(),
49 {
50         run_onion_failure_test_with_fail_intercept(_name, test_case, nodes, route, payment_hash, payment_secret, callback_msg, |_|{}, callback_node, expected_retryable, expected_error_code, expected_channel_update, expected_short_channel_id);
51 }
52
53 // test_case
54 // 0: node1 fails backward
55 // 1: final node fails backward
56 // 2: payment completed but the user rejects the payment
57 // 3: final node fails backward (but tamper onion payloads from node0)
58 // 100: trigger error in the intermediate node and tamper returning fail_htlc
59 // 200: trigger error in the final node and tamper returning fail_htlc
60 fn run_onion_failure_test_with_fail_intercept<F1,F2,F3>(_name: &str, test_case: u8, nodes: &Vec<Node>, route: &Route, payment_hash: &PaymentHash, payment_secret: &PaymentSecret, mut callback_msg: F1, mut callback_fail: F2, mut callback_node: F3, expected_retryable: bool, expected_error_code: Option<u16>, expected_channel_update: Option<NetworkUpdate>, expected_short_channel_id: Option<u64>)
61         where F1: for <'a> FnMut(&'a mut msgs::UpdateAddHTLC),
62                                 F2: for <'a> FnMut(&'a mut msgs::UpdateFailHTLC),
63                                 F3: FnMut(),
64 {
65         macro_rules! expect_event {
66                 ($node: expr, $event_type: path) => {{
67                         let events = $node.node.get_and_clear_pending_events();
68                         assert_eq!(events.len(), 1);
69                         match events[0] {
70                                 $event_type { .. } => {},
71                                 _ => panic!("Unexpected event"),
72                         }
73                 }}
74         }
75
76         macro_rules! expect_htlc_forward {
77                 ($node: expr) => {{
78                         expect_event!($node, Event::PendingHTLCsForwardable);
79                         $node.node.process_pending_htlc_forwards();
80                 }}
81         }
82
83         // 0 ~~> 2 send payment
84         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(*payment_secret)).unwrap();
85         check_added_monitors!(nodes[0], 1);
86         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
87         // temper update_add (0 => 1)
88         let mut update_add_0 = update_0.update_add_htlcs[0].clone();
89         if test_case == 0 || test_case == 3 || test_case == 100 {
90                 callback_msg(&mut update_add_0);
91                 callback_node();
92         }
93         // 0 => 1 update_add & CS
94         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add_0);
95         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
96
97         let update_1_0 = match test_case {
98                 0|100 => { // intermediate node failure; fail backward to 0
99                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
100                         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));
101                         update_1_0
102                 },
103                 1|2|3|200 => { // final node failure; forwarding to 2
104                         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
105                         // forwarding on 1
106                         if test_case != 200 {
107                                 callback_node();
108                         }
109                         expect_htlc_forward!(&nodes[1]);
110
111                         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
112                         check_added_monitors!(&nodes[1], 1);
113                         assert_eq!(update_1.update_add_htlcs.len(), 1);
114                         // tamper update_add (1 => 2)
115                         let mut update_add_1 = update_1.update_add_htlcs[0].clone();
116                         if test_case != 3 && test_case != 200 {
117                                 callback_msg(&mut update_add_1);
118                         }
119
120                         // 1 => 2
121                         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &update_add_1);
122                         commitment_signed_dance!(nodes[2], nodes[1], update_1.commitment_signed, false, true);
123
124                         if test_case == 2 || test_case == 200 {
125                                 expect_htlc_forward!(&nodes[2]);
126                                 expect_event!(&nodes[2], Event::PaymentReceived);
127                                 callback_node();
128                                 expect_pending_htlcs_forwardable!(nodes[2]);
129                         }
130
131                         let update_2_1 = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
132                         if test_case == 2 || test_case == 200 {
133                                 check_added_monitors!(&nodes[2], 1);
134                         }
135                         assert!(update_2_1.update_fail_htlcs.len() == 1);
136
137                         let mut fail_msg = update_2_1.update_fail_htlcs[0].clone();
138                         if test_case == 200 {
139                                 callback_fail(&mut fail_msg);
140                         }
141
142                         // 2 => 1
143                         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &fail_msg);
144                         commitment_signed_dance!(nodes[1], nodes[2], update_2_1.commitment_signed, true);
145
146                         // backward fail on 1
147                         let update_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
148                         assert!(update_1_0.update_fail_htlcs.len() == 1);
149                         update_1_0
150                 },
151                 _ => unreachable!(),
152         };
153
154         // 1 => 0 commitment_signed_dance
155         if update_1_0.update_fail_htlcs.len() > 0 {
156                 let mut fail_msg = update_1_0.update_fail_htlcs[0].clone();
157                 if test_case == 100 {
158                         callback_fail(&mut fail_msg);
159                 }
160                 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
161         } else {
162                 nodes[0].node.handle_update_fail_malformed_htlc(&nodes[1].node.get_our_node_id(), &update_1_0.update_fail_malformed_htlcs[0]);
163         };
164
165         commitment_signed_dance!(nodes[0], nodes[1], update_1_0.commitment_signed, false, true);
166
167         let events = nodes[0].node.get_and_clear_pending_events();
168         assert_eq!(events.len(), 1);
169         if let &Event::PaymentPathFailed { ref rejected_by_dest, ref network_update, ref all_paths_failed, ref short_channel_id, ref error_code, .. } = &events[0] {
170                 assert_eq!(*rejected_by_dest, !expected_retryable);
171                 assert_eq!(*all_paths_failed, true);
172                 assert_eq!(*error_code, expected_error_code);
173                 if expected_channel_update.is_some() {
174                         match network_update {
175                                 Some(update) => match update {
176                                         &NetworkUpdate::ChannelUpdateMessage { .. } => {
177                                                 if let NetworkUpdate::ChannelUpdateMessage { .. } = expected_channel_update.unwrap() {} else {
178                                                         panic!("channel_update not found!");
179                                                 }
180                                         },
181                                         &NetworkUpdate::ChannelFailure { ref short_channel_id, ref is_permanent } => {
182                                                 if let NetworkUpdate::ChannelFailure { short_channel_id: ref expected_short_channel_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
183                                                         assert!(*short_channel_id == *expected_short_channel_id);
184                                                         assert!(*is_permanent == *expected_is_permanent);
185                                                 } else {
186                                                         panic!("Unexpected message event");
187                                                 }
188                                         },
189                                         &NetworkUpdate::NodeFailure { ref node_id, ref is_permanent } => {
190                                                 if let NetworkUpdate::NodeFailure { node_id: ref expected_node_id, is_permanent: ref expected_is_permanent } = expected_channel_update.unwrap() {
191                                                         assert!(*node_id == *expected_node_id);
192                                                         assert!(*is_permanent == *expected_is_permanent);
193                                                 } else {
194                                                         panic!("Unexpected message event");
195                                                 }
196                                         },
197                                 }
198                                 None => panic!("Expected channel update"),
199                         }
200                 } else {
201                         assert!(network_update.is_none());
202                 }
203                 if let Some(expected_short_channel_id) = expected_short_channel_id {
204                         match short_channel_id {
205                                 Some(short_channel_id) => assert_eq!(*short_channel_id, expected_short_channel_id),
206                                 None => panic!("Expected short channel id"),
207                         }
208                 } else {
209                         assert!(short_channel_id.is_none());
210                 }
211         } else {
212                 panic!("Unexpected event");
213         }
214 }
215
216 impl msgs::ChannelUpdate {
217         fn dummy(short_channel_id: u64) -> msgs::ChannelUpdate {
218                 use bitcoin::secp256k1::ffi::Signature as FFISignature;
219                 use bitcoin::secp256k1::ecdsa::Signature;
220                 msgs::ChannelUpdate {
221                         signature: Signature::from(unsafe { FFISignature::new() }),
222                         contents: msgs::UnsignedChannelUpdate {
223                                 chain_hash: BlockHash::hash(&vec![0u8][..]),
224                                 short_channel_id,
225                                 timestamp: 0,
226                                 flags: 0,
227                                 cltv_expiry_delta: 0,
228                                 htlc_minimum_msat: 0,
229                                 htlc_maximum_msat: OptionalField::Absent,
230                                 fee_base_msat: 0,
231                                 fee_proportional_millionths: 0,
232                                 excess_data: vec![],
233                         }
234                 }
235         }
236 }
237
238 struct BogusOnionHopData {
239         data: Vec<u8>
240 }
241 impl BogusOnionHopData {
242         fn new(orig: msgs::OnionHopData) -> Self {
243                 Self { data: orig.encode() }
244         }
245 }
246 impl Writeable for BogusOnionHopData {
247         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
248                 writer.write_all(&self.data[..])
249         }
250 }
251
252 const BADONION: u16 = 0x8000;
253 const PERM: u16 = 0x4000;
254 const NODE: u16 = 0x2000;
255 const UPDATE: u16 = 0x1000;
256
257 #[test]
258 fn test_fee_failures() {
259         // Tests that the fee required when forwarding remains consistent over time. This was
260         // previously broken, with forwarding fees floating based on the fee estimator at the time of
261         // forwarding.
262         //
263         // When this test was written, the default base fee floated based on the HTLC count.
264         // It is now fixed, so we simply set the fee to the expected value here.
265         let mut config = test_default_channel_config();
266         config.channel_config.forwarding_fee_base_msat = 196;
267
268         let chanmon_cfgs = create_chanmon_cfgs(3);
269         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
270         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[Some(config), Some(config), Some(config)]);
271         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
272         let channels = [create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()), create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known())];
273
274         // positive case
275         let (route, payment_hash_success, payment_preimage_success, payment_secret_success) = get_route_and_payment_hash!(nodes[0], nodes[2], 40_000);
276         nodes[0].node.send_payment(&route, payment_hash_success, &Some(payment_secret_success)).unwrap();
277         check_added_monitors!(nodes[0], 1);
278         pass_along_route(&nodes[0], &[&[&nodes[1], &nodes[2]]], 40_000, payment_hash_success, payment_secret_success);
279         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_success);
280
281         // If the hop gives fee_insufficient but enough fees were provided, then the previous hop
282         // malleated the payment before forwarding, taking funds when they shouldn't have.
283         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);
284         let short_channel_id = channels[0].0.contents.short_channel_id;
285         run_onion_failure_test("fee_insufficient", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
286                 msg.amount_msat -= 1;
287         }, || {}, true, Some(UPDATE|12), Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent: true}), Some(short_channel_id));
288
289         // In an earlier version, we spuriously failed to forward payments if the expected feerate
290         // changed between the channel open and the payment.
291         {
292                 let mut feerate_lock = chanmon_cfgs[1].fee_estimator.sat_per_kw.lock().unwrap();
293                 *feerate_lock *= 2;
294         }
295
296         let (payment_preimage_success, payment_hash_success, payment_secret_success) = get_payment_preimage_hash!(nodes[2]);
297         nodes[0].node.send_payment(&route, payment_hash_success, &Some(payment_secret_success)).unwrap();
298         check_added_monitors!(nodes[0], 1);
299         pass_along_route(&nodes[0], &[&[&nodes[1], &nodes[2]]], 40_000, payment_hash_success, payment_secret_success);
300         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_success);
301 }
302
303 #[test]
304 fn test_onion_failure() {
305         // When we check for amount_below_minimum below, we want to test that we're using the *right*
306         // amount, thus we need different htlc_minimum_msat values. We set node[2]'s htlc_minimum_msat
307         // to 2000, which is above the default value of 1000 set in create_node_chanmgrs.
308         // This exposed a previous bug because we were using the wrong value all the way down in
309         // Channel::get_counterparty_htlc_minimum_msat().
310         let mut node_2_cfg: UserConfig = Default::default();
311         node_2_cfg.channel_handshake_config.our_htlc_minimum_msat = 2000;
312         node_2_cfg.channel_handshake_config.announced_channel = true;
313         node_2_cfg.channel_handshake_limits.force_announced_channel_preference = false;
314
315         // When this test was written, the default base fee floated based on the HTLC count.
316         // It is now fixed, so we simply set the fee to the expected value here.
317         let mut config = test_default_channel_config();
318         config.channel_config.forwarding_fee_base_msat = 196;
319
320         let chanmon_cfgs = create_chanmon_cfgs(3);
321         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
322         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[Some(config), Some(config), Some(node_2_cfg)]);
323         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
324         let channels = [create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()), create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known())];
325         for node in nodes.iter() {
326                 *node.keys_manager.override_random_bytes.lock().unwrap() = Some([3; 32]);
327         }
328         let (route, payment_hash, _, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], 40000);
329         // positive case
330         send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 40000);
331
332         // intermediate node failure
333         let short_channel_id = channels[1].0.contents.short_channel_id;
334         run_onion_failure_test("invalid_realm", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
335                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
336                 let cur_height = nodes[0].best_block_info().1 + 1;
337                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
338                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, cur_height, &None).unwrap();
339                 let mut new_payloads = Vec::new();
340                 for payload in onion_payloads.drain(..) {
341                         new_payloads.push(BogusOnionHopData::new(payload));
342                 }
343                 // break the first (non-final) hop payload by swapping the realm (0) byte for a byte
344                 // describing a length-1 TLV payload, which is obviously bogus.
345                 new_payloads[0].data[0] = 1;
346                 msg.onion_routing_packet = onion_utils::construct_onion_packet_bogus_hopdata(new_payloads, onion_keys, [0; 32], &payment_hash);
347         }, ||{}, true, Some(PERM|22), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id));
348
349         // final node failure
350         let short_channel_id = channels[1].0.contents.short_channel_id;
351         run_onion_failure_test("invalid_realm", 3, &nodes, &route, &payment_hash, &payment_secret, |msg| {
352                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
353                 let cur_height = nodes[0].best_block_info().1 + 1;
354                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
355                 let (mut onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, cur_height, &None).unwrap();
356                 let mut new_payloads = Vec::new();
357                 for payload in onion_payloads.drain(..) {
358                         new_payloads.push(BogusOnionHopData::new(payload));
359                 }
360                 // break the last-hop payload by swapping the realm (0) byte for a byte describing a
361                 // length-1 TLV payload, which is obviously bogus.
362                 new_payloads[1].data[0] = 1;
363                 msg.onion_routing_packet = onion_utils::construct_onion_packet_bogus_hopdata(new_payloads, onion_keys, [0; 32], &payment_hash);
364         }, ||{}, false, Some(PERM|22), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id));
365
366         // the following three with run_onion_failure_test_with_fail_intercept() test only the origin node
367         // receiving simulated fail messages
368         // intermediate node failure
369         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
370                 // trigger error
371                 msg.amount_msat -= 1;
372         }, |msg| {
373                 // and tamper returning error message
374                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
375                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
376                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), NODE|2, &[0;0]);
377         }, ||{}, true, Some(NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: false}), Some(route.paths[0][0].short_channel_id));
378
379         // final node failure
380         run_onion_failure_test_with_fail_intercept("temporary_node_failure", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
381                 // and tamper returning error message
382                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
383                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
384                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), NODE|2, &[0;0]);
385         }, ||{
386                 nodes[2].node.fail_htlc_backwards(&payment_hash);
387         }, true, Some(NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: false}), Some(route.paths[0][1].short_channel_id));
388         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);
389
390         // intermediate node failure
391         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
392                 msg.amount_msat -= 1;
393         }, |msg| {
394                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
395                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
396                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
397         }, ||{}, true, Some(PERM|NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: true}), Some(route.paths[0][0].short_channel_id));
398
399         // final node failure
400         run_onion_failure_test_with_fail_intercept("permanent_node_failure", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
401                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
402                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
403                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
404         }, ||{
405                 nodes[2].node.fail_htlc_backwards(&payment_hash);
406         }, false, Some(PERM|NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: true}), Some(route.paths[0][1].short_channel_id));
407         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);
408
409         // intermediate node failure
410         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
411                 msg.amount_msat -= 1;
412         }, |msg| {
413                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
414                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
415                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
416         }, ||{
417                 nodes[2].node.fail_htlc_backwards(&payment_hash);
418         }, true, Some(PERM|NODE|3), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: true}), Some(route.paths[0][0].short_channel_id));
419
420         // final node failure
421         run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
422                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
423                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
424                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
425         }, ||{
426                 nodes[2].node.fail_htlc_backwards(&payment_hash);
427         }, false, Some(PERM|NODE|3), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][1].pubkey, is_permanent: true}), Some(route.paths[0][1].short_channel_id));
428         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);
429
430         // Our immediate peer sent UpdateFailMalformedHTLC because it couldn't understand the onion in
431         // the UpdateAddHTLC that we sent.
432         let short_channel_id = channels[0].0.contents.short_channel_id;
433         run_onion_failure_test("invalid_onion_version", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| { msg.onion_routing_packet.version = 1; }, ||{}, true,
434                 Some(BADONION|PERM|4), None, Some(short_channel_id));
435
436         run_onion_failure_test("invalid_onion_hmac", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| { msg.onion_routing_packet.hmac = [3; 32]; }, ||{}, true,
437                 Some(BADONION|PERM|5), None, Some(short_channel_id));
438
439         run_onion_failure_test("invalid_onion_key", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| { msg.onion_routing_packet.public_key = Err(secp256k1::Error::InvalidPublicKey);}, ||{}, true,
440                 Some(BADONION|PERM|6), None, Some(short_channel_id));
441
442         let short_channel_id = channels[1].0.contents.short_channel_id;
443         let chan_update = ChannelUpdate::dummy(short_channel_id);
444
445         let mut err_data = Vec::new();
446         err_data.extend_from_slice(&(chan_update.serialized_length() as u16 + 2).to_be_bytes());
447         err_data.extend_from_slice(&ChannelUpdate::TYPE.to_be_bytes());
448         err_data.extend_from_slice(&chan_update.encode());
449         run_onion_failure_test_with_fail_intercept("temporary_channel_failure", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
450                 msg.amount_msat -= 1;
451         }, |msg| {
452                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
453                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
454                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data);
455         }, ||{}, true, Some(UPDATE|7), Some(NetworkUpdate::ChannelUpdateMessage{msg: chan_update.clone()}), Some(short_channel_id));
456
457         // Check we can still handle onion failures that include channel updates without a type prefix
458         let err_data_without_type = chan_update.encode_with_len();
459         run_onion_failure_test_with_fail_intercept("temporary_channel_failure", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
460                 msg.amount_msat -= 1;
461         }, |msg| {
462                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
463                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
464                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data_without_type);
465         }, ||{}, true, Some(UPDATE|7), Some(NetworkUpdate::ChannelUpdateMessage{msg: chan_update}), Some(short_channel_id));
466
467         let short_channel_id = channels[1].0.contents.short_channel_id;
468         run_onion_failure_test_with_fail_intercept("permanent_channel_failure", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
469                 msg.amount_msat -= 1;
470         }, |msg| {
471                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
472                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
473                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|8, &[0;0]);
474                 // short_channel_id from the processing node
475         }, ||{}, true, Some(PERM|8), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id));
476
477         let short_channel_id = channels[1].0.contents.short_channel_id;
478         run_onion_failure_test_with_fail_intercept("required_channel_feature_missing", 100, &nodes, &route, &payment_hash, &payment_secret, |msg| {
479                 msg.amount_msat -= 1;
480         }, |msg| {
481                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
482                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
483                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|9, &[0;0]);
484                 // short_channel_id from the processing node
485         }, ||{}, true, Some(PERM|9), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id));
486
487         let mut bogus_route = route.clone();
488         bogus_route.paths[0][1].short_channel_id -= 1;
489         let short_channel_id = bogus_route.paths[0][1].short_channel_id;
490         run_onion_failure_test("unknown_next_peer", 0, &nodes, &bogus_route, &payment_hash, &payment_secret, |_| {}, ||{}, true, Some(PERM|10),
491           Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent:true}), Some(short_channel_id));
492
493         let short_channel_id = channels[1].0.contents.short_channel_id;
494         let amt_to_forward = nodes[1].node.channel_state.lock().unwrap().by_id.get(&channels[1].2).unwrap().get_counterparty_htlc_minimum_msat() - 1;
495         let mut bogus_route = route.clone();
496         let route_len = bogus_route.paths[0].len();
497         bogus_route.paths[0][route_len-1].fee_msat = amt_to_forward;
498         run_onion_failure_test("amount_below_minimum", 0, &nodes, &bogus_route, &payment_hash, &payment_secret, |_| {}, ||{}, true, Some(UPDATE|11), Some(NetworkUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy(short_channel_id)}), Some(short_channel_id));
499
500         // Clear pending payments so that the following positive test has the correct payment hash.
501         for node in nodes.iter() {
502                 node.node.clear_pending_payments();
503         }
504
505         // Test a positive test-case with one extra msat, meeting the minimum.
506         bogus_route.paths[0][route_len-1].fee_msat = amt_to_forward + 1;
507         let preimage = send_along_route(&nodes[0], bogus_route, &[&nodes[1], &nodes[2]], amt_to_forward+1).0;
508         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], preimage);
509
510         let short_channel_id = channels[0].0.contents.short_channel_id;
511         run_onion_failure_test("fee_insufficient", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
512                 msg.amount_msat -= 1;
513         }, || {}, true, Some(UPDATE|12), Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent: true}), Some(short_channel_id));
514
515         let short_channel_id = channels[0].0.contents.short_channel_id;
516         run_onion_failure_test("incorrect_cltv_expiry", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
517                 // need to violate: cltv_expiry - cltv_expiry_delta >= outgoing_cltv_value
518                 msg.cltv_expiry -= 1;
519         }, || {}, true, Some(UPDATE|13), Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent: true}), Some(short_channel_id));
520
521         let short_channel_id = channels[1].0.contents.short_channel_id;
522         run_onion_failure_test("expiry_too_soon", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
523                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - LATENCY_GRACE_PERIOD_BLOCKS + 1;
524                 connect_blocks(&nodes[0], height - nodes[0].best_block_info().1);
525                 connect_blocks(&nodes[1], height - nodes[1].best_block_info().1);
526                 connect_blocks(&nodes[2], height - nodes[2].best_block_info().1);
527         }, ||{}, true, Some(UPDATE|14), Some(NetworkUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy(short_channel_id)}), Some(short_channel_id));
528
529         run_onion_failure_test("unknown_payment_hash", 2, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {
530                 nodes[2].node.fail_htlc_backwards(&payment_hash);
531         }, false, Some(PERM|15), None, None);
532         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);
533
534         run_onion_failure_test("final_expiry_too_soon", 1, &nodes, &route, &payment_hash, &payment_secret, |msg| {
535                 let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - LATENCY_GRACE_PERIOD_BLOCKS + 1;
536                 connect_blocks(&nodes[0], height - nodes[0].best_block_info().1);
537                 connect_blocks(&nodes[1], height - nodes[1].best_block_info().1);
538                 connect_blocks(&nodes[2], height - nodes[2].best_block_info().1);
539         }, || {}, true, Some(17), None, None);
540
541         run_onion_failure_test("final_incorrect_cltv_expiry", 1, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {
542                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
543                         for f in pending_forwards.iter_mut() {
544                                 match f {
545                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
546                                                 forward_info.outgoing_cltv_value += 1,
547                                         _ => {},
548                                 }
549                         }
550                 }
551         }, true, Some(18), None, Some(channels[1].0.contents.short_channel_id));
552
553         run_onion_failure_test("final_incorrect_htlc_amount", 1, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {
554                 // violate amt_to_forward > msg.amount_msat
555                 for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
556                         for f in pending_forwards.iter_mut() {
557                                 match f {
558                                         &mut HTLCForwardInfo::AddHTLC { ref mut forward_info, .. } =>
559                                                 forward_info.amt_to_forward -= 1,
560                                         _ => {},
561                                 }
562                         }
563                 }
564         }, true, Some(19), None, Some(channels[1].0.contents.short_channel_id));
565
566         let short_channel_id = channels[1].0.contents.short_channel_id;
567         run_onion_failure_test("channel_disabled", 0, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {
568                 // disconnect event to the channel between nodes[1] ~ nodes[2]
569                 nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), false);
570                 nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
571         }, true, Some(UPDATE|20), Some(NetworkUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy(short_channel_id)}), Some(short_channel_id));
572         reconnect_nodes(&nodes[1], &nodes[2], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
573
574         run_onion_failure_test("expiry_too_far", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
575                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
576                 let mut route = route.clone();
577                 let height = nodes[2].best_block_info().1;
578                 route.paths[0][1].cltv_expiry_delta += CLTV_FAR_FAR_AWAY + route.paths[0][0].cltv_expiry_delta + 1;
579                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
580                 let (onion_payloads, _, htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, height, &None).unwrap();
581                 let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &payment_hash);
582                 msg.cltv_expiry = htlc_cltv;
583                 msg.onion_routing_packet = onion_packet;
584         }, ||{}, true, Some(21), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0][0].pubkey, is_permanent: true}), Some(route.paths[0][0].short_channel_id));
585
586         run_onion_failure_test_with_fail_intercept("mpp_timeout", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
587                 // Tamper returning error message
588                 let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
589                 let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
590                 msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), 23, &[0;0]);
591         }, ||{
592                 nodes[2].node.fail_htlc_backwards(&payment_hash);
593         }, true, Some(23), None, None);
594 }
595
596 fn do_test_onion_failure_stale_channel_update(announced_channel: bool) {
597         // Create a network of three nodes and two channels connecting them. We'll be updating the
598         // HTLC relay policy of the second channel, causing forwarding failures at the first hop.
599         let mut config = UserConfig::default();
600         config.channel_handshake_config.announced_channel = announced_channel;
601         config.channel_handshake_limits.force_announced_channel_preference = false;
602         config.accept_forwards_to_priv_channels = !announced_channel;
603         let chanmon_cfgs = create_chanmon_cfgs(3);
604         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
605         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, Some(config), None]);
606         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
607
608         let other_channel = create_chan_between_nodes(
609                 &nodes[0], &nodes[1], InitFeatures::known(), InitFeatures::known(),
610         );
611         let channel_to_update = if announced_channel {
612                 let channel = create_announced_chan_between_nodes(
613                         &nodes, 1, 2, InitFeatures::known(), InitFeatures::known(),
614                 );
615                 (channel.2, channel.0.contents.short_channel_id)
616         } else {
617                 let channel = create_unannounced_chan_between_nodes_with_value(
618                         &nodes, 1, 2, 100000, 10001, InitFeatures::known(), InitFeatures::known(),
619                 );
620                 (channel.0.channel_id, channel.0.short_channel_id_alias.unwrap())
621         };
622         let channel_to_update_counterparty = &nodes[2].node.get_our_node_id();
623
624         let default_config = ChannelConfig::default();
625
626         // A test payment should succeed as the ChannelConfig has not been changed yet.
627         const PAYMENT_AMT: u64 = 40000;
628         let (route, payment_hash, payment_preimage, payment_secret) = if announced_channel {
629                 get_route_and_payment_hash!(nodes[0], nodes[2], PAYMENT_AMT)
630         } else {
631                 let hop_hints = vec![RouteHint(vec![RouteHintHop {
632                         src_node_id: nodes[1].node.get_our_node_id(),
633                         short_channel_id: channel_to_update.1,
634                         fees: RoutingFees {
635                                 base_msat: default_config.forwarding_fee_base_msat,
636                                 proportional_millionths: default_config.forwarding_fee_proportional_millionths,
637                         },
638                         cltv_expiry_delta: default_config.cltv_expiry_delta,
639                         htlc_maximum_msat: None,
640                         htlc_minimum_msat: None,
641                 }])];
642                 let payment_params = PaymentParameters::from_node_id(*channel_to_update_counterparty)
643                         .with_features(InvoiceFeatures::known())
644                         .with_route_hints(hop_hints);
645                 get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, PAYMENT_AMT, TEST_FINAL_CLTV)
646         };
647         send_along_route_with_secret(&nodes[0], route.clone(), &[&[&nodes[1], &nodes[2]]], PAYMENT_AMT,
648                 payment_hash, payment_secret);
649         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage);
650
651         // Closure to update and retrieve the latest ChannelUpdate.
652         let update_and_get_channel_update = |config: &ChannelConfig, expect_new_update: bool,
653                 prev_update: Option<&msgs::ChannelUpdate>| -> Option<msgs::ChannelUpdate> {
654                 nodes[1].node.update_channel_config(
655                         channel_to_update_counterparty, &[channel_to_update.0], config,
656                 ).unwrap();
657                 let events = nodes[1].node.get_and_clear_pending_msg_events();
658                 assert_eq!(events.len(), expect_new_update as usize);
659                 if !expect_new_update {
660                         return None;
661                 }
662                 let new_update = match &events[0] {
663                         MessageSendEvent::BroadcastChannelUpdate { msg } => {
664                                 assert!(announced_channel);
665                                 msg.clone()
666                         },
667                         MessageSendEvent::SendChannelUpdate { node_id, msg } => {
668                                 assert_eq!(node_id, channel_to_update_counterparty);
669                                 assert!(!announced_channel);
670                                 msg.clone()
671                         },
672                         _ => panic!("expected Broadcast/SendChannelUpdate event"),
673                 };
674                 if prev_update.is_some() {
675                         assert!(new_update.contents.timestamp > prev_update.unwrap().contents.timestamp)
676                 }
677                 Some(new_update)
678         };
679
680         // We'll be attempting to route payments using the default ChannelUpdate for channels. This will
681         // lead to onion failures at the first hop once we update the ChannelConfig for the
682         // second hop.
683         let expect_onion_failure = |name: &str, error_code: u16, channel_update: &msgs::ChannelUpdate| {
684                 let short_channel_id = channel_to_update.1;
685                 let network_update = NetworkUpdate::ChannelUpdateMessage { msg: channel_update.clone() };
686                 run_onion_failure_test(
687                         name, 0, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {}, true,
688                         Some(error_code), Some(network_update), Some(short_channel_id),
689                 );
690         };
691
692         // Updates to cltv_expiry_delta below MIN_CLTV_EXPIRY_DELTA should fail with APIMisuseError.
693         let mut invalid_config = default_config.clone();
694         invalid_config.cltv_expiry_delta = 0;
695         match nodes[1].node.update_channel_config(
696                 channel_to_update_counterparty, &[channel_to_update.0], &invalid_config,
697         ) {
698                 Err(APIError::APIMisuseError{ .. }) => {},
699                 _ => panic!("unexpected result applying invalid cltv_expiry_delta"),
700         }
701
702         // Increase the base fee which should trigger a new ChannelUpdate.
703         let mut config = nodes[1].node.list_usable_channels().iter()
704                 .find(|channel| channel.channel_id == channel_to_update.0).unwrap()
705                 .config.unwrap();
706         config.forwarding_fee_base_msat = u32::max_value();
707         let msg = update_and_get_channel_update(&config, true, None).unwrap();
708         expect_onion_failure("fee_insufficient", UPDATE|12, &msg);
709
710         // Redundant updates should not trigger a new ChannelUpdate.
711         assert!(update_and_get_channel_update(&config, false, None).is_none());
712
713         // Similarly, updates that do not have an affect on ChannelUpdate should not trigger a new one.
714         config.force_close_avoidance_max_fee_satoshis *= 2;
715         assert!(update_and_get_channel_update(&config, false, None).is_none());
716
717         // Reset the base fee to the default and increase the proportional fee which should trigger a
718         // new ChannelUpdate.
719         config.forwarding_fee_base_msat = default_config.forwarding_fee_base_msat;
720         config.cltv_expiry_delta = u16::max_value();
721         let msg = update_and_get_channel_update(&config, true, Some(&msg)).unwrap();
722         expect_onion_failure("incorrect_cltv_expiry", UPDATE|13, &msg);
723
724         // Reset the proportional fee and increase the CLTV expiry delta which should trigger a new
725         // ChannelUpdate.
726         config.cltv_expiry_delta = default_config.cltv_expiry_delta;
727         config.forwarding_fee_proportional_millionths = u32::max_value();
728         let msg = update_and_get_channel_update(&config, true, Some(&msg)).unwrap();
729         expect_onion_failure("fee_insufficient", UPDATE|12, &msg);
730
731         // To test persistence of the updated config, we'll re-initialize the ChannelManager.
732         let config_after_restart = {
733                 let persister = test_utils::TestPersister::new();
734                 let chain_monitor = test_utils::TestChainMonitor::new(
735                         Some(nodes[1].chain_source), nodes[1].tx_broadcaster.clone(), nodes[1].logger,
736                         node_cfgs[1].fee_estimator, &persister, nodes[1].keys_manager,
737                 );
738
739                 let mut chanmon_1 = <(_, ChannelMonitor<_>)>::read(
740                         &mut &get_monitor!(nodes[1], other_channel.3).encode()[..], nodes[1].keys_manager,
741                 ).unwrap().1;
742                 let mut chanmon_2 = <(_, ChannelMonitor<_>)>::read(
743                         &mut &get_monitor!(nodes[1], channel_to_update.0).encode()[..], nodes[1].keys_manager,
744                 ).unwrap().1;
745                 let mut channel_monitors = HashMap::new();
746                 channel_monitors.insert(chanmon_1.get_funding_txo().0, &mut chanmon_1);
747                 channel_monitors.insert(chanmon_2.get_funding_txo().0, &mut chanmon_2);
748
749                 let chanmgr = <(_, ChannelManager<_, _, _, _, _, _>)>::read(
750                         &mut &nodes[1].node.encode()[..], ChannelManagerReadArgs {
751                                 default_config: *nodes[1].node.get_current_default_configuration(),
752                                 keys_manager: nodes[1].keys_manager,
753                                 fee_estimator: node_cfgs[1].fee_estimator,
754                                 chain_monitor: &chain_monitor,
755                                 tx_broadcaster: nodes[1].tx_broadcaster.clone(),
756                                 logger: nodes[1].logger,
757                                 channel_monitors: channel_monitors,
758                         },
759                 ).unwrap().1;
760                 chanmgr.list_channels().iter()
761                         .find(|channel| channel.channel_id == channel_to_update.0).unwrap()
762                         .config.unwrap()
763         };
764         assert_eq!(config, config_after_restart);
765 }
766
767 #[test]
768 fn test_onion_failure_stale_channel_update() {
769         do_test_onion_failure_stale_channel_update(false);
770         do_test_onion_failure_stale_channel_update(true);
771 }
772
773 #[test]
774 fn test_default_to_onion_payload_tlv_format() {
775         // Tests that we default to creating tlv format onion payloads when no `NodeAnnouncementInfo`
776         // `features` for a node in the `network_graph` exists, or when the node isn't in the
777         // `network_graph`, and no other known `features` for the node exists.
778         let mut priv_channels_conf = UserConfig::default();
779         priv_channels_conf.channel_handshake_config.announced_channel = false;
780         let chanmon_cfgs = create_chanmon_cfgs(5);
781         let node_cfgs = create_node_cfgs(5, &chanmon_cfgs);
782         let node_chanmgrs = create_node_chanmgrs(5, &node_cfgs, &[None, None, None, None, Some(priv_channels_conf)]);
783         let mut nodes = create_network(5, &node_cfgs, &node_chanmgrs);
784
785         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
786         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
787         create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::known(), InitFeatures::known());
788         create_unannounced_chan_between_nodes_with_value(&nodes, 3, 4, 100000, 10001, InitFeatures::known(), InitFeatures::known());
789
790         let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id());
791         let origin_node = &nodes[0];
792         let network_graph = origin_node.network_graph;
793
794         // Clears all the `NodeAnnouncementInfo` for all nodes of `nodes[0]`'s `network_graph`, so that
795         // their `features` aren't used when creating the `route`.
796         network_graph.clear_nodes_announcement_info();
797
798         let (announced_route, _, _, _) = get_route_and_payment_hash!(
799                 origin_node, nodes[3], payment_params, 10_000, TEST_FINAL_CLTV);
800
801         let hops = &announced_route.paths[0];
802         // Assert that the hop between `nodes[1]` and `nodes[2]` defaults to supporting variable length
803         // onions, as `nodes[0]` has no `NodeAnnouncementInfo` `features` for `node[2]`
804         assert!(hops[1].node_features.supports_variable_length_onion());
805         // Assert that the hop between `nodes[2]` and `nodes[3]` defaults to supporting variable length
806         // onions, as `nodes[0]` has no `NodeAnnouncementInfo` `features` for `node[3]`, and no `InvoiceFeatures`
807         // for the `payment_params`, which would otherwise have been used.
808         assert!(hops[2].node_features.supports_variable_length_onion());
809         // Note that we do not assert that `hops[0]` (the channel between `nodes[0]` and `nodes[1]`)
810         // supports variable length onions, as the `InitFeatures` exchanged in the init message
811         // between the nodes will be used when creating the route. We therefore do not default to
812         // supporting variable length onions for that hop, as the `InitFeatures` in this case are
813         // `InitFeatures::known()`.
814
815         let unannounced_chan = &nodes[4].node.list_usable_channels()[0];
816
817         let last_hop = RouteHint(vec![RouteHintHop {
818                 src_node_id: nodes[3].node.get_our_node_id(),
819                 short_channel_id: unannounced_chan.short_channel_id.unwrap(),
820                 fees: RoutingFees {
821                         base_msat: 0,
822                         proportional_millionths: 0,
823                 },
824                 cltv_expiry_delta: 42,
825                 htlc_minimum_msat: None,
826                 htlc_maximum_msat: None,
827         }]);
828
829         let unannounced_chan_params = PaymentParameters::from_node_id(nodes[4].node.get_our_node_id()).with_route_hints(vec![last_hop]);
830         let (unannounced_route, _, _, _) = get_route_and_payment_hash!(
831                 origin_node, nodes[4], unannounced_chan_params, 10_000, TEST_FINAL_CLTV);
832
833         let unannounced_chan_hop = &unannounced_route.paths[0][3];
834         // Ensure that `nodes[4]` doesn't exist in `nodes[0]`'s `network_graph`, as it's not public.
835         assert!(&network_graph.read_only().nodes().get(&NodeId::from_pubkey(&nodes[4].node.get_our_node_id())).is_none());
836         // Assert that the hop between `nodes[3]` and `nodes[4]` defaults to supporting variable length
837         // onions, even though `nodes[4]` as `nodes[0]` doesn't exists in `nodes[0]`'s `network_graph`,
838         // and no `InvoiceFeatures` for the `payment_params` exists, which would otherwise have been
839         // used.
840         assert!(unannounced_chan_hop.node_features.supports_variable_length_onion());
841
842         let cur_height = nodes[0].best_block_info().1 + 1;
843         let (announced_route_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&announced_route.paths[0], 40000, &None, cur_height, &None).unwrap();
844         let (unannounced_route_paylods, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&unannounced_route.paths[0], 40000, &None, cur_height, &None).unwrap();
845
846         for onion_payloads in vec![announced_route_payloads, unannounced_route_paylods] {
847                 for onion_payload in onion_payloads.iter() {
848                         match onion_payload.format {
849                                 msgs::OnionHopDataFormat::Legacy {..} => {
850                                         panic!("Generated a `msgs::OnionHopDataFormat::Legacy` payload, even though that shouldn't have happend.");
851                                 }
852                                 _ => {}
853                         }
854                 }
855         }
856 }
857
858 #[test]
859 fn test_do_not_default_to_onion_payload_tlv_format_when_unsupported() {
860         // Tests that we do not default to creating tlv onions if either of these types features
861         // exists, which specifies no support for variable length onions for a specific hop, when
862         // creating a route:
863         // 1. `InitFeatures` to the counterparty node exchanged with the init message to the node.
864         // 2. `NodeFeatures` in the `NodeAnnouncementInfo` of a node in sender node's `network_graph`.
865         // 3. `InvoiceFeatures` specified by the receiving node, when no `NodeAnnouncementInfo`
866         // `features` exists for the receiver in the sender's `network_graph`.
867         let chanmon_cfgs = create_chanmon_cfgs(4);
868         let mut node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
869
870         // Set `node[1]` config to `InitFeatures::empty()` which return `false` for
871         // `supports_variable_length_onion()`
872         let mut node_1_cfg = &mut node_cfgs[1];
873         node_1_cfg.features = InitFeatures::empty();
874
875         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
876         let mut nodes = create_network(4, &node_cfgs, &node_chanmgrs);
877
878         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
879         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
880         create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::known(), InitFeatures::known());
881
882         let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id())
883                 .with_features(InvoiceFeatures::empty());
884         let origin_node = &nodes[0];
885         let network_graph = origin_node.network_graph;
886         network_graph.clear_nodes_announcement_info();
887
888         // Set `NodeAnnouncementInfo` `features` which do not support variable length onions for
889         // `nodes[2]` in `nodes[0]`'s `network_graph`.
890         let nodes_2_unsigned_node_announcement = msgs::UnsignedNodeAnnouncement {
891                 features: NodeFeatures::empty(),
892                 timestamp: 0,
893                 node_id: nodes[2].node.get_our_node_id(),
894                 rgb: [32; 3],
895                 alias: [16;32],
896                 addresses: Vec::new(),
897                 excess_address_data: Vec::new(),
898                 excess_data: Vec::new(),
899         };
900         let _res = network_graph.update_node_from_unsigned_announcement(&nodes_2_unsigned_node_announcement);
901
902         let (route, _, _, _) = get_route_and_payment_hash!(
903                 origin_node, nodes[3], payment_params, 10_000, TEST_FINAL_CLTV);
904
905         let hops = &route.paths[0];
906
907         // Assert that the hop between `nodes[0]` and `nodes[1]` doesn't support variable length
908         // onions, as as the `InitFeatures` exchanged (`InitFeatures::empty()`) in the init message
909         // between the nodes when setting up the channel is used when creating the `route` and that we
910         // therefore do not default to supporting variable length onions. Despite `nodes[0]` having no
911         // `NodeAnnouncementInfo` `features` for `node[1]`.
912         assert!(!hops[0].node_features.supports_variable_length_onion());
913         // Assert that the hop between `nodes[1]` and `nodes[2]` uses the `features` from
914         // `nodes_2_unsigned_node_announcement` that doesn't support variable length onions.
915         assert!(!hops[1].node_features.supports_variable_length_onion());
916         // Assert that the hop between `nodes[2]` and `nodes[3]` uses the `InvoiceFeatures` set to the
917         // `payment_params`, that doesn't support variable length onions. We therefore do not end up
918         // defaulting to supporting variable length onions, despite `nodes[0]` having no
919         // `NodeAnnouncementInfo` `features` for `node[3]`.
920         assert!(!hops[2].node_features.supports_variable_length_onion());
921
922         let cur_height = nodes[0].best_block_info().1 + 1;
923         let (onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils::build_onion_payloads(&route.paths[0], 40000, &None, cur_height, &None).unwrap();
924
925         for onion_payload in onion_payloads.iter() {
926                 match onion_payload.format {
927                         msgs::OnionHopDataFormat::Legacy {..} => {}
928                         _ => {
929                                 panic!("Should have only have generated `msgs::OnionHopDataFormat::Legacy` payloads");
930                         }
931                 }
932         }
933 }
934
935 macro_rules! get_phantom_route {
936         ($nodes: expr, $amt: expr, $channel: expr) => {{
937                 let secp_ctx = Secp256k1::new();
938                 let phantom_secret = $nodes[1].keys_manager.get_node_secret(Recipient::PhantomNode).unwrap();
939                 let phantom_pubkey = PublicKey::from_secret_key(&secp_ctx, &phantom_secret);
940                 let phantom_route_hint = $nodes[1].node.get_phantom_route_hints();
941                 let payment_params = PaymentParameters::from_node_id(phantom_pubkey)
942                         .with_features(InvoiceFeatures::known())
943                         .with_route_hints(vec![RouteHint(vec![
944                                         RouteHintHop {
945                                                 src_node_id: $nodes[0].node.get_our_node_id(),
946                                                 short_channel_id: $channel.0.contents.short_channel_id,
947                                                 fees: RoutingFees {
948                                                         base_msat: $channel.0.contents.fee_base_msat,
949                                                         proportional_millionths: $channel.0.contents.fee_proportional_millionths,
950                                                 },
951                                                 cltv_expiry_delta: $channel.0.contents.cltv_expiry_delta,
952                                                 htlc_minimum_msat: None,
953                                                 htlc_maximum_msat: None,
954                                         },
955                                         RouteHintHop {
956                                                 src_node_id: phantom_route_hint.real_node_pubkey,
957                                                 short_channel_id: phantom_route_hint.phantom_scid,
958                                                 fees: RoutingFees {
959                                                         base_msat: 0,
960                                                         proportional_millionths: 0,
961                                                 },
962                                                 cltv_expiry_delta: MIN_CLTV_EXPIRY_DELTA,
963                                                 htlc_minimum_msat: None,
964                                                 htlc_maximum_msat: None,
965                                         }
966                 ])]);
967                 let scorer = test_utils::TestScorer::with_penalty(0);
968                 let network_graph = $nodes[0].network_graph.read_only();
969                 (get_route(
970                         &$nodes[0].node.get_our_node_id(), &payment_params, &network_graph,
971                         Some(&$nodes[0].node.list_usable_channels().iter().collect::<Vec<_>>()),
972                         $amt, TEST_FINAL_CLTV, $nodes[0].logger, &scorer, &[0u8; 32]
973                 ).unwrap(), phantom_route_hint.phantom_scid)
974         }
975 }}
976
977 #[test]
978 fn test_phantom_onion_hmac_failure() {
979         let chanmon_cfgs = create_chanmon_cfgs(2);
980         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
981         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
982         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
983
984         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
985
986         // Get the route.
987         let recv_value_msat = 10_000;
988         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_value_msat));
989         let (route, phantom_scid) = get_phantom_route!(nodes, recv_value_msat, channel);
990
991         // Route the HTLC through to the destination.
992         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
993         check_added_monitors!(nodes[0], 1);
994         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
995         let mut update_add = update_0.update_add_htlcs[0].clone();
996
997         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
998         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
999
1000         // Modify the payload so the phantom hop's HMAC is bogus.
1001         let sha256_of_onion = {
1002                 let mut channel_state = nodes[1].node.channel_state.lock().unwrap();
1003                 let mut pending_forward = channel_state.forward_htlcs.get_mut(&phantom_scid).unwrap();
1004                 match pending_forward[0] {
1005                         HTLCForwardInfo::AddHTLC {
1006                                 forward_info: PendingHTLCInfo {
1007                                         routing: PendingHTLCRouting::Forward { ref mut onion_packet, .. },
1008                                         ..
1009                                 }, ..
1010                         } => {
1011                                 onion_packet.hmac[onion_packet.hmac.len() - 1] ^= 1;
1012                                 Sha256::hash(&onion_packet.hop_data).into_inner().to_vec()
1013                         },
1014                         _ => panic!("Unexpected forward"),
1015                 }
1016         };
1017         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1018         nodes[1].node.process_pending_htlc_forwards();
1019         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1020         nodes[1].node.process_pending_htlc_forwards();
1021         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1022         check_added_monitors!(&nodes[1], 1);
1023         assert!(update_1.update_fail_htlcs.len() == 1);
1024         let fail_msg = update_1.update_fail_htlcs[0].clone();
1025         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1026         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1027
1028         // Ensure the payment fails with the expected error.
1029         let mut fail_conditions = PaymentFailedConditions::new()
1030                 .blamed_scid(phantom_scid)
1031                 .blamed_chan_closed(true)
1032                 .expected_htlc_error_data(0x8000 | 0x4000 | 5, &sha256_of_onion);
1033         expect_payment_failed_conditions(&nodes[0], payment_hash, false, fail_conditions);
1034 }
1035
1036 #[test]
1037 fn test_phantom_invalid_onion_payload() {
1038         let chanmon_cfgs = create_chanmon_cfgs(2);
1039         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1040         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1041         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1042
1043         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1044
1045         // Get the route.
1046         let recv_value_msat = 10_000;
1047         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_value_msat));
1048         let (route, phantom_scid) = get_phantom_route!(nodes, recv_value_msat, channel);
1049
1050         // We'll use the session priv later when constructing an invalid onion packet.
1051         let session_priv = [3; 32];
1052         *nodes[0].keys_manager.override_random_bytes.lock().unwrap() = Some(session_priv);
1053         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1054         check_added_monitors!(nodes[0], 1);
1055         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1056         let mut update_add = update_0.update_add_htlcs[0].clone();
1057
1058         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1059         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1060
1061         // Modify the onion packet to have an invalid payment amount.
1062         for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
1063                 for f in pending_forwards.iter_mut() {
1064                         match f {
1065                                 &mut HTLCForwardInfo::AddHTLC {
1066                                         forward_info: PendingHTLCInfo {
1067                                                 routing: PendingHTLCRouting::Forward { ref mut onion_packet, .. },
1068                                                 ..
1069                                         }, ..
1070                                 } => {
1071                                         // Construct the onion payloads for the entire route and an invalid amount.
1072                                         let height = nodes[0].best_block_info().1;
1073                                         let session_priv = SecretKey::from_slice(&session_priv).unwrap();
1074                                         let mut onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
1075                                         let (mut onion_payloads, _, _) = onion_utils::build_onion_payloads(&route.paths[0], msgs::MAX_VALUE_MSAT + 1, &Some(payment_secret), height + 1, &None).unwrap();
1076                                         // We only want to construct the onion packet for the last hop, not the entire route, so
1077                                         // remove the first hop's payload and its keys.
1078                                         onion_keys.remove(0);
1079                                         onion_payloads.remove(0);
1080
1081                                         let new_onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &payment_hash);
1082                                         onion_packet.hop_data = new_onion_packet.hop_data;
1083                                         onion_packet.hmac = new_onion_packet.hmac;
1084                                 },
1085                                 _ => panic!("Unexpected forward"),
1086                         }
1087                 }
1088         }
1089         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1090         nodes[1].node.process_pending_htlc_forwards();
1091         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1092         nodes[1].node.process_pending_htlc_forwards();
1093         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1094         check_added_monitors!(&nodes[1], 1);
1095         assert!(update_1.update_fail_htlcs.len() == 1);
1096         let fail_msg = update_1.update_fail_htlcs[0].clone();
1097         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1098         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1099
1100         // Ensure the payment fails with the expected error.
1101         let error_data = Vec::new();
1102         let mut fail_conditions = PaymentFailedConditions::new()
1103                 .blamed_scid(phantom_scid)
1104                 .blamed_chan_closed(true)
1105                 .expected_htlc_error_data(0x4000 | 22, &error_data);
1106         expect_payment_failed_conditions(&nodes[0], payment_hash, true, fail_conditions);
1107 }
1108
1109 #[test]
1110 fn test_phantom_final_incorrect_cltv_expiry() {
1111         let chanmon_cfgs = create_chanmon_cfgs(2);
1112         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1113         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1114         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1115
1116         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1117
1118         // Get the route.
1119         let recv_value_msat = 10_000;
1120         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_value_msat));
1121         let (route, phantom_scid) = get_phantom_route!(nodes, recv_value_msat, channel);
1122
1123         // Route the HTLC through to the destination.
1124         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1125         check_added_monitors!(nodes[0], 1);
1126         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1127         let mut update_add = update_0.update_add_htlcs[0].clone();
1128
1129         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1130         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1131
1132         // Modify the payload so the phantom hop's HMAC is bogus.
1133         for (_, pending_forwards) in nodes[1].node.channel_state.lock().unwrap().forward_htlcs.iter_mut() {
1134                 for f in pending_forwards.iter_mut() {
1135                         match f {
1136                                 &mut HTLCForwardInfo::AddHTLC {
1137                                         forward_info: PendingHTLCInfo { ref mut outgoing_cltv_value, .. }, ..
1138                                 } => {
1139                                         *outgoing_cltv_value += 1;
1140                                 },
1141                                 _ => panic!("Unexpected forward"),
1142                         }
1143                 }
1144         }
1145         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1146         nodes[1].node.process_pending_htlc_forwards();
1147         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1148         nodes[1].node.process_pending_htlc_forwards();
1149         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1150         check_added_monitors!(&nodes[1], 1);
1151         assert!(update_1.update_fail_htlcs.len() == 1);
1152         let fail_msg = update_1.update_fail_htlcs[0].clone();
1153         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1154         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1155
1156         // Ensure the payment fails with the expected error.
1157         let expected_cltv = 82;
1158         let error_data = byte_utils::be32_to_array(expected_cltv).to_vec();
1159         let mut fail_conditions = PaymentFailedConditions::new()
1160                 .blamed_scid(phantom_scid)
1161                 .expected_htlc_error_data(18, &error_data);
1162         expect_payment_failed_conditions(&nodes[0], payment_hash, false, fail_conditions);
1163 }
1164
1165 #[test]
1166 fn test_phantom_failure_too_low_cltv() {
1167         let chanmon_cfgs = create_chanmon_cfgs(2);
1168         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1169         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1170         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1171
1172         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1173
1174         // Get the route.
1175         let recv_value_msat = 10_000;
1176         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_value_msat));
1177         let (mut route, phantom_scid) = get_phantom_route!(nodes, recv_value_msat, channel);
1178
1179         // Modify the route to have a too-low cltv.
1180         route.paths[0][1].cltv_expiry_delta = 5;
1181
1182         // Route the HTLC through to the destination.
1183         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1184         check_added_monitors!(nodes[0], 1);
1185         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1186         let mut update_add = update_0.update_add_htlcs[0].clone();
1187
1188         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1189         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1190
1191         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1192         nodes[1].node.process_pending_htlc_forwards();
1193         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1194         nodes[1].node.process_pending_htlc_forwards();
1195         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1196         check_added_monitors!(&nodes[1], 1);
1197         assert!(update_1.update_fail_htlcs.len() == 1);
1198         let fail_msg = update_1.update_fail_htlcs[0].clone();
1199         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1200         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1201
1202         // Ensure the payment fails with the expected error.
1203         let error_data = Vec::new();
1204         let mut fail_conditions = PaymentFailedConditions::new()
1205                 .blamed_scid(phantom_scid)
1206                 .expected_htlc_error_data(17, &error_data);
1207         expect_payment_failed_conditions(&nodes[0], payment_hash, false, fail_conditions);
1208 }
1209
1210 #[test]
1211 fn test_phantom_failure_too_low_recv_amt() {
1212         let chanmon_cfgs = create_chanmon_cfgs(2);
1213         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1214         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1215         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1216
1217         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1218
1219         // Get the route with a too-low amount.
1220         let recv_amt_msat = 10_000;
1221         let bad_recv_amt_msat = recv_amt_msat - 10;
1222         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_amt_msat));
1223         let (mut route, phantom_scid) = get_phantom_route!(nodes, bad_recv_amt_msat, channel);
1224
1225         // Route the HTLC through to the destination.
1226         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1227         check_added_monitors!(nodes[0], 1);
1228         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1229         let mut update_add = update_0.update_add_htlcs[0].clone();
1230
1231         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1232         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1233
1234         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1235         nodes[1].node.process_pending_htlc_forwards();
1236         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1237         nodes[1].node.process_pending_htlc_forwards();
1238         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1239         nodes[1].node.process_pending_htlc_forwards();
1240         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1241         check_added_monitors!(&nodes[1], 1);
1242         assert!(update_1.update_fail_htlcs.len() == 1);
1243         let fail_msg = update_1.update_fail_htlcs[0].clone();
1244         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1245         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1246
1247         // Ensure the payment fails with the expected error.
1248         let mut error_data = byte_utils::be64_to_array(bad_recv_amt_msat).to_vec();
1249         error_data.extend_from_slice(
1250                 &byte_utils::be32_to_array(nodes[1].node.best_block.read().unwrap().height()),
1251         );
1252         let mut fail_conditions = PaymentFailedConditions::new()
1253                 .blamed_scid(phantom_scid)
1254                 .expected_htlc_error_data(0x4000 | 15, &error_data);
1255         expect_payment_failed_conditions(&nodes[0], payment_hash, true, fail_conditions);
1256 }
1257
1258 #[test]
1259 fn test_phantom_dust_exposure_failure() {
1260         // Set the max dust exposure to the dust limit.
1261         let max_dust_exposure = 546;
1262         let mut receiver_config = UserConfig::default();
1263         receiver_config.channel_config.max_dust_htlc_exposure_msat = max_dust_exposure;
1264         receiver_config.channel_handshake_config.announced_channel = true;
1265
1266         let chanmon_cfgs = create_chanmon_cfgs(2);
1267         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1268         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(receiver_config)]);
1269         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1270
1271         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1272
1273         // Get the route with an amount exceeding the dust exposure threshold of nodes[1].
1274         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(max_dust_exposure + 1));
1275         let (mut route, _) = get_phantom_route!(nodes, max_dust_exposure + 1, channel);
1276
1277         // Route the HTLC through to the destination.
1278         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1279         check_added_monitors!(nodes[0], 1);
1280         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1281         let mut update_add = update_0.update_add_htlcs[0].clone();
1282
1283         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1284         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1285
1286         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1287         assert!(update_1.update_fail_htlcs.len() == 1);
1288         let fail_msg = update_1.update_fail_htlcs[0].clone();
1289         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1290         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1291
1292         // Ensure the payment fails with the expected error.
1293         let mut err_data = Vec::new();
1294         err_data.extend_from_slice(&(channel.1.serialized_length() as u16 + 2).to_be_bytes());
1295         err_data.extend_from_slice(&ChannelUpdate::TYPE.to_be_bytes());
1296         err_data.extend_from_slice(&channel.1.encode());
1297
1298         let mut fail_conditions = PaymentFailedConditions::new()
1299                 .blamed_scid(channel.0.contents.short_channel_id)
1300                 .blamed_chan_closed(false)
1301                 .expected_htlc_error_data(0x1000 | 7, &err_data);
1302                 expect_payment_failed_conditions(&nodes[0], payment_hash, false, fail_conditions);
1303 }
1304
1305 #[test]
1306 fn test_phantom_failure_reject_payment() {
1307         // Test that the user can successfully fail back a phantom node payment.
1308         let chanmon_cfgs = create_chanmon_cfgs(2);
1309         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1310         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1311         let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1312
1313         let channel = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1314
1315         // Get the route with a too-low amount.
1316         let recv_amt_msat = 10_000;
1317         let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[1], Some(recv_amt_msat));
1318         let (mut route, phantom_scid) = get_phantom_route!(nodes, recv_amt_msat, channel);
1319
1320         // Route the HTLC through to the destination.
1321         nodes[0].node.send_payment(&route, payment_hash.clone(), &Some(payment_secret)).unwrap();
1322         check_added_monitors!(nodes[0], 1);
1323         let update_0 = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1324         let mut update_add = update_0.update_add_htlcs[0].clone();
1325
1326         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &update_add);
1327         commitment_signed_dance!(nodes[1], nodes[0], &update_0.commitment_signed, false, true);
1328
1329         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1330         nodes[1].node.process_pending_htlc_forwards();
1331         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1332         nodes[1].node.process_pending_htlc_forwards();
1333         expect_payment_received!(nodes[1], payment_hash, payment_secret, recv_amt_msat);
1334         nodes[1].node.fail_htlc_backwards(&payment_hash);
1335         expect_pending_htlcs_forwardable_ignore!(nodes[1]);
1336         nodes[1].node.process_pending_htlc_forwards();
1337
1338         let update_1 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1339         check_added_monitors!(&nodes[1], 1);
1340         assert!(update_1.update_fail_htlcs.len() == 1);
1341         let fail_msg = update_1.update_fail_htlcs[0].clone();
1342         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &fail_msg);
1343         commitment_signed_dance!(nodes[0], nodes[1], update_1.commitment_signed, false);
1344
1345         // Ensure the payment fails with the expected error.
1346         let mut error_data = byte_utils::be64_to_array(recv_amt_msat).to_vec();
1347         error_data.extend_from_slice(
1348                 &byte_utils::be32_to_array(nodes[1].node.best_block.read().unwrap().height()),
1349         );
1350         let mut fail_conditions = PaymentFailedConditions::new()
1351                 .blamed_scid(phantom_scid)
1352                 .expected_htlc_error_data(0x4000 | 15, &error_data);
1353         expect_payment_failed_conditions(&nodes[0], payment_hash, true, fail_conditions);
1354 }