Skip to content

Commit 8e4aa27

Browse files
committed
remove node_id from PathBuildingHop
use `CandidateRouteHop::target` function instead of `node_id`
1 parent 9c4dd20 commit 8e4aa27

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

lightning/src/routing/router.rs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,9 +1251,6 @@ fn iter_equal<I1: Iterator, I2: Iterator>(mut iter_a: I1, mut iter_b: I2)
12511251
/// These fee values are useful to choose hops as we traverse the graph "payee-to-payer".
12521252
#[derive(Clone)]
12531253
pub struct PathBuildingHop<'a> {
1254-
// Note that this should be dropped in favor of loading it from CandidateRouteHop, but doing so
1255-
// is a larger refactor and will require careful performance analysis.
1256-
node_id: NodeId,
12571254
candidate: CandidateRouteHop<'a>,
12581255
fee_msat: u64,
12591256

@@ -1291,7 +1288,7 @@ impl<'a> core::fmt::Debug for PathBuildingHop<'a> {
12911288
fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> {
12921289
let mut debug_struct = f.debug_struct("PathBuildingHop");
12931290
debug_struct
1294-
.field("node_id", &self.node_id)
1291+
.field("node_id", &self.candidate.target())
12951292
.field("short_channel_id", &self.candidate.short_channel_id())
12961293
.field("total_fee_msat", &self.total_fee_msat)
12971294
.field("next_hops_fee_msat", &self.next_hops_fee_msat)
@@ -1944,7 +1941,6 @@ where L::Target: Logger {
19441941
// This will affect our decision on selecting short_channel_id
19451942
// as a way to reach the $dest_node_id.
19461943
PathBuildingHop {
1947-
node_id: $dest_node_id.clone(),
19481944
candidate: $candidate.clone(),
19491945
fee_msat: 0,
19501946
next_hops_fee_msat: u64::max_value(),
@@ -2034,7 +2030,6 @@ where L::Target: Logger {
20342030
old_entry.next_hops_fee_msat = $next_hops_fee_msat;
20352031
old_entry.hop_use_fee_msat = hop_use_fee_msat;
20362032
old_entry.total_fee_msat = total_fee_msat;
2037-
old_entry.node_id = $dest_node_id.clone();
20382033
old_entry.candidate = $candidate.clone();
20392034
old_entry.fee_msat = 0; // This value will be later filled with hop_use_fee_msat of the following channel
20402035
old_entry.path_htlc_minimum_msat = path_htlc_minimum_msat;
@@ -2404,7 +2399,7 @@ where L::Target: Logger {
24042399

24052400
'path_walk: loop {
24062401
let mut features_set = false;
2407-
if let Some(first_channels) = first_hop_targets.get(&ordered_hops.last().unwrap().0.node_id) {
2402+
if let Some(first_channels) = first_hop_targets.get(&ordered_hops.last().unwrap().0.candidate.target()) {
24082403
for details in first_channels {
24092404
if let Some(scid) = ordered_hops.last().unwrap().0.candidate.short_channel_id() {
24102405
if details.get_outbound_payment_scid().unwrap() == scid {
@@ -2416,7 +2411,7 @@ where L::Target: Logger {
24162411
}
24172412
}
24182413
if !features_set {
2419-
if let Some(node) = network_nodes.get(&ordered_hops.last().unwrap().0.node_id) {
2414+
if let Some(node) = network_nodes.get(&ordered_hops.last().unwrap().0.candidate.target()) {
24202415
if let Some(node_info) = node.announcement_info.as_ref() {
24212416
ordered_hops.last_mut().unwrap().1 = node_info.features.clone();
24222417
} else {
@@ -2433,11 +2428,11 @@ where L::Target: Logger {
24332428
// save this path for the payment route. Also, update the liquidity
24342429
// remaining on the used hops, so that we take them into account
24352430
// while looking for more paths.
2436-
if ordered_hops.last().unwrap().0.node_id == maybe_dummy_payee_node_id {
2431+
if ordered_hops.last().unwrap().0.candidate.target() == maybe_dummy_payee_node_id {
24372432
break 'path_walk;
24382433
}
24392434

2440-
new_entry = match dist.remove(&ordered_hops.last().unwrap().0.node_id) {
2435+
new_entry = match dist.remove(&ordered_hops.last().unwrap().0.candidate.target()) {
24412436
Some(payment_hop) => payment_hop,
24422437
// We can't arrive at None because, if we ever add an entry to targets,
24432438
// we also fill in the entry in dist (see add_entry!).
@@ -2476,12 +2471,13 @@ where L::Target: Logger {
24762471
// Remember that we used these channels so that we don't rely
24772472
// on the same liquidity in future paths.
24782473
let mut prevented_redundant_path_selection = false;
2479-
let prev_hop_iter = core::iter::once(&our_node_id)
2480-
.chain(payment_path.hops.iter().map(|(hop, _)| &hop.node_id));
2474+
let prev_hop_iter = core::iter::once(our_node_id)
2475+
.chain(payment_path.hops.iter().map(|(hop, _)| hop.candidate.target()));
24812476
for (prev_hop, (hop, _)) in prev_hop_iter.zip(payment_path.hops.iter()) {
2477+
let target = hop.candidate.target();
24822478
let spent_on_hop_msat = value_contribution_msat + hop.next_hops_fee_msat;
24832479
let used_liquidity_msat = used_liquidities
2484-
.entry(hop.candidate.id(*prev_hop < hop.node_id))
2480+
.entry(hop.candidate.id(prev_hop < target))
24852481
.and_modify(|used_liquidity_msat| *used_liquidity_msat += spent_on_hop_msat)
24862482
.or_insert(spent_on_hop_msat);
24872483
let hop_capacity = hop.candidate.effective_capacity();
@@ -2656,8 +2652,8 @@ where L::Target: Logger {
26562652
});
26572653
for idx in 0..(selected_route.len() - 1) {
26582654
if idx + 1 >= selected_route.len() { break; }
2659-
if iter_equal(selected_route[idx ].hops.iter().map(|h| (h.0.candidate.id(true), h.0.node_id)),
2660-
selected_route[idx + 1].hops.iter().map(|h| (h.0.candidate.id(true), h.0.node_id))) {
2655+
if iter_equal(selected_route[idx ].hops.iter().map(|h| (h.0.candidate.id(true), h.0.candidate.target())),
2656+
selected_route[idx + 1].hops.iter().map(|h| (h.0.candidate.id(true), h.0.candidate.target()))) {
26612657
let new_value = selected_route[idx].get_value_msat() + selected_route[idx + 1].get_value_msat();
26622658
selected_route[idx].update_value_and_recompute_fees(new_value);
26632659
selected_route.remove(idx + 1);
@@ -2682,14 +2678,14 @@ where L::Target: Logger {
26822678
// there are announced channels between the endpoints. If so, the hop might be
26832679
// referring to any of the announced channels, as its `short_channel_id` might be
26842680
// an alias, in which case we don't take any chances here.
2685-
network_graph.node(&hop.node_id).map_or(false, |hop_node|
2681+
network_graph.node(&hop.candidate.target()).map_or(false, |hop_node|
26862682
hop_node.channels.iter().any(|scid| network_graph.channel(*scid)
26872683
.map_or(false, |c| c.as_directed_from(&prev_hop_node_id).is_some()))
26882684
)
26892685
};
26902686

26912687
hops.push(RouteHop {
2692-
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)})?,
2688+
pubkey: PublicKey::from_slice(hop.candidate.target().as_slice()).map_err(|_| LightningError{err: format!("Public key {:?} is invalid", &hop.candidate.target()), action: ErrorAction::IgnoreAndLog(Level::Trace)})?,
26932689
node_features: node_features.clone(),
26942690
short_channel_id: hop.candidate.short_channel_id().unwrap(),
26952691
channel_features: hop.candidate.features(),
@@ -2698,7 +2694,7 @@ where L::Target: Logger {
26982694
maybe_announced_channel,
26992695
});
27002696

2701-
prev_hop_node_id = hop.node_id;
2697+
prev_hop_node_id = hop.candidate.target();
27022698
}
27032699
let mut final_cltv_delta = final_cltv_expiry_delta;
27042700
let blinded_tail = payment_path.hops.last().and_then(|(h, _)| {

0 commit comments

Comments
 (0)