@@ -1252,9 +1252,6 @@ fn iter_equal<I1: Iterator, I2: Iterator>(mut iter_a: I1, mut iter_b: I2)
1252
1252
/// These fee values are useful to choose hops as we traverse the graph "payee-to-payer".
1253
1253
#[ derive( Clone ) ]
1254
1254
pub struct PathBuildingHop < ' a > {
1255
- // Note that this should be dropped in favor of loading it from CandidateRouteHop, but doing so
1256
- // is a larger refactor and will require careful performance analysis.
1257
- node_id : NodeId ,
1258
1255
candidate : CandidateRouteHop < ' a > ,
1259
1256
fee_msat : u64 ,
1260
1257
@@ -1292,7 +1289,7 @@ impl<'a> core::fmt::Debug for PathBuildingHop<'a> {
1292
1289
fn fmt ( & self , f : & mut core:: fmt:: Formatter ) -> Result < ( ) , core:: fmt:: Error > {
1293
1290
let mut debug_struct = f. debug_struct ( "PathBuildingHop" ) ;
1294
1291
debug_struct
1295
- . field ( "node_id" , & self . node_id )
1292
+ . field ( "node_id" , & self . candidate . target ( ) )
1296
1293
. field ( "short_channel_id" , & self . candidate . short_channel_id ( ) )
1297
1294
. field ( "total_fee_msat" , & self . total_fee_msat )
1298
1295
. field ( "next_hops_fee_msat" , & self . next_hops_fee_msat )
@@ -1945,7 +1942,6 @@ where L::Target: Logger {
1945
1942
// This will affect our decision on selecting short_channel_id
1946
1943
// as a way to reach the $dest_node_id.
1947
1944
PathBuildingHop {
1948
- node_id: $dest_node_id. clone( ) ,
1949
1945
candidate: $candidate. clone( ) ,
1950
1946
fee_msat: 0 ,
1951
1947
next_hops_fee_msat: u64 :: max_value( ) ,
@@ -2035,7 +2031,6 @@ where L::Target: Logger {
2035
2031
old_entry. next_hops_fee_msat = $next_hops_fee_msat;
2036
2032
old_entry. hop_use_fee_msat = hop_use_fee_msat;
2037
2033
old_entry. total_fee_msat = total_fee_msat;
2038
- old_entry. node_id = $dest_node_id. clone( ) ;
2039
2034
old_entry. candidate = $candidate. clone( ) ;
2040
2035
old_entry. fee_msat = 0 ; // This value will be later filled with hop_use_fee_msat of the following channel
2041
2036
old_entry. path_htlc_minimum_msat = path_htlc_minimum_msat;
@@ -2405,7 +2400,7 @@ where L::Target: Logger {
2405
2400
2406
2401
' path_walk: loop {
2407
2402
let mut features_set = false ;
2408
- if let Some ( first_channels) = first_hop_targets. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2403
+ if let Some ( first_channels) = first_hop_targets. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) ) {
2409
2404
for details in first_channels {
2410
2405
if let Some ( scid) = ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . short_channel_id ( ) {
2411
2406
if details. get_outbound_payment_scid ( ) . unwrap ( ) == scid {
@@ -2417,7 +2412,7 @@ where L::Target: Logger {
2417
2412
}
2418
2413
}
2419
2414
if !features_set {
2420
- if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2415
+ if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) ) {
2421
2416
if let Some ( node_info) = node. announcement_info . as_ref ( ) {
2422
2417
ordered_hops. last_mut ( ) . unwrap ( ) . 1 = node_info. features . clone ( ) ;
2423
2418
} else {
@@ -2434,11 +2429,11 @@ where L::Target: Logger {
2434
2429
// save this path for the payment route. Also, update the liquidity
2435
2430
// remaining on the used hops, so that we take them into account
2436
2431
// while looking for more paths.
2437
- if ordered_hops. last ( ) . unwrap ( ) . 0 . node_id == maybe_dummy_payee_node_id {
2432
+ if ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) == maybe_dummy_payee_node_id {
2438
2433
break ' path_walk;
2439
2434
}
2440
2435
2441
- new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2436
+ new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) ) {
2442
2437
Some ( payment_hop) => payment_hop,
2443
2438
// We can't arrive at None because, if we ever add an entry to targets,
2444
2439
// we also fill in the entry in dist (see add_entry!).
@@ -2477,12 +2472,13 @@ where L::Target: Logger {
2477
2472
// Remember that we used these channels so that we don't rely
2478
2473
// on the same liquidity in future paths.
2479
2474
let mut prevented_redundant_path_selection = false ;
2480
- let prev_hop_iter = core:: iter:: once ( & our_node_id)
2481
- . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | & hop. node_id ) ) ;
2475
+ let prev_hop_iter = core:: iter:: once ( our_node_id)
2476
+ . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | hop. candidate . target ( ) ) ) ;
2482
2477
for ( prev_hop, ( hop, _) ) in prev_hop_iter. zip ( payment_path. hops . iter ( ) ) {
2478
+ let target = hop. candidate . target ( ) ;
2483
2479
let spent_on_hop_msat = value_contribution_msat + hop. next_hops_fee_msat ;
2484
2480
let used_liquidity_msat = used_liquidities
2485
- . entry ( hop. candidate . id ( * prev_hop < hop . node_id ) )
2481
+ . entry ( hop. candidate . id ( prev_hop < target ) )
2486
2482
. and_modify ( |used_liquidity_msat| * used_liquidity_msat += spent_on_hop_msat)
2487
2483
. or_insert ( spent_on_hop_msat) ;
2488
2484
let hop_capacity = hop. candidate . effective_capacity ( ) ;
@@ -2657,8 +2653,8 @@ where L::Target: Logger {
2657
2653
} ) ;
2658
2654
for idx in 0 ..( selected_route. len ( ) - 1 ) {
2659
2655
if idx + 1 >= selected_route. len ( ) { break ; }
2660
- if iter_equal ( selected_route[ idx ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ,
2661
- selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ) {
2656
+ if iter_equal ( selected_route[ idx ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ,
2657
+ selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ) {
2662
2658
let new_value = selected_route[ idx] . get_value_msat ( ) + selected_route[ idx + 1 ] . get_value_msat ( ) ;
2663
2659
selected_route[ idx] . update_value_and_recompute_fees ( new_value) ;
2664
2660
selected_route. remove ( idx + 1 ) ;
@@ -2683,14 +2679,14 @@ where L::Target: Logger {
2683
2679
// there are announced channels between the endpoints. If so, the hop might be
2684
2680
// referring to any of the announced channels, as its `short_channel_id` might be
2685
2681
// an alias, in which case we don't take any chances here.
2686
- network_graph. node ( & hop. node_id ) . map_or ( false , |hop_node|
2682
+ network_graph. node ( & hop. candidate . target ( ) ) . map_or ( false , |hop_node|
2687
2683
hop_node. channels . iter ( ) . any ( |scid| network_graph. channel ( * scid)
2688
2684
. map_or ( false , |c| c. as_directed_from ( & prev_hop_node_id) . is_some ( ) ) )
2689
2685
)
2690
2686
} ;
2691
2687
2692
2688
hops. push ( RouteHop {
2693
- 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 ) } ) ?,
2689
+ 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 ) } ) ?,
2694
2690
node_features : node_features. clone ( ) ,
2695
2691
short_channel_id : hop. candidate . short_channel_id ( ) . unwrap ( ) ,
2696
2692
channel_features : hop. candidate . features ( ) ,
@@ -2699,7 +2695,7 @@ where L::Target: Logger {
2699
2695
maybe_announced_channel,
2700
2696
} ) ;
2701
2697
2702
- prev_hop_node_id = hop. node_id ;
2698
+ prev_hop_node_id = hop. candidate . target ( ) ;
2703
2699
}
2704
2700
let mut final_cltv_delta = final_cltv_expiry_delta;
2705
2701
let blinded_tail = payment_path. hops . last ( ) . and_then ( |( h, _) | {
0 commit comments