@@ -1031,8 +1031,6 @@ pub enum CandidateRouteHop<'a> {
1031
1031
/// Provided to uniquely identify a hop as we are
1032
1032
/// route building.
1033
1033
hint_idx : usize ,
1034
- /// The node id of the payer.
1035
- source_node_id : NodeId ,
1036
1034
} ,
1037
1035
/// Similar to [`Self::Blinded`], but the path here has 1 blinded hop. `BlindedPayInfo` provided
1038
1036
/// for 1-hop blinded paths is ignored because it is meant to apply to the hops *between* the
@@ -1048,8 +1046,6 @@ pub enum CandidateRouteHop<'a> {
1048
1046
/// Provided to uniquely identify a hop as we are
1049
1047
/// route building.
1050
1048
hint_idx : usize ,
1051
- /// The node id of the payer.
1052
- source_node_id : NodeId ,
1053
1049
} ,
1054
1050
}
1055
1051
@@ -1162,8 +1158,8 @@ impl<'a> CandidateRouteHop<'a> {
1162
1158
* source_node_id
1163
1159
} ,
1164
1160
CandidateRouteHop :: PrivateHop { hint, .. } => hint. src_node_id . into ( ) ,
1165
- CandidateRouteHop :: Blinded { source_node_id , .. } => * source_node_id ,
1166
- CandidateRouteHop :: OneHopBlinded { source_node_id , .. } => * source_node_id ,
1161
+ CandidateRouteHop :: Blinded { hint , .. } => hint . 1 . introduction_node_id . into ( ) ,
1162
+ CandidateRouteHop :: OneHopBlinded { hint , .. } => hint . 1 . introduction_node_id . into ( ) ,
1167
1163
}
1168
1164
}
1169
1165
/// Returns the target node id of this hop, if known.
@@ -1228,7 +1224,7 @@ fn iter_equal<I1: Iterator, I2: Iterator>(mut iter_a: I1, mut iter_b: I2)
1228
1224
pub struct PathBuildingHop < ' a > {
1229
1225
// Note that this should be dropped in favor of loading it from CandidateRouteHop, but doing so
1230
1226
// is a larger refactor and will require careful performance analysis.
1231
- node_id : NodeId ,
1227
+ // node_id: NodeId,
1232
1228
candidate : CandidateRouteHop < ' a > ,
1233
1229
fee_msat : u64 ,
1234
1230
@@ -1266,7 +1262,7 @@ impl<'a> core::fmt::Debug for PathBuildingHop<'a> {
1266
1262
fn fmt ( & self , f : & mut core:: fmt:: Formatter ) -> Result < ( ) , core:: fmt:: Error > {
1267
1263
let mut debug_struct = f. debug_struct ( "PathBuildingHop" ) ;
1268
1264
debug_struct
1269
- . field ( "node_id" , & self . node_id )
1265
+ . field ( "node_id" , & self . candidate . source ( ) )
1270
1266
. field ( "short_channel_id" , & self . candidate . short_channel_id ( ) )
1271
1267
. field ( "total_fee_msat" , & self . total_fee_msat )
1272
1268
. field ( "next_hops_fee_msat" , & self . next_hops_fee_msat )
@@ -1888,7 +1884,7 @@ where L::Target: Logger {
1888
1884
// This will affect our decision on selecting short_channel_id
1889
1885
// as a way to reach the $dest_node_id.
1890
1886
PathBuildingHop {
1891
- node_id: $dest_node_id. clone( ) ,
1887
+ // node_id: $dest_node_id.clone(),
1892
1888
candidate: $candidate. clone( ) ,
1893
1889
fee_msat: 0 ,
1894
1890
next_hops_fee_msat: u64 :: max_value( ) ,
@@ -1970,7 +1966,7 @@ where L::Target: Logger {
1970
1966
old_entry. next_hops_fee_msat = $next_hops_fee_msat;
1971
1967
old_entry. hop_use_fee_msat = hop_use_fee_msat;
1972
1968
old_entry. total_fee_msat = total_fee_msat;
1973
- old_entry. node_id = $dest_node_id. clone( ) ;
1969
+ // old_entry.node_id = $dest_node_id.clone();
1974
1970
old_entry. candidate = $candidate. clone( ) ;
1975
1971
old_entry. fee_msat = 0 ; // This value will be later filled with hop_use_fee_msat of the following channel
1976
1972
old_entry. path_htlc_minimum_msat = path_htlc_minimum_msat;
@@ -2135,8 +2131,8 @@ where L::Target: Logger {
2135
2131
network_nodes. get ( & intro_node_id) . is_some ( ) ;
2136
2132
if !have_intro_node_in_graph { continue }
2137
2133
let candidate = if hint. 1 . blinded_hops . len ( ) == 1 {
2138
- CandidateRouteHop :: OneHopBlinded { hint, hint_idx, source_node_id : our_node_id }
2139
- } else { CandidateRouteHop :: Blinded { hint, hint_idx, source_node_id : intro_node_id } } ;
2134
+ CandidateRouteHop :: OneHopBlinded { hint, hint_idx }
2135
+ } else { CandidateRouteHop :: Blinded { hint, hint_idx } } ;
2140
2136
let mut path_contribution_msat = path_value_msat;
2141
2137
if let Some ( hop_used_msat) = add_entry ! ( & candidate, intro_node_id, maybe_dummy_payee_node_id,
2142
2138
0 , path_contribution_msat, 0 , 0_u64 , 0 , 0 )
@@ -2317,7 +2313,11 @@ where L::Target: Logger {
2317
2313
2318
2314
' path_walk: loop {
2319
2315
let mut features_set = false ;
2320
- if let Some ( first_channels) = first_hop_targets. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2316
+ let target = match ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) {
2317
+ Some ( target) => target,
2318
+ None => break ,
2319
+ } ;
2320
+ if let Some ( first_channels) = first_hop_targets. get ( & target) {
2321
2321
for details in first_channels {
2322
2322
if let Some ( scid) = ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . short_channel_id ( ) {
2323
2323
if details. get_outbound_payment_scid ( ) . unwrap ( ) == scid {
@@ -2329,7 +2329,7 @@ where L::Target: Logger {
2329
2329
}
2330
2330
}
2331
2331
if !features_set {
2332
- if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2332
+ if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) ) {
2333
2333
if let Some ( node_info) = node. announcement_info . as_ref ( ) {
2334
2334
ordered_hops. last_mut ( ) . unwrap ( ) . 1 = node_info. features . clone ( ) ;
2335
2335
} else {
@@ -2346,11 +2346,11 @@ where L::Target: Logger {
2346
2346
// save this path for the payment route. Also, update the liquidity
2347
2347
// remaining on the used hops, so that we take them into account
2348
2348
// while looking for more paths.
2349
- if ordered_hops. last ( ) . unwrap ( ) . 0 . node_id == maybe_dummy_payee_node_id {
2349
+ if ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) == maybe_dummy_payee_node_id {
2350
2350
break ' path_walk;
2351
2351
}
2352
2352
2353
- new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2353
+ new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) ) {
2354
2354
Some ( payment_hop) => payment_hop,
2355
2355
// We can't arrive at None because, if we ever add an entry to targets,
2356
2356
// we also fill in the entry in dist (see add_entry!).
@@ -2389,12 +2389,16 @@ where L::Target: Logger {
2389
2389
// Remember that we used these channels so that we don't rely
2390
2390
// on the same liquidity in future paths.
2391
2391
let mut prevented_redundant_path_selection = false ;
2392
- let prev_hop_iter = core:: iter:: once ( & our_node_id)
2393
- . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | & hop. node_id ) ) ;
2392
+ let prev_hop_iter = core:: iter:: once ( our_node_id)
2393
+ . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | hop. candidate . target ( ) . unwrap ( ) ) ) ;
2394
2394
for ( prev_hop, ( hop, _) ) in prev_hop_iter. zip ( payment_path. hops . iter ( ) ) {
2395
+ let target = match hop. candidate . target ( ) {
2396
+ Some ( target) => target,
2397
+ None => break ,
2398
+ } ;
2395
2399
let spent_on_hop_msat = value_contribution_msat + hop. next_hops_fee_msat ;
2396
2400
let used_liquidity_msat = used_liquidities
2397
- . entry ( hop. candidate . id ( * prev_hop < hop . node_id ) )
2401
+ . entry ( hop. candidate . id ( prev_hop < target ) )
2398
2402
. and_modify ( |used_liquidity_msat| * used_liquidity_msat += spent_on_hop_msat)
2399
2403
. or_insert ( spent_on_hop_msat) ;
2400
2404
let hop_capacity = hop. candidate . effective_capacity ( ) ;
@@ -2558,8 +2562,8 @@ where L::Target: Logger {
2558
2562
} ) ;
2559
2563
for idx in 0 ..( selected_route. len ( ) - 1 ) {
2560
2564
if idx + 1 >= selected_route. len ( ) { break ; }
2561
- if iter_equal ( selected_route[ idx ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ,
2562
- selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ) {
2565
+ if iter_equal ( selected_route[ idx] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ,
2566
+ selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ) {
2563
2567
let new_value = selected_route[ idx] . get_value_msat ( ) + selected_route[ idx + 1 ] . get_value_msat ( ) ;
2564
2568
selected_route[ idx] . update_value_and_recompute_fees ( new_value) ;
2565
2569
selected_route. remove ( idx + 1 ) ;
@@ -2584,14 +2588,15 @@ where L::Target: Logger {
2584
2588
// there are announced channels between the endpoints. If so, the hop might be
2585
2589
// referring to any of the announced channels, as its `short_channel_id` might be
2586
2590
// an alias, in which case we don't take any chances here.
2587
- network_graph. node ( & hop. node_id ) . map_or ( false , |hop_node|
2591
+ let hop_node_id = hop. candidate . source ( ) ;
2592
+ network_graph. node ( & hop_node_id) . map_or ( false , |hop_node|
2588
2593
hop_node. channels . iter ( ) . any ( |scid| network_graph. channel ( * scid)
2589
- . map_or ( false , |c| c. as_directed_from ( & prev_hop_node_id) . is_some ( ) ) )
2594
+ . map_or ( false , |c| c. as_directed_from ( & prev_hop_node_id) . is_some ( ) ) )
2590
2595
)
2591
2596
} ;
2592
2597
2593
2598
hops. push ( RouteHop {
2594
- 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 ) } ) ?,
2599
+ pubkey : PublicKey :: from_slice ( hop. candidate . target ( ) . unwrap ( ) . as_slice ( ) ) . map_err ( |_| LightningError { err : format ! ( "Public key {:?} is invalid" , & hop. candidate . target ( ) . unwrap ( ) ) , action : ErrorAction :: IgnoreAndLog ( Level :: Trace ) } ) ?,
2595
2600
node_features : node_features. clone ( ) ,
2596
2601
short_channel_id : hop. candidate . short_channel_id ( ) . unwrap ( ) ,
2597
2602
channel_features : hop. candidate . features ( ) ,
@@ -2600,7 +2605,7 @@ where L::Target: Logger {
2600
2605
maybe_announced_channel,
2601
2606
} ) ;
2602
2607
2603
- prev_hop_node_id = hop. node_id ;
2608
+ prev_hop_node_id = hop. candidate . source ( ) ;
2604
2609
}
2605
2610
let mut final_cltv_delta = final_cltv_expiry_delta;
2606
2611
let blinded_tail = payment_path. hops . last ( ) . and_then ( |( h, _) | {
0 commit comments