Skip to content

Commit ca10349

Browse files
authored
Merge pull request #1134 from jkczyz/2021-10-payee-arg
Payee abstraction for use in get_route and PaymentPathFailed
2 parents 0a31c12 + 8e7ceab commit ca10349

13 files changed

+353
-174
lines changed

fuzz/src/full_stack.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,Ig
3838
use lightning::ln::msgs::DecodeError;
3939
use lightning::ln::script::ShutdownScript;
4040
use lightning::routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
41-
use lightning::routing::router::get_route;
41+
use lightning::routing::router::{get_route, Payee};
4242
use lightning::routing::scorer::Scorer;
4343
use lightning::util::config::UserConfig;
4444
use lightning::util::errors::APIError;
@@ -438,7 +438,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
438438
},
439439
4 => {
440440
let value = slice_to_be24(get_slice!(3)) as u64;
441-
let route = match get_route(&our_id, &net_graph_msg_handler.network_graph, &get_pubkey!(), None, None, &Vec::new(), value, 42, Arc::clone(&logger), &scorer) {
441+
let payee = Payee::new(get_pubkey!());
442+
let route = match get_route(&our_id, &payee, &net_graph_msg_handler.network_graph, None, value, 42, Arc::clone(&logger), &scorer) {
442443
Ok(route) => route,
443444
Err(_) => return,
444445
};
@@ -455,7 +456,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
455456
},
456457
15 => {
457458
let value = slice_to_be24(get_slice!(3)) as u64;
458-
let mut route = match get_route(&our_id, &net_graph_msg_handler.network_graph, &get_pubkey!(), None, None, &Vec::new(), value, 42, Arc::clone(&logger), &scorer) {
459+
let payee = Payee::new(get_pubkey!());
460+
let mut route = match get_route(&our_id, &payee, &net_graph_msg_handler.network_graph, None, value, 42, Arc::clone(&logger), &scorer) {
459461
Ok(route) => route,
460462
Err(_) => return,
461463
};

fuzz/src/router.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use lightning::chain::transaction::OutPoint;
1616
use lightning::ln::channelmanager::{ChannelDetails, ChannelCounterparty};
1717
use lightning::ln::features::InitFeatures;
1818
use lightning::ln::msgs;
19-
use lightning::routing::router::{get_route, RouteHint, RouteHintHop};
19+
use lightning::routing::router::{get_route, Payee, RouteHint, RouteHintHop};
2020
use lightning::routing::scorer::Scorer;
2121
use lightning::util::logger::Logger;
2222
use lightning::util::ser::Readable;
@@ -250,9 +250,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
250250
}
251251
let scorer = Scorer::new(0);
252252
for target in node_pks.iter() {
253-
let _ = get_route(&our_pubkey, &net_graph, target, None,
253+
let payee = Payee::new(*target).with_route_hints(last_hops.clone());
254+
let _ = get_route(&our_pubkey, &payee, &net_graph,
254255
first_hops.map(|c| c.iter().collect::<Vec<_>>()).as_ref().map(|a| a.as_slice()),
255-
&last_hops.iter().collect::<Vec<_>>(),
256256
slice_to_be64(get_slice!(8)), slice_to_be32(get_slice!(4)), Arc::clone(&logger), &scorer);
257257
}
258258
},

lightning-invoice/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1208,10 +1208,10 @@ impl Invoice {
12081208
}
12091209

12101210
/// Returns a list of all routes included in the invoice as the underlying hints
1211-
pub fn route_hints(&self) -> Vec<&RouteHint> {
1211+
pub fn route_hints(&self) -> Vec<RouteHint> {
12121212
find_all_extract!(
12131213
self.signed_invoice.known_tagged_fields(), TaggedField::PrivateRoute(ref x), x
1214-
).map(|route| &**route).collect()
1214+
).map(|route| (**route).clone()).collect()
12151215
}
12161216

12171217
/// Returns the currency for which the invoice was issued

lightning-invoice/src/utils.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,19 @@ mod test {
113113
assert_eq!(invoice.min_final_cltv_expiry(), MIN_FINAL_CLTV_EXPIRY as u64);
114114
assert_eq!(invoice.description(), InvoiceDescription::Direct(&Description("test".to_string())));
115115

116+
let payee = router::Payee::new(invoice.recover_payee_pub_key())
117+
.with_features(invoice.features().unwrap().clone())
118+
.with_route_hints(invoice.route_hints());
116119
let amt_msat = invoice.amount_pico_btc().unwrap() / 10;
117120
let first_hops = nodes[0].node.list_usable_channels();
118-
let last_hops = invoice.route_hints();
119121
let network_graph = &nodes[0].net_graph_msg_handler.network_graph;
120122
let logger = test_utils::TestLogger::new();
121123
let scorer = Scorer::new(0);
122124
let route = router::get_route(
123125
&nodes[0].node.get_our_node_id(),
126+
&payee,
124127
network_graph,
125-
&invoice.recover_payee_pub_key(),
126-
Some(invoice.features().unwrap().clone()),
127128
Some(&first_hops.iter().collect::<Vec<_>>()),
128-
&last_hops,
129129
amt_msat,
130130
invoice.min_final_cltv_expiry() as u32,
131131
&logger,

lightning/src/ln/channelmanager.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -3114,6 +3114,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
31143114
all_paths_failed: payment.get().remaining_parts() == 0,
31153115
path: path.clone(),
31163116
short_channel_id: None,
3117+
retry: None,
31173118
#[cfg(test)]
31183119
error_code: None,
31193120
#[cfg(test)]
@@ -3185,6 +3186,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
31853186
all_paths_failed,
31863187
path: path.clone(),
31873188
short_channel_id,
3189+
retry: None,
31883190
#[cfg(test)]
31893191
error_code: onion_error_code,
31903192
#[cfg(test)]
@@ -3213,6 +3215,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
32133215
all_paths_failed,
32143216
path: path.clone(),
32153217
short_channel_id: Some(path.first().unwrap().short_channel_id),
3218+
retry: None,
32163219
#[cfg(test)]
32173220
error_code: Some(*failure_code),
32183221
#[cfg(test)]
@@ -6009,7 +6012,7 @@ mod tests {
60096012
use ln::functional_test_utils::*;
60106013
use ln::msgs;
60116014
use ln::msgs::ChannelMessageHandler;
6012-
use routing::router::{get_keysend_route, get_route};
6015+
use routing::router::{Payee, get_keysend_route, get_route};
60136016
use routing::scorer::Scorer;
60146017
use util::errors::APIError;
60156018
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
@@ -6256,7 +6259,9 @@ mod tests {
62566259
let (payment_preimage, payment_hash, _) = route_payment(&nodes[0], &expected_route, 100_000);
62576260

62586261
// Next, attempt a keysend payment and make sure it fails.
6259-
let route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph, &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 100_000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
6262+
let payee = Payee::new(expected_route.last().unwrap().node.get_our_node_id())
6263+
.with_features(InvoiceFeatures::known());
6264+
let route = get_route(&nodes[0].node.get_our_node_id(), &payee, &nodes[0].net_graph_msg_handler.network_graph, None, 100_000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
62606265
nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
62616266
check_added_monitors!(nodes[0], 1);
62626267
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
@@ -6284,7 +6289,7 @@ mod tests {
62846289

62856290
// To start (2), send a keysend payment but don't claim it.
62866291
let payment_preimage = PaymentPreimage([42; 32]);
6287-
let route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph, &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 100_000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
6292+
let route = get_route(&nodes[0].node.get_our_node_id(), &payee, &nodes[0].net_graph_msg_handler.network_graph, None, 100_000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
62886293
let (payment_hash, _) = nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
62896294
check_added_monitors!(nodes[0], 1);
62906295
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
@@ -6438,7 +6443,7 @@ pub mod bench {
64386443
use ln::functional_test_utils::*;
64396444
use ln::msgs::{ChannelMessageHandler, Init};
64406445
use routing::network_graph::NetworkGraph;
6441-
use routing::router::get_route;
6446+
use routing::router::{Payee, get_route};
64426447
use routing::scorer::Scorer;
64436448
use util::test_utils;
64446449
use util::config::UserConfig;
@@ -6547,9 +6552,11 @@ pub mod bench {
65476552
macro_rules! send_payment {
65486553
($node_a: expr, $node_b: expr) => {
65496554
let usable_channels = $node_a.list_usable_channels();
6555+
let payee = Payee::new($node_b.get_our_node_id())
6556+
.with_features(InvoiceFeatures::known());
65506557
let scorer = Scorer::new(0);
6551-
let route = get_route(&$node_a.get_our_node_id(), &dummy_graph, &$node_b.get_our_node_id(), Some(InvoiceFeatures::known()),
6552-
Some(&usable_channels.iter().map(|r| r).collect::<Vec<_>>()), &[], 10_000, TEST_FINAL_CLTV, &logger_a, &scorer).unwrap();
6558+
let route = get_route(&$node_a.get_our_node_id(), &payee, &dummy_graph,
6559+
Some(&usable_channels.iter().map(|r| r).collect::<Vec<_>>()), 10_000, TEST_FINAL_CLTV, &logger_a, &scorer).unwrap();
65536560

65546561
let mut payment_preimage = PaymentPreimage([0; 32]);
65556562
payment_preimage.0[0..8].copy_from_slice(&payment_count.to_le_bytes());

lightning/src/ln/functional_test_utils.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use chain::transaction::OutPoint;
1616
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
1717
use ln::channelmanager::{ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, PaymentId};
1818
use routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
19-
use routing::router::{Route, get_route};
19+
use routing::router::{Payee, Route, get_route};
2020
use routing::scorer::Scorer;
2121
use ln::features::{InitFeatures, InvoiceFeatures};
2222
use ln::msgs;
@@ -1011,13 +1011,15 @@ macro_rules! get_route_and_payment_hash {
10111011
}};
10121012
($send_node: expr, $recv_node: expr, $last_hops: expr, $recv_value: expr, $cltv: expr) => {{
10131013
let (payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash!($recv_node, Some($recv_value));
1014+
let payee = $crate::routing::router::Payee::new($recv_node.node.get_our_node_id())
1015+
.with_features($crate::ln::features::InvoiceFeatures::known())
1016+
.with_route_hints($last_hops);
10141017
let net_graph_msg_handler = &$send_node.net_graph_msg_handler;
10151018
let scorer = ::routing::scorer::Scorer::new(0);
10161019
let route = ::routing::router::get_route(
1017-
&$send_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph,
1018-
&$recv_node.node.get_our_node_id(), Some(::ln::features::InvoiceFeatures::known()),
1020+
&$send_node.node.get_our_node_id(), &payee, &net_graph_msg_handler.network_graph,
10191021
Some(&$send_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
1020-
&$last_hops, $recv_value, $cltv, $send_node.logger, &scorer
1022+
$recv_value, $cltv, $send_node.logger, &scorer
10211023
).unwrap();
10221024
(route, payment_hash, payment_preimage, payment_secret)
10231025
}}
@@ -1328,11 +1330,13 @@ pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
13281330
pub const TEST_FINAL_CLTV: u32 = 70;
13291331

13301332
pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash, PaymentSecret) {
1333+
let payee = Payee::new(expected_route.last().unwrap().node.get_our_node_id())
1334+
.with_features(InvoiceFeatures::known());
13311335
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
13321336
let scorer = Scorer::new(0);
1333-
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph,
1334-
&expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()),
1335-
Some(&origin_node.node.list_usable_channels().iter().collect::<Vec<_>>()), &[],
1337+
let route = get_route(
1338+
&origin_node.node.get_our_node_id(), &payee, &net_graph_msg_handler.network_graph,
1339+
Some(&origin_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
13361340
recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();
13371341
assert_eq!(route.paths.len(), 1);
13381342
assert_eq!(route.paths[0].len(), expected_route.len());
@@ -1345,9 +1349,11 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
13451349
}
13461350

13471351
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
1352+
let payee = Payee::new(expected_route.last().unwrap().node.get_our_node_id())
1353+
.with_features(InvoiceFeatures::known());
13481354
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
13491355
let scorer = Scorer::new(0);
1350-
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph, &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();
1356+
let route = get_route(&origin_node.node.get_our_node_id(), &payee, &net_graph_msg_handler.network_graph, None, recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();
13511357
assert_eq!(route.paths.len(), 1);
13521358
assert_eq!(route.paths[0].len(), expected_route.len());
13531359
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {

lightning/src/ln/functional_tests.rs

+12-9
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use ln::channel::{Channel, ChannelError};
2424
use ln::{chan_utils, onion_utils};
2525
use ln::chan_utils::HTLC_SUCCESS_TX_WEIGHT;
2626
use routing::network_graph::{NetworkUpdate, RoutingFees};
27-
use routing::router::{Route, RouteHop, RouteHint, RouteHintHop, get_route, get_keysend_route};
27+
use routing::router::{Payee, Route, RouteHop, RouteHint, RouteHintHop, get_route, get_keysend_route};
2828
use routing::scorer::Scorer;
2929
use ln::features::{ChannelFeatures, InitFeatures, InvoiceFeatures, NodeFeatures};
3030
use ln::msgs;
@@ -5869,7 +5869,7 @@ fn test_fail_holding_cell_htlc_upon_free() {
58695869
let events = nodes[0].node.get_and_clear_pending_events();
58705870
assert_eq!(events.len(), 1);
58715871
match &events[0] {
5872-
&Event::PaymentPathFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, ref error_code, ref error_data } => {
5872+
&Event::PaymentPathFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, retry: _, ref error_code, ref error_data } => {
58735873
assert_eq!(our_payment_hash.clone(), *payment_hash);
58745874
assert_eq!(*rejected_by_dest, false);
58755875
assert_eq!(*all_paths_failed, true);
@@ -5953,7 +5953,7 @@ fn test_free_and_fail_holding_cell_htlcs() {
59535953
let events = nodes[0].node.get_and_clear_pending_events();
59545954
assert_eq!(events.len(), 1);
59555955
match &events[0] {
5956-
&Event::PaymentPathFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, ref error_code, ref error_data } => {
5956+
&Event::PaymentPathFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, retry: _, ref error_code, ref error_data } => {
59575957
assert_eq!(payment_hash_2.clone(), *payment_hash);
59585958
assert_eq!(*rejected_by_dest, false);
59595959
assert_eq!(*all_paths_failed, true);
@@ -7160,7 +7160,8 @@ fn test_check_htlc_underpaying() {
71607160
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
71617161

71627162
let scorer = Scorer::new(0);
7163-
let route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph, &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer).unwrap();
7163+
let payee = Payee::new(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
7164+
let route = get_route(&nodes[0].node.get_our_node_id(), &payee, &nodes[0].net_graph_msg_handler.network_graph, None, 10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer).unwrap();
71647165
let (_, our_payment_hash, _) = get_payment_preimage_hash!(nodes[0]);
71657166
let our_payment_secret = nodes[1].node.create_inbound_payment_for_hash(our_payment_hash, Some(100_000), 7200, 0).unwrap();
71667167
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
@@ -7348,7 +7349,7 @@ fn test_priv_forwarding_rejection() {
73487349
htlc_minimum_msat: None,
73497350
htlc_maximum_msat: None,
73507351
}]);
7351-
let last_hops = vec![&route_hint];
7352+
let last_hops = vec![route_hint];
73527353
let (route, our_payment_hash, our_payment_preimage, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], last_hops, 10_000, TEST_FINAL_CLTV);
73537354

73547355
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
@@ -7557,12 +7558,14 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
75577558

75587559
let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::known(), InitFeatures::known());
75597560
// Lock HTLC in both directions (using a slightly lower CLTV delay to provide timely RBF bumps)
7561+
let payee = Payee::new(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
75607562
let scorer = Scorer::new(0);
7561-
let route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph,
7562-
&nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 3_000_000, 50, nodes[0].logger, &scorer).unwrap();
7563+
let route = get_route(&nodes[0].node.get_our_node_id(), &payee, &nodes[0].net_graph_msg_handler.network_graph,
7564+
None, 3_000_000, 50, nodes[0].logger, &scorer).unwrap();
75637565
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 3_000_000).0;
7564-
let route = get_route(&nodes[1].node.get_our_node_id(), &nodes[1].net_graph_msg_handler.network_graph,
7565-
&nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), 3_000_000, 50, nodes[0].logger, &scorer).unwrap();
7566+
let payee = Payee::new(nodes[0].node.get_our_node_id()).with_features(InvoiceFeatures::known());
7567+
let route = get_route(&nodes[1].node.get_our_node_id(), &payee, &nodes[1].net_graph_msg_handler.network_graph,
7568+
None, 3_000_000, 50, nodes[0].logger, &scorer).unwrap();
75667569
send_along_route(&nodes[1], route, &[&nodes[0]], 3_000_000);
75677570

75687571
let revoked_local_txn = get_local_commitment_txn!(nodes[1], chan.2);

lightning/src/ln/onion_route_tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ fn run_onion_failure_test_with_fail_intercept<F1,F2,F3>(_name: &str, test_case:
162162

163163
let events = nodes[0].node.get_and_clear_pending_events();
164164
assert_eq!(events.len(), 1);
165-
if let &Event::PaymentPathFailed { payment_hash: _, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, ref error_code, error_data: _ } = &events[0] {
165+
if let &Event::PaymentPathFailed { payment_hash: _, ref rejected_by_dest, ref network_update, ref all_paths_failed, path: _, ref short_channel_id, retry: _, ref error_code, error_data: _ } = &events[0] {
166166
assert_eq!(*rejected_by_dest, !expected_retryable);
167167
assert_eq!(*all_paths_failed, true);
168168
assert_eq!(*error_code, expected_error_code);

lightning/src/ln/shutdown_tests.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use chain::keysinterface::KeysInterface;
1313
use chain::transaction::OutPoint;
1414
use ln::{PaymentPreimage, PaymentHash};
1515
use ln::channelmanager::PaymentSendFailure;
16-
use routing::router::get_route;
16+
use routing::router::{Payee, get_route};
1717
use routing::network_graph::NetworkUpdate;
1818
use routing::scorer::Scorer;
1919
use ln::features::{InitFeatures, InvoiceFeatures};
@@ -99,8 +99,10 @@ fn updates_shutdown_wait() {
9999

100100
let net_graph_msg_handler0 = &nodes[0].net_graph_msg_handler;
101101
let net_graph_msg_handler1 = &nodes[1].net_graph_msg_handler;
102-
let route_1 = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler0.network_graph, &nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
103-
let route_2 = get_route(&nodes[1].node.get_our_node_id(), &net_graph_msg_handler1.network_graph, &nodes[0].node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &[], 100000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
102+
let payee_1 = Payee::new(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
103+
let route_1 = get_route(&nodes[0].node.get_our_node_id(), &payee_1, &net_graph_msg_handler0.network_graph, None, 100000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
104+
let payee_2 = Payee::new(nodes[0].node.get_our_node_id()).with_features(InvoiceFeatures::known());
105+
let route_2 = get_route(&nodes[1].node.get_our_node_id(), &payee_2, &net_graph_msg_handler1.network_graph, None, 100000, TEST_FINAL_CLTV, &logger, &scorer).unwrap();
104106
unwrap_send_err!(nodes[0].node.send_payment(&route_1, payment_hash, &Some(payment_secret)), true, APIError::ChannelUnavailable {..}, {});
105107
unwrap_send_err!(nodes[1].node.send_payment(&route_2, payment_hash, &Some(payment_secret)), true, APIError::ChannelUnavailable {..}, {});
106108

lightning/src/routing/network_graph.rs

+3
Original file line numberDiff line numberDiff line change
@@ -1814,6 +1814,7 @@ mod tests {
18141814
msg: valid_channel_update,
18151815
}),
18161816
short_channel_id: None,
1817+
retry: None,
18171818
error_code: None,
18181819
error_data: None,
18191820
});
@@ -1840,6 +1841,7 @@ mod tests {
18401841
is_permanent: false,
18411842
}),
18421843
short_channel_id: None,
1844+
retry: None,
18431845
error_code: None,
18441846
error_data: None,
18451847
});
@@ -1864,6 +1866,7 @@ mod tests {
18641866
is_permanent: true,
18651867
}),
18661868
short_channel_id: None,
1869+
retry: None,
18671870
error_code: None,
18681871
error_data: None,
18691872
});

0 commit comments

Comments
 (0)