@@ -1215,7 +1215,7 @@ fn iter_equal<I1: Iterator, I2: Iterator>(mut iter_a: I1, mut iter_b: I2)
1215
1215
pub struct PathBuildingHop < ' a > {
1216
1216
// Note that this should be dropped in favor of loading it from CandidateRouteHop, but doing so
1217
1217
// is a larger refactor and will require careful performance analysis.
1218
- node_id : NodeId ,
1218
+ // node_id: NodeId,
1219
1219
candidate : CandidateRouteHop < ' a > ,
1220
1220
fee_msat : u64 ,
1221
1221
@@ -1253,7 +1253,7 @@ impl<'a> core::fmt::Debug for PathBuildingHop<'a> {
1253
1253
fn fmt ( & self , f : & mut core:: fmt:: Formatter ) -> Result < ( ) , core:: fmt:: Error > {
1254
1254
let mut debug_struct = f. debug_struct ( "PathBuildingHop" ) ;
1255
1255
debug_struct
1256
- . field ( "node_id" , & self . node_id )
1256
+ . field ( "node_id" , & self . candidate . source ( ) )
1257
1257
. field ( "short_channel_id" , & self . candidate . short_channel_id ( ) )
1258
1258
. field ( "total_fee_msat" , & self . total_fee_msat )
1259
1259
. field ( "next_hops_fee_msat" , & self . next_hops_fee_msat )
@@ -1875,7 +1875,7 @@ where L::Target: Logger {
1875
1875
// This will affect our decision on selecting short_channel_id
1876
1876
// as a way to reach the $dest_node_id.
1877
1877
PathBuildingHop {
1878
- node_id: $dest_node_id. clone( ) ,
1878
+ // node_id: $dest_node_id.clone(),
1879
1879
candidate: $candidate. clone( ) ,
1880
1880
fee_msat: 0 ,
1881
1881
next_hops_fee_msat: u64 :: max_value( ) ,
@@ -1957,7 +1957,7 @@ where L::Target: Logger {
1957
1957
old_entry. next_hops_fee_msat = $next_hops_fee_msat;
1958
1958
old_entry. hop_use_fee_msat = hop_use_fee_msat;
1959
1959
old_entry. total_fee_msat = total_fee_msat;
1960
- old_entry. node_id = $dest_node_id. clone( ) ;
1960
+ // old_entry.node_id = $dest_node_id.clone();
1961
1961
old_entry. candidate = $candidate. clone( ) ;
1962
1962
old_entry. fee_msat = 0 ; // This value will be later filled with hop_use_fee_msat of the following channel
1963
1963
old_entry. path_htlc_minimum_msat = path_htlc_minimum_msat;
@@ -2304,7 +2304,11 @@ where L::Target: Logger {
2304
2304
2305
2305
' path_walk: loop {
2306
2306
let mut features_set = false ;
2307
- if let Some ( first_channels) = first_hop_targets. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2307
+ let target = match ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) {
2308
+ Some ( target) => target,
2309
+ None => break ,
2310
+ } ;
2311
+ if let Some ( first_channels) = first_hop_targets. get ( & target) {
2308
2312
for details in first_channels {
2309
2313
if let Some ( scid) = ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . short_channel_id ( ) {
2310
2314
if details. get_outbound_payment_scid ( ) . unwrap ( ) == scid {
@@ -2316,7 +2320,7 @@ where L::Target: Logger {
2316
2320
}
2317
2321
}
2318
2322
if !features_set {
2319
- if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2323
+ if let Some ( node) = network_nodes. get ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) ) {
2320
2324
if let Some ( node_info) = node. announcement_info . as_ref ( ) {
2321
2325
ordered_hops. last_mut ( ) . unwrap ( ) . 1 = node_info. features . clone ( ) ;
2322
2326
} else {
@@ -2333,11 +2337,11 @@ where L::Target: Logger {
2333
2337
// save this path for the payment route. Also, update the liquidity
2334
2338
// remaining on the used hops, so that we take them into account
2335
2339
// while looking for more paths.
2336
- if ordered_hops. last ( ) . unwrap ( ) . 0 . node_id == maybe_dummy_payee_node_id {
2340
+ if ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) == maybe_dummy_payee_node_id {
2337
2341
break ' path_walk;
2338
2342
}
2339
2343
2340
- new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . node_id ) {
2344
+ new_entry = match dist. remove ( & ordered_hops. last ( ) . unwrap ( ) . 0 . candidate . target ( ) . unwrap ( ) ) {
2341
2345
Some ( payment_hop) => payment_hop,
2342
2346
// We can't arrive at None because, if we ever add an entry to targets,
2343
2347
// we also fill in the entry in dist (see add_entry!).
@@ -2376,12 +2380,16 @@ where L::Target: Logger {
2376
2380
// Remember that we used these channels so that we don't rely
2377
2381
// on the same liquidity in future paths.
2378
2382
let mut prevented_redundant_path_selection = false ;
2379
- let prev_hop_iter = core:: iter:: once ( & our_node_id)
2380
- . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | & hop. node_id ) ) ;
2383
+ let prev_hop_iter = core:: iter:: once ( our_node_id)
2384
+ . chain ( payment_path. hops . iter ( ) . map ( |( hop, _) | hop. candidate . target ( ) . unwrap ( ) ) ) ;
2381
2385
for ( prev_hop, ( hop, _) ) in prev_hop_iter. zip ( payment_path. hops . iter ( ) ) {
2386
+ let target = match hop. candidate . target ( ) {
2387
+ Some ( target) => target,
2388
+ None => break ,
2389
+ } ;
2382
2390
let spent_on_hop_msat = value_contribution_msat + hop. next_hops_fee_msat ;
2383
2391
let used_liquidity_msat = used_liquidities
2384
- . entry ( hop. candidate . id ( * prev_hop < hop . node_id ) )
2392
+ . entry ( hop. candidate . id ( prev_hop < target ) )
2385
2393
. and_modify ( |used_liquidity_msat| * used_liquidity_msat += spent_on_hop_msat)
2386
2394
. or_insert ( spent_on_hop_msat) ;
2387
2395
let hop_capacity = hop. candidate . effective_capacity ( ) ;
@@ -2545,8 +2553,8 @@ where L::Target: Logger {
2545
2553
} ) ;
2546
2554
for idx in 0 ..( selected_route. len ( ) - 1 ) {
2547
2555
if idx + 1 >= selected_route. len ( ) { break ; }
2548
- if iter_equal ( selected_route[ idx ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ,
2549
- selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . node_id ) ) ) {
2556
+ if iter_equal ( selected_route[ idx] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ,
2557
+ selected_route[ idx + 1 ] . hops . iter ( ) . map ( |h| ( h. 0 . candidate . id ( true ) , h. 0 . candidate . target ( ) ) ) ) {
2550
2558
let new_value = selected_route[ idx] . get_value_msat ( ) + selected_route[ idx + 1 ] . get_value_msat ( ) ;
2551
2559
selected_route[ idx] . update_value_and_recompute_fees ( new_value) ;
2552
2560
selected_route. remove ( idx + 1 ) ;
@@ -2560,7 +2568,7 @@ where L::Target: Logger {
2560
2568
. filter ( |( h, _) | h. candidate . short_channel_id ( ) . is_some ( ) )
2561
2569
{
2562
2570
hops. push ( RouteHop {
2563
- 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 ) } ) ?,
2571
+ 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 ) } ) ?,
2564
2572
node_features : node_features. clone ( ) ,
2565
2573
short_channel_id : hop. candidate . short_channel_id ( ) . unwrap ( ) ,
2566
2574
channel_features : hop. candidate . features ( ) ,
0 commit comments