Skip to content

Commit 707cc82

Browse files
committed
WIP: Success probability for ProbabilisticScorer
1 parent 9e60823 commit 707cc82

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

lightning/src/routing/router.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
183183
let amount_msat = amount_msats;
184184
let effective_capacity = info.effective_capacity();
185185
let usage = ChannelUsage { amount_msat, inflight_htlc_msat: 0, effective_capacity };
186-
let success_probability = scorer.channel_success_probability(scid, &info, usage);
186+
let success_probability = scorer.channel_success_probability(
187+
scid, &info, usage, &self.score_params
188+
);
187189

188190
if !success_probability.is_finite() {
189191
return None;

lightning/src/routing/scoring.rs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ pub trait ScoreLookUp {
118118
/// This is useful to determine whether a channel should be included in a blinded path and the
119119
/// preferred ordering of blinded paths.
120120
fn channel_success_probability(
121-
&self, _short_channel_id: u64, _info: &DirectedChannelInfo, _usage: ChannelUsage
121+
&self, _short_channel_id: u64, _info: &DirectedChannelInfo, _usage: ChannelUsage,
122+
_score_params: &Self::ScoreParams
122123
) -> f64 { 0.5 }
123124

124125
/// Returns how certain any knowledge gained about the channel's liquidity balance is.
@@ -1251,6 +1252,27 @@ DirectedChannelLiquidity< L, BRT, T> {
12511252
liquidity_penalty_msat.saturating_add(amount_penalty_msat)
12521253
}
12531254

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+
12541276
/// Returns the lower bound of the channel liquidity balance in this direction.
12551277
#[inline(always)]
12561278
fn min_liquidity_msat(&self) -> u64 {
@@ -1390,6 +1412,17 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreLookUp for Probabilistic
13901412
.saturating_add(base_penalty_msat)
13911413
}
13921414

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+
13931426
fn channel_balance_certainty(&self, short_channel_id: u64, info: &DirectedChannelInfo) -> f64 {
13941427
self.channel_liquidities
13951428
.get(&short_channel_id)

0 commit comments

Comments
 (0)