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