@@ -559,8 +559,8 @@ pub struct ProbabilisticScoringParameters {
559
559
/// Whether an additional penalty should be calculated based on the payment amount in order to
560
560
/// provide higher penalties for large payments.
561
561
///
562
- /// Default value: false
563
- pub include_amount_penalty : bool ,
562
+ /// Default value: 0
563
+ pub amount_penalty_multiplier_msat : u64 ,
564
564
}
565
565
566
566
/// Accounting for channel liquidity balance uncertainty.
@@ -614,7 +614,7 @@ impl Default for ProbabilisticScoringParameters {
614
614
base_penalty_msat : 500 ,
615
615
liquidity_penalty_multiplier_msat : 40_000 ,
616
616
liquidity_offset_half_life : Duration :: from_secs ( 3600 ) ,
617
- include_amount_penalty : false ,
617
+ amount_penalty_multiplier_msat : 0 ,
618
618
}
619
619
}
620
620
}
@@ -711,20 +711,19 @@ impl<L: Deref<Target = u64>, T: Time, U: Deref<Target = T>> DirectedChannelLiqui
711
711
& self , amount_msat : u64 , negative_log10_times_1024 : u64 ,
712
712
params : ProbabilisticScoringParameters
713
713
) -> 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)
728
727
}
729
728
730
729
/// Returns the lower bound of the channel liquidity balance in this direction.
@@ -2118,19 +2117,19 @@ mod tests {
2118
2117
2119
2118
let params = ProbabilisticScoringParameters {
2120
2119
liquidity_penalty_multiplier_msat : 1_000 ,
2121
- include_amount_penalty : false ,
2120
+ amount_penalty_multiplier_msat : 0 ,
2122
2121
..Default :: default ( )
2123
2122
} ;
2124
2123
let scorer = ProbabilisticScorer :: new ( params, & network_graph) ;
2125
2124
assert_eq ! ( scorer. channel_penalty_msat( 42 , 512_000 , 1_024_000 , & source, & target) , 800 ) ;
2126
2125
2127
2126
let params = ProbabilisticScoringParameters {
2128
2127
liquidity_penalty_multiplier_msat : 1_000 ,
2129
- include_amount_penalty : true ,
2128
+ amount_penalty_multiplier_msat : 1_000 ,
2130
2129
..Default :: default ( )
2131
2130
} ;
2132
2131
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 ) ;
2134
2133
}
2135
2134
2136
2135
#[ test]
0 commit comments