Skip to content

Commit 3fc6694

Browse files
committed
Simplify passing first_hops to get_route
Simplifies the get_route interface, making it easy to pass the result of ChannelManager::list_usable_channels as first_hops.
1 parent a8038a8 commit 3fc6694

File tree

5 files changed

+14
-15
lines changed

5 files changed

+14
-15
lines changed

fuzz/src/router.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
246246
}
247247
let last_hops = &last_hops_vec[..];
248248
for target in node_pks.iter() {
249-
let _ = get_route(&our_pubkey, &net_graph, target, None,
250-
first_hops.map(|c| c.iter().collect::<Vec<_>>()).as_ref().map(|a| a.as_slice()),
249+
let _ = get_route(&our_pubkey, &net_graph, target, None, first_hops,
251250
&last_hops.iter().collect::<Vec<_>>(),
252251
slice_to_be64(get_slice!(8)), slice_to_be32(get_slice!(4)), Arc::clone(&logger));
253252
}

lightning-invoice/src/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ mod test {
127127
&network_graph,
128128
&invoice.recover_payee_pub_key(),
129129
Some(invoice.features().unwrap().clone()),
130-
Some(&first_hops.iter().collect::<Vec<_>>()),
130+
Some(&first_hops),
131131
&last_hops.iter().collect::<Vec<_>>(),
132132
amt_msat,
133133
invoice.min_final_cltv_expiry() as u32,

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.iter().map(|r| r).collect::<Vec<_>>()), &[], 10_000, TEST_FINAL_CLTV, &logger_a).unwrap();
4954+
Some(&usable_channels), &[], 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_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3625,7 +3625,7 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8) {
36253625
let payment_event = {
36263626
let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
36273627
let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(),
3628-
&nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), Some(&nodes[0].node.list_usable_channels().iter().collect::<Vec<_>>()),
3628+
&nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), Some(&nodes[0].node.list_usable_channels()),
36293629
&Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
36303630
nodes[0].node.send_payment(&route, payment_hash_1, &Some(payment_secret_1)).unwrap();
36313631
check_added_monitors!(nodes[0], 1);
@@ -3804,7 +3804,7 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8) {
38043804
// Channel should still work fine...
38053805
let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
38063806
let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(),
3807-
&nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), Some(&nodes[0].node.list_usable_channels().iter().collect::<Vec<_>>()),
3807+
&nodes[1].node.get_our_node_id(), Some(InvoiceFeatures::known()), Some(&nodes[0].node.list_usable_channels()),
38083808
&Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
38093809
let payment_preimage_2 = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000).0;
38103810
claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2);

lightning/src/routing/router.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ fn compute_fees(amount_msat: u64, channel_fees: RoutingFees) -> Option<u64> {
343343
/// The fees on channels from us to next-hops are ignored (as they are assumed to all be
344344
/// equal), however the enabled/disabled bit on such channels as well as the
345345
/// htlc_minimum_msat/htlc_maximum_msat *are* checked as they may change based on the receiving node.
346-
pub fn get_route<L: Deref>(our_node_id: &PublicKey, network: &NetworkGraph, payee: &PublicKey, payee_features: Option<InvoiceFeatures>, first_hops: Option<&[&ChannelDetails]>,
346+
pub fn get_route<L: Deref>(our_node_id: &PublicKey, network: &NetworkGraph, payee: &PublicKey, payee_features: Option<InvoiceFeatures>, first_hops: Option<&[ChannelDetails]>,
347347
last_hops: &[&RouteHintHop], final_value_msat: u64, final_cltv: u32, logger: L) -> Result<Route, LightningError> where L::Target: Logger {
348348
// TODO: Obviously *only* using total fee cost sucks. We should consider weighting by
349349
// uptime/success in using a node in the past.
@@ -1631,7 +1631,7 @@ mod tests {
16311631
counterparty_forwarding_info: None,
16321632
}];
16331633

1634-
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 100, 42, Arc::clone(&logger)) {
1634+
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans), &Vec::new(), 100, 42, Arc::clone(&logger)) {
16351635
assert_eq!(err, "First hop cannot have our_node_id as a destination.");
16361636
} else { panic!(); }
16371637

