Skip to content

Commit ccfe7aa

Browse files
committed
f - WIP
1 parent 6452cc1 commit ccfe7aa

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

lightning/src/routing/scoring.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -559,8 +559,8 @@ pub struct ProbabilisticScoringParameters {
559559
/// Whether an additional penalty should be calculated based on the payment amount in order to
560560
/// provide higher penalties for large payments.
561561
///
562-
/// Default value: false
563-
pub include_amount_penalty: bool,
562+
/// Default value: 0
563+
pub amount_penalty_multiplier_msat: u64,
564564
}
565565

566566
/// Accounting for channel liquidity balance uncertainty.
@@ -614,7 +614,7 @@ impl Default for ProbabilisticScoringParameters {
614614
base_penalty_msat: 500,
615615
liquidity_penalty_multiplier_msat: 40_000,
616616
liquidity_offset_half_life: Duration::from_secs(3600),
617-
include_amount_penalty: false,
617+
amount_penalty_multiplier_msat: 0,
618618
}
619619
}
620620
}
@@ -711,20 +711,19 @@ impl<L: Deref<Target = u64>, T: Time, U: Deref<Target = T>> DirectedChannelLiqui
711711
&self, amount_msat: u64, negative_log10_times_1024: u64,
712712
params: ProbabilisticScoringParameters
713713
) -> u64 {
714-
// Upper bound the liquidity penalty to ensure some channel is selected.
715-
let multiplier_msat = params.liquidity_penalty_multiplier_msat;
716-
let max_penalty_msat = multiplier_msat.saturating_mul(NEGATIVE_LOG10_UPPER_BOUND);
717-
let penalty_msat = (negative_log10_times_1024.saturating_mul(multiplier_msat) / 1024)
718-
.min(max_penalty_msat)
719-
.saturating_add(params.base_penalty_msat);
720-
721-
if params.include_amount_penalty {
722-
let amount_penalty = negative_log10_times_1024.saturating_mul(amount_msat) / 1024
723-
/ AMOUNT_PENALTY_DIVISOR;
724-
penalty_msat.saturating_add(amount_penalty)
725-
} else {
726-
penalty_msat
727-
}
714+
let liquidity_penalty_msat = {
715+
// Upper bound the liquidity penalty to ensure some channel is selected.
716+
let multiplier_msat = params.liquidity_penalty_multiplier_msat;
717+
let max_penalty_msat = multiplier_msat.saturating_mul(NEGATIVE_LOG10_UPPER_BOUND);
718+
(negative_log10_times_1024.saturating_mul(multiplier_msat) / 1024).min(max_penalty_msat)
719+
};
720+
let amount_penalty_msat = negative_log10_times_1024
721+
.saturating_mul(params.amount_penalty_multiplier_msat)
722+
.saturating_mul(amount_msat) / 1024 / AMOUNT_PENALTY_DIVISOR;
723+
724+
params.base_penalty_msat
725+
.saturating_add(liquidity_penalty_msat)
726+
.saturating_add(amount_penalty_msat)
728727
}
729728

730729
/// Returns the lower bound of the channel liquidity balance in this direction.
@@ -2118,19 +2117,19 @@ mod tests {
21182117

21192118
let params = ProbabilisticScoringParameters {
21202119
liquidity_penalty_multiplier_msat: 1_000,
2121-
include_amount_penalty: false,
2120+
amount_penalty_multiplier_msat: 0,
21222121
..Default::default()
21232122
};
21242123
let scorer = ProbabilisticScorer::new(params, &network_graph);
21252124
assert_eq!(scorer.channel_penalty_msat(42, 512_000, 1_024_000, &source, &target), 800);
21262125

21272126
let params = ProbabilisticScoringParameters {
21282127
liquidity_penalty_multiplier_msat: 1_000,
2129-
include_amount_penalty: true,
2128+
amount_penalty_multiplier_msat: 1_000,
21302129
..Default::default()
21312130
};
21322131
let scorer = ProbabilisticScorer::new(params, &network_graph);
2133-
assert_eq!(scorer.channel_penalty_msat(42, 512_000, 1_024_000, &source, &target), 950);
2132+
assert_eq!(scorer.channel_penalty_msat(42, 512_000, 1_024_000, &source, &target), 151_190);
21342133
}
21352134

21362135
#[test]

0 commit comments

Comments
 (0)