@@ -1252,6 +1252,27 @@ DirectedChannelLiquidity< L, BRT, T> {
12521252 liquidity_penalty_msat. saturating_add ( amount_penalty_msat)
12531253 }
12541254
1255+ fn success_probability (
1256+ & self , usage : ChannelUsage , score_params : & ProbabilisticScoringFeeParameters
1257+ ) -> f64 {
1258+ let amount_msat = usage. amount_msat ;
1259+ let available_capacity = self . capacity_msat ;
1260+ let max_liquidity_msat = self . max_liquidity_msat ( ) ;
1261+ let min_liquidity_msat = core:: cmp:: min ( self . min_liquidity_msat ( ) , max_liquidity_msat) ;
1262+
1263+ if amount_msat <= min_liquidity_msat {
1264+ 1.0
1265+ } else if amount_msat >= max_liquidity_msat {
1266+ 0.0
1267+ } else {
1268+ let ( numerator, denominator) = success_probability (
1269+ amount_msat, min_liquidity_msat, max_liquidity_msat, available_capacity,
1270+ score_params, false
1271+ ) ;
1272+ numerator as f64 / denominator as f64
1273+ }
1274+ }
1275+
12551276 /// Returns the lower bound of the channel liquidity balance in this direction.
12561277 #[ inline( always) ]
12571278 fn min_liquidity_msat ( & self ) -> u64 {
@@ -1391,6 +1412,17 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreLookUp for Probabilistic
13911412 . saturating_add ( base_penalty_msat)
13921413 }
13931414
1415+ fn channel_success_probability (
1416+ & self , short_channel_id : u64 , info : & DirectedChannelInfo , usage : ChannelUsage ,
1417+ score_params : & ProbabilisticScoringFeeParameters
1418+ ) -> f64 {
1419+ self . channel_liquidities
1420+ . get ( & short_channel_id)
1421+ . unwrap_or ( & ChannelLiquidity :: new ( Duration :: ZERO ) )
1422+ . as_directed ( info. source ( ) , info. target ( ) , usage. effective_capacity . as_msat ( ) )
1423+ . success_probability ( usage, score_params)
1424+ }
1425+
13941426 fn channel_balance_certainty ( & self , short_channel_id : u64 , info : & DirectedChannelInfo ) -> f64 {
13951427 self . channel_liquidities
13961428 . get ( & short_channel_id)
0 commit comments