Skip to content

Commit f752a48

Browse files
committed
Accept multi-hop route hints in get_route
Lightning invoices allow for zero or more multi-hop route hints. Update get_route's interface to accept such hints, although only the last hop from each is used for the time being. Requires converting from lightning-invoice's RouteHint abstraction to the wrapped RouteHintHop vector.
1 parent 3fc6694 commit f752a48

File tree

9 files changed

+152
-156
lines changed

9 files changed

+152
-156
lines changed

fuzz/src/full_stack.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
424424
},
425425
4 => {
426426
let value = slice_to_be24(get_slice!(3)) as u64;
427-
let route = match get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &get_pubkey!(), None, None, &Vec::new(), value, 42, Arc::clone(&logger)) {
427+
let route = match get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &get_pubkey!(), None, None, Vec::new(), value, 42, Arc::clone(&logger)) {
428428
Ok(route) => route,
429429
Err(_) => return,
430430
};
@@ -441,7 +441,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
441441
},
442442
15 => {
443443
let value = slice_to_be24(get_slice!(3)) as u64;
444-
let mut route = match get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &get_pubkey!(), None, None, &Vec::new(), value, 42, Arc::clone(&logger)) {
444+
let mut route = match get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &get_pubkey!(), None, None, Vec::new(), value, 42, Arc::clone(&logger)) {
445445
Ok(route) => route,
446446
Err(_) => return,
447447
};

fuzz/src/router.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
247247
let last_hops = &last_hops_vec[..];
248248
for target in node_pks.iter() {
249249
let _ = get_route(&our_pubkey, &net_graph, target, None, first_hops,
250-
&last_hops.iter().collect::<Vec<_>>(),
250+
last_hops.iter().map(|hop| std::slice::from_ref(hop)).collect::<Vec<_>>(),
251251
slice_to_be64(get_slice!(8)), slice_to_be32(get_slice!(4)), Arc::clone(&logger));
252252
}
253253
},

lightning-invoice/src/utils.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,9 @@ mod test {
112112
assert_eq!(invoice.min_final_cltv_expiry(), MIN_FINAL_CLTV_EXPIRY as u64);
113113
assert_eq!(invoice.description(), InvoiceDescription::Direct(&Description("test".to_string())));
114114

115-
let mut route_hints = invoice.routes().clone();
116-
let mut last_hops = Vec::new();
117-
for hint in route_hints.drain(..) {
118-
last_hops.push(hint[hint.len() - 1].clone());
119-
}
120115
let amt_msat = invoice.amount_pico_btc().unwrap() / 10;
121-
122116
let first_hops = nodes[0].node.list_usable_channels();
117+
let last_hops = invoice.routes().into_iter().map(|route| &(**route)[..]).collect();
123118
let network_graph = nodes[0].net_graph_msg_handler.network_graph.read().unwrap();
124119
let logger = test_utils::TestLogger::new();
125120
let route = router::get_route(
@@ -128,7 +123,7 @@ mod test {
128123
&invoice.recover_payee_pub_key(),
129124
Some(invoice.features().unwrap().clone()),
130125
Some(&first_hops),
131-
&last_hops.iter().collect::<Vec<_>>(),
126+
last_hops,
132127
amt_msat,
133128
invoice.min_final_cltv_expiry() as u32,
134129
&logger,

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 22 additions & 22 deletions
Large diffs are not rendered by default.

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4951,7 +4951,7 @@ pub mod bench {
49514951
($node_a: expr, $node_b: expr) => {
49524952
let usable_channels = $node_a.list_usable_channels();
49534953
let route = get_route(&$node_a.get_our_node_id(), &dummy_graph, &$node_b.get_our_node_id(), Some(InvoiceFeatures::known()),
4954-
Some(&usable_channels), &[], 10_000, TEST_FINAL_CLTV, &logger_a).unwrap();
4954+
Some(&usable_channels), Vec::new(), 10_000, TEST_FINAL_CLTV, &logger_a).unwrap();
49554955

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

lightning/src/ln/functional_test_utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ macro_rules! get_route_and_payment_hash {
945945
let net_graph_msg_handler = &$send_node.net_graph_msg_handler;
946946
let route = get_route(&$send_node.node.get_our_node_id(),
947947
&net_graph_msg_handler.network_graph.read().unwrap(),
948-
&$recv_node.node.get_our_node_id(), None, None, &Vec::new(), $recv_value, TEST_FINAL_CLTV, $send_node.logger).unwrap();
948+
&$recv_node.node.get_our_node_id(), None, None, Vec::new(), $recv_value, TEST_FINAL_CLTV, $send_node.logger).unwrap();
949949
(route, payment_hash, payment_preimage, payment_secret)
950950
}}
951951
}
@@ -1180,7 +1180,7 @@ pub const TEST_FINAL_CLTV: u32 = 70;
11801180
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) {
11811181
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
11821182
let logger = test_utils::TestLogger::new();
1183-
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), recv_value, TEST_FINAL_CLTV, &logger).unwrap();
1183+
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, Vec::new(), recv_value, TEST_FINAL_CLTV, &logger).unwrap();
11841184
assert_eq!(route.paths.len(), 1);
11851185
assert_eq!(route.paths[0].len(), expected_route.len());
11861186
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -1193,7 +1193,7 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
11931193
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
11941194
let logger = test_utils::TestLogger::new();
11951195
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
1196-
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, &Vec::new(), recv_value, TEST_FINAL_CLTV, &logger).unwrap();
1196+
let route = get_route(&origin_node.node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &expected_route.last().unwrap().node.get_our_node_id(), Some(InvoiceFeatures::known()), None, Vec::new(), recv_value, TEST_FINAL_CLTV, &logger).unwrap();
11971197
assert_eq!(route.paths.len(), 1);
11981198
assert_eq!(route.paths[0].len(), expected_route.len());
11991199
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {

0 commit comments

Comments
 (0)