@@ -1251,6 +1251,27 @@ DirectedChannelLiquidity< L, BRT, T> {
1251
1251
liquidity_penalty_msat. saturating_add ( amount_penalty_msat)
1252
1252
}
1253
1253
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
+
1254
1275
/// Returns the lower bound of the channel liquidity balance in this direction.
1255
1276
#[ inline( always) ]
1256
1277
fn min_liquidity_msat ( & self ) -> u64 {
@@ -1390,6 +1411,17 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreLookUp for Probabilistic
1390
1411
. saturating_add ( base_penalty_msat)
1391
1412
}
1392
1413
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
+
1393
1425
fn channel_balance_certainty ( & self , short_channel_id : u64 , info : & DirectedChannelInfo ) -> f64 {
1394
1426
self . channel_liquidities
1395
1427
. get ( & short_channel_id)
0 commit comments