Skip to content

Commit f05ba31

Browse files
committed
WIP: Success probability for ProbabilisticScorer
1 parent d2067bb commit f05ba31

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

lightning/src/routing/scoring.rs

+32
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)