Skip to content

Commit 71a9fc0

Browse files
committed
avg live bounds wip
1 parent 610edca commit 71a9fc0

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

lightning/src/routing/scoring.rs

+36-25
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,34 @@ impl ChannelLiquidities {
484484
Self(new_hash_map())
485485
}
486486

487-
fn merge(&mut self, other: Self) {
487+
fn time_passed(&mut self, duration_since_epoch: Duration, decay_params: ProbabilisticScoringDecayParameters) {
488+
self.0.retain(|_scid, liquidity| {
489+
liquidity.min_liquidity_offset_msat =
490+
liquidity.decayed_offset(liquidity.min_liquidity_offset_msat, duration_since_epoch, decay_params);
491+
liquidity.max_liquidity_offset_msat =
492+
liquidity.decayed_offset(liquidity.max_liquidity_offset_msat, duration_since_epoch, decay_params);
493+
liquidity.last_updated = duration_since_epoch;
494+
495+
// TODO: Call decay multiple times.
496+
let elapsed_time =
497+
duration_since_epoch.saturating_sub(liquidity.offset_history_last_updated);
498+
if elapsed_time > decay_params.historical_no_updates_half_life {
499+
let half_life = decay_params.historical_no_updates_half_life.as_secs_f64();
500+
if half_life != 0.0 {
501+
liquidity.liquidity_history.decay_buckets(elapsed_time.as_secs_f64() / half_life);
502+
liquidity.offset_history_last_updated = duration_since_epoch;
503+
}
504+
}
505+
liquidity.min_liquidity_offset_msat != 0 || liquidity.max_liquidity_offset_msat != 0 ||
506+
liquidity.liquidity_history.has_datapoints()
507+
});
508+
}
509+
510+
fn merge(&mut self, mut other: Self, duration_since_epoch: Duration, decay_params: ProbabilisticScoringDecayParameters) {
511+
// Decay both set of scores to make them comparable.
512+
self.time_passed(duration_since_epoch, decay_params);
513+
other.time_passed(duration_since_epoch, decay_params);
514+
488515
for (id, item) in other.0 {
489516
match self.0.get_mut(&id) {
490517
None => { self.0.insert(id, item); },
@@ -899,8 +926,8 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
899926
}
900927

901928
/// Merge external channel liquidity data into the internal state.
902-
pub fn merge(&mut self, other: ChannelLiquidities) {
903-
self.channel_liquidities.merge(other);
929+
pub fn merge(&mut self, other: ChannelLiquidities, duration_since_epoch: Duration) {
930+
self.channel_liquidities.merge(other, duration_since_epoch, self.decay_params);
904931
}
905932

906933
#[cfg(test)]
@@ -1125,9 +1152,12 @@ impl ChannelLiquidity {
11251152
}
11261153

11271154
fn merge(&mut self, other: &Self) {
1128-
self.liquidity_history.merge(&other.liquidity_history);
1155+
// Take average for min/max liquidity offsets.
1156+
self.min_liquidity_offset_msat = (self.min_liquidity_offset_msat + other.min_liquidity_offset_msat) / 2;
1157+
self.max_liquidity_offset_msat = (self.max_liquidity_offset_msat + other.max_liquidity_offset_msat) / 2;
11291158

1130-
// TODO: Merge other fields.
1159+
// Merge historical liquidity data.
1160+
self.liquidity_history.merge(&other.liquidity_history);
11311161
}
11321162

11331163
/// Returns a view of the channel liquidity directed from `source` to `target` assuming
@@ -1659,26 +1689,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreUpdate for Probabilistic
16591689
}
16601690

16611691
fn time_passed(&mut self, duration_since_epoch: Duration) {
1662-
let decay_params = self.decay_params;
1663-
self.channel_liquidities.retain(|_scid, liquidity| {
1664-
liquidity.min_liquidity_offset_msat =
1665-
liquidity.decayed_offset(liquidity.min_liquidity_offset_msat, duration_since_epoch, decay_params);
1666-
liquidity.max_liquidity_offset_msat =
1667-
liquidity.decayed_offset(liquidity.max_liquidity_offset_msat, duration_since_epoch, decay_params);
1668-
liquidity.last_updated = duration_since_epoch;
1669-
1670-
let elapsed_time =
1671-
duration_since_epoch.saturating_sub(liquidity.offset_history_last_updated);
1672-
if elapsed_time > decay_params.historical_no_updates_half_life {
1673-
let half_life = decay_params.historical_no_updates_half_life.as_secs_f64();
1674-
if half_life != 0.0 {
1675-
liquidity.liquidity_history.decay_buckets(elapsed_time.as_secs_f64() / half_life);
1676-
liquidity.offset_history_last_updated = duration_since_epoch;
1677-
}
1678-
}
1679-
liquidity.min_liquidity_offset_msat != 0 || liquidity.max_liquidity_offset_msat != 0 ||
1680-
liquidity.liquidity_history.has_datapoints()
1681-
});
1692+
self.channel_liquidities.time_passed(duration_since_epoch, self.decay_params);
16821693
}
16831694
}
16841695

0 commit comments

Comments
 (0)