Skip to content

Commit f9fac0b

Browse files
committed
Remove node_id from PathBuildingHop
hop node id can be consumed from `CandidateRouteHop::target`
1 parent e8b5a25 commit f9fac0b

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

lightning/src/routing/router.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,9 +1245,6 @@ fn iter_equal<I1: Iterator, I2: Iterator>(mut iter_a: I1, mut iter_b: I2)
12451245
/// These fee values are useful to choose hops as we traverse the graph "payee-to-payer".
12461246
#[derive(Clone)]
12471247
pub struct PathBuildingHop<'a> {
1248-
// Note that this should be dropped in favor of loading it from CandidateRouteHop, but doing so
1249-
// is a larger refactor and will require careful performance analysis.
1250-
node_id: NodeId,
12511248
candidate: CandidateRouteHop<'a>,
12521249
fee_msat: u64,
12531250

@@ -1285,7 +1282,7 @@ impl<'a> core::fmt::Debug for PathBuildingHop<'a> {
12851282
fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> {
12861283
let mut debug_struct = f.debug_struct("PathBuildingHop");
12871284
debug_struct
1288-
.field("node_id", &self.node_id)
1285+
.field("node_id", &self.candidate.target())
12891286
.field("short_channel_id", &self.candidate.short_channel_id())
12901287
.field("total_fee_msat", &self.total_fee_msat)
12911288
.field("next_hops_fee_msat", &self.next_hops_fee_msat)
@@ -1822,7 +1819,6 @@ where L::Target: Logger {
18221819
// - for regular channels at channel announcement (TODO)
18231820
// - for first and last hops early in get_route
18241821
let src_node_id = $candidate.source();
1825-
let dest_node_id = $candidate.target().unwrap_or(maybe_dummy_payee_node_id);
18261822
if Some($candidate.source()) != $candidate.target() {
18271823
let scid_opt = $candidate.short_channel_id();
18281824
let effective_capacity = $candidate.effective_capacity();
@@ -1938,9 +1934,8 @@ where L::Target: Logger {
19381934
// (recall it goes payee-to-payer) of short_channel_id, first add a
19391935
// semi-dummy record just to compute the fees to reach the source node.
19401936
// This will affect our decision on selecting short_channel_id
1941-
// as a way to reach the $dest_node_id.
1937+
// as a way to reach the target node id.
19421938
PathBuildingHop {
1943-
node_id: dest_node_id.clone(),
19441939
candidate: $candidate.clone(),
19451940
fee_msat: 0,
19461941
next_hops_fee_msat: u64::max_value(),
@@ -2030,7 +2025,6 @@ where L::Target: Logger {
20302025
old_entry.next_hops_fee_msat = $next_hops_fee_msat;
20312026
old_entry.hop_use_fee_msat = hop_use_fee_msat;
20322027
old_entry.total_fee_msat = total_fee_msat;
2033-
old_entry.node_id = dest_node_id.clone();
20342028
old_entry.candidate = $candidate.clone();
20352029
old_entry.fee_msat = 0; // This value will be later filled with hop_use_fee_msat of the following channel
20362030
old_entry.path_htlc_minimum_msat = path_htlc_minimum_msat;
@@ -2399,7 +2393,8 @@ where L::Target: Logger {
23992393

24002394
'path_walk: loop {
24012395
let mut features_set = false;
2402-
if let Some(first_channels) = first_hop_targets.get(&ordered_hops.last().unwrap().0.node_id) {
2396+
let target = ordered_hops.last().unwrap().0.candidate.target().unwrap_or(maybe_dummy_payee_node_id);
2397+
if let Some(first_channels) = first_hop_targets.get(&target) {
24032398
for details in first_channels {
24042399
if let Some(scid) = ordered_hops.last().unwrap().0.candidate.short_channel_id() {
24052400
if details.get_outbound_payment_scid().unwrap() == scid {
@@ -2411,7 +2406,7 @@ where L::Target: Logger {
24112406
}
24122407
}
24132408
if !features_set {
2414-
if let Some(node) = network_nodes.get(&ordered_hops.last().unwrap().0.node_id) {
2409+
if let Some(node) = network_nodes.get(&target) {
24152410
if let Some(node_info) = node.announcement_info.as_ref() {
24162411
ordered_hops.last_mut().unwrap().1 = node_info.features.clone();
24172412
} else {
@@ -2428,11 +2423,11 @@ where L::Target: Logger {
24282423
// save this path for the payment route. Also, update the liquidity
24292424
// remaining on the used hops, so that we take them into account
24302425
// while looking for more paths.
2431-
if ordered_hops.last().unwrap().0.node_id == maybe_dummy_payee_node_id {
2426+
if target == maybe_dummy_payee_node_id {
24322427
break 'path_walk;
24332428
}
24342429

2435-
new_entry = match dist.remove(&ordered_hops.last().unwrap().0.node_id) {
2430+
new_entry = match dist.remove(&target) {
24362431
Some(payment_hop) => payment_hop,
24372432
// We can't arrive at None because, if we ever add an entry to targets,
24382433
// we also fill in the entry in dist (see add_entry!).
@@ -2651,8 +2646,8 @@ where L::Target: Logger {
26512646
});
26522647
for idx in 0..(selected_route.len() - 1) {
26532648
if idx + 1 >= selected_route.len() { break; }
2654-
if iter_equal(selected_route[idx].hops.iter().map(|h| (h.0.candidate.id(), h.0.node_id)),
2655-
selected_route[idx + 1].hops.iter().map(|h| (h.0.candidate.id(), h.0.node_id))) {
2649+
if iter_equal(selected_route[idx].hops.iter().map(|h| (h.0.candidate.id(), h.0.candidate.target())),
2650+
selected_route[idx + 1].hops.iter().map(|h| (h.0.candidate.id(), h.0.candidate.target()))) {
26562651
let new_value = selected_route[idx].get_value_msat() + selected_route[idx + 1].get_value_msat();
26572652
selected_route[idx].update_value_and_recompute_fees(new_value);
26582653
selected_route.remove(idx + 1);
@@ -2665,6 +2660,7 @@ where L::Target: Logger {
26652660
for (hop, node_features) in payment_path.hops.iter()
26662661
.filter(|(h, _)| h.candidate.short_channel_id().is_some())
26672662
{
2663+
let target = hop.candidate.target().expect("target is defined when short_channel_id is defined");
26682664
let maybe_announced_channel = if let CandidateRouteHop::PublicHop { .. } = hop.candidate {
26692665
// If we sourced the hop from the graph we're sure the target node is announced.
26702666
true
@@ -2676,14 +2672,14 @@ where L::Target: Logger {
26762672
// there are announced channels between the endpoints. If so, the hop might be
26772673
// referring to any of the announced channels, as its `short_channel_id` might be
26782674
// an alias, in which case we don't take any chances here.
2679-
network_graph.node(&hop.node_id).map_or(false, |hop_node|
2675+
network_graph.node(&target).map_or(false, |hop_node|
26802676
hop_node.channels.iter().any(|scid| network_graph.channel(*scid)
26812677
.map_or(false, |c| c.as_directed_from(&hop.candidate.source()).is_some()))
26822678
)
26832679
};
26842680

26852681
hops.push(RouteHop {
2686-
pubkey: PublicKey::from_slice(hop.node_id.as_slice()).map_err(|_| LightningError{err: format!("Public key {:?} is invalid", &hop.node_id), action: ErrorAction::IgnoreAndLog(Level::Trace)})?,
2682+
pubkey: PublicKey::from_slice(target.as_slice()).map_err(|_| LightningError{err: format!("Public key {:?} is invalid", &target), action: ErrorAction::IgnoreAndLog(Level::Trace)})?,
26872683
node_features: node_features.clone(),
26882684
short_channel_id: hop.candidate.short_channel_id().unwrap(),
26892685
channel_features: hop.candidate.features(),

0 commit comments

Comments
 (0)