From 435a325d028adbf4b2d9c50990373827453692fb Mon Sep 17 00:00:00 2001 From: Jeffrey Czyz Date: Tue, 17 May 2022 16:57:55 -0500 Subject: [PATCH] Use correct penalty and CLTV delta in route hints For route hints, the aggregate next hops path penalty and CLTV delta should be computed after considering each hop rather than before. Otherwise, these aggregate values will include values from the current hop, too. --- lightning/src/routing/router.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs index 7536011d0..e8436e146 100644 --- a/lightning/src/routing/router.rs +++ b/lightning/src/routing/router.rs @@ -1295,16 +1295,6 @@ where L::Target: Logger { short_channel_id: hop.short_channel_id, }) .unwrap_or_else(|| CandidateRouteHop::PrivateHop { hint: hop }); - let amount_to_transfer_msat = final_value_msat + aggregate_next_hops_fee_msat; - let capacity_msat = candidate.effective_capacity().as_msat(); - aggregate_next_hops_path_penalty_msat = aggregate_next_hops_path_penalty_msat - .saturating_add(scorer.channel_penalty_msat(hop.short_channel_id, amount_to_transfer_msat, capacity_msat, &source, &target)); - - aggregate_next_hops_cltv_delta = aggregate_next_hops_cltv_delta - .saturating_add(hop.cltv_expiry_delta as u32); - - aggregate_next_hops_path_length = aggregate_next_hops_path_length - .saturating_add(1); if !add_entry!(candidate, source, target, aggregate_next_hops_fee_msat, path_value_msat, aggregate_next_hops_path_htlc_minimum_msat, @@ -1316,6 +1306,17 @@ where L::Target: Logger { hop_used = false; } + let amount_to_transfer_msat = final_value_msat + aggregate_next_hops_fee_msat; + let capacity_msat = candidate.effective_capacity().as_msat(); + aggregate_next_hops_path_penalty_msat = aggregate_next_hops_path_penalty_msat + .saturating_add(scorer.channel_penalty_msat(hop.short_channel_id, amount_to_transfer_msat, capacity_msat, &source, &target)); + + aggregate_next_hops_cltv_delta = aggregate_next_hops_cltv_delta + .saturating_add(hop.cltv_expiry_delta as u32); + + aggregate_next_hops_path_length = aggregate_next_hops_path_length + .saturating_add(1); + // Searching for a direct channel between last checked hop and first_hop_targets if let Some(first_channels) = first_hop_targets.get(&NodeId::from_pubkey(&prev_hop_id)) { for details in first_channels { -- 2.39.5