@@ -1950,7 +1950,7 @@ mod tests {
19501950
is_usable: true, is_public: true,
19511951
counterparty_forwarding_info: None,
19521952
}];
1953-
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
1953+
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
19541954
assert_eq!(route.paths[0].len(), 2);
19551955

19561956
assert_eq!(route.paths[0][0].pubkey, nodes[7]);
@@ -2000,7 +2000,7 @@ mod tests {
20002000
is_usable: true, is_public: true,
20012001
counterparty_forwarding_info: None,
20022002
}];
2003-
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
2003+
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
20042004
assert_eq!(route.paths[0].len(), 2);
20052005

20062006
assert_eq!(route.paths[0][0].pubkey, nodes[7]);
@@ -2067,7 +2067,7 @@ mod tests {
20672067
is_usable: true, is_public: true,
20682068
counterparty_forwarding_info: None,
20692069
}];
2070-
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
2070+
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2], None, Some(&our_chans), &Vec::new(), 100, 42, Arc::clone(&logger)).unwrap();
20712071
assert_eq!(route.paths[0].len(), 2);
20722072

20732073
assert_eq!(route.paths[0][0].pubkey, nodes[7]);
@@ -2207,7 +2207,7 @@ mod tests {
22072207
counterparty_forwarding_info: None,
22082208
}];
22092209
let mut last_hops = last_hops(&nodes);
2210-
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[6], None, Some(&our_chans.iter().collect::<Vec<_>>()), &last_hops.iter().collect::<Vec<_>>(), 100, 42, Arc::clone(&logger)).unwrap();
2210+
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[6], None, Some(&our_chans), &last_hops.iter().collect::<Vec<_>>(), 100, 42, Arc::clone(&logger)).unwrap();
22112211
assert_eq!(route.paths[0].len(), 2);
22122212

22132213
assert_eq!(route.paths[0][0].pubkey, nodes[3]);
@@ -2337,7 +2337,7 @@ mod tests {
23372337
is_usable: true, is_public: true,
23382338
counterparty_forwarding_info: None,
23392339
}];
2340-
let route = get_route(&source_node_id, &NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash()), &target_node_id, None, Some(&our_chans.iter().collect::<Vec<_>>()), &last_hops.iter().collect::<Vec<_>>(), 100, 42, Arc::new(test_utils::TestLogger::new())).unwrap();
2340+
let route = get_route(&source_node_id, &NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash()), &target_node_id, None, Some(&our_chans), &last_hops.iter().collect::<Vec<_>>(), 100, 42, Arc::new(test_utils::TestLogger::new())).unwrap();
23412341

23422342
assert_eq!(route.paths[0].len(), 2);
23432343

@@ -2475,15 +2475,15 @@ mod tests {
24752475
{
24762476
// Attempt to route more than available results in a failure.
24772477
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2],
2478-
Some(InvoiceFeatures::known()), Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 200_000_001, 42, Arc::clone(&logger)) {
2478+
Some(InvoiceFeatures::known()), Some(&our_chans), &Vec::new(), 200_000_001, 42, Arc::clone(&logger)) {
24792479
assert_eq!(err, "Failed to find a sufficient route to the given destination");
24802480
} else { panic!(); }
24812481
}
24822482

24832483
{
24842484
// Now, attempt to route an exact amount we have should be fine.
24852485
let route = get_route(&our_id, &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2],
2486-
Some(InvoiceFeatures::known()), Some(&our_chans.iter().collect::<Vec<_>>()), &Vec::new(), 200_000_000, 42, Arc::clone(&logger)).unwrap();
2486+
Some(InvoiceFeatures::known()), Some(&our_chans), &Vec::new(), 200_000_000, 42, Arc::clone(&logger)).unwrap();
24872487
assert_eq!(route.paths.len(), 1);
24882488
let path = route.paths.last().unwrap();
24892489
assert_eq!(path.len(), 2);

0 commit comments

Comments
 (0)