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.
This commit is contained in:
Jeffrey Czyz 2022-05-17 16:57:55 -05:00
parent a190aed88a
commit 435a325d02
No known key found for this signature in database
GPG key ID: 3A4E08275D5E96D2

View file

@ -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 {