Skip to content

Commit 630246b

Browse files
committed
add set_scores method on CombinedScorer to overwrite local data
This commit expands on the previously introduced merge method by offering a way to simply replace the local scores by the liquidity information that is obtained from an external source.
1 parent bb468dd commit 630246b

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

lightning/src/routing/scoring.rs

+32-11
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
5959
use crate::util::logger::Logger;
6060
use crate::prelude::*;
6161
use crate::prelude::hash_map::Entry;
62-
use core::{cmp, fmt};
62+
use core::{cmp, fmt, mem};
6363
use core::ops::{Deref, DerefMut};
6464
use core::time::Duration;
6565
use crate::io::{self, Read};
@@ -1143,6 +1143,11 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
11431143
}
11441144
None
11451145
}
1146+
1147+
/// Overwrite the scorer state with the given external scores.
1148+
pub fn set_scores(&mut self, external_scores: ChannelLiquidities) {
1149+
_ = mem::replace(&mut self.channel_liquidities, external_scores);
1150+
}
11461151
}
11471152

11481153
impl ChannelLiquidity {
@@ -1746,6 +1751,11 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref + Clone> CombinedScore
17461751
self.scorer.channel_liquidities.insert(scid, liquidity);
17471752
}
17481753
}
1754+
1755+
/// Overwrite the scorer state with the given external scores.
1756+
pub fn set_scores(&mut self, external_scores: ChannelLiquidities) {
1757+
self.scorer.set_scores(external_scores);
1758+
}
17491759
}
17501760

17511761
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreLookUp for CombinedScorer<G, L> where L::Target: Logger {
@@ -3962,6 +3972,19 @@ mod tests {
39623972
},
39633973
};
39643974

3975+
let logger_rc = Rc::new(&logger);
3976+
3977+
let mut external_liquidity = ChannelLiquidity::new(Duration::ZERO);
3978+
external_liquidity.as_directed_mut(&source_node_id(), &target_node_id(), 1_000).successful(
3979+
1000,
3980+
Duration::ZERO,
3981+
format_args!("test channel"),
3982+
logger_rc.as_ref(),
3983+
);
3984+
3985+
let mut external_scores = ChannelLiquidities::new();
3986+
external_scores.insert(42, external_liquidity);
3987+
39653988
{
39663989
let network_graph = network_graph.read_only();
39673990
let channel = network_graph.channel(42).unwrap();
@@ -3971,16 +3994,7 @@ mod tests {
39713994

39723995
let penalty = combined_scorer.channel_penalty_msat(&candidate, usage, &params);
39733996

3974-
let mut external_liquidity = ChannelLiquidity::new(Duration::ZERO);
3975-
let logger_rc = Rc::new(&logger); // Why necessary and not above for the network graph?
3976-
external_liquidity
3977-
.as_directed_mut(&source_node_id(), &target_node_id(), 1_000)
3978-
.successful(1000, Duration::ZERO, format_args!("test channel"), logger_rc.as_ref());
3979-
3980-
let mut external_scores = ChannelLiquidities::new();
3981-
3982-
external_scores.insert(42, external_liquidity);
3983-
combined_scorer.merge(external_scores, Duration::ZERO);
3997+
combined_scorer.merge(external_scores.clone(), Duration::ZERO);
39843998

39853999
let penalty_after_merge =
39864000
combined_scorer.channel_penalty_msat(&candidate, usage, &params);
@@ -3993,6 +4007,13 @@ mod tests {
39934007
let liquidity_range =
39944008
combined_scorer.scorer.estimated_channel_liquidity_range(42, &target_node_id());
39954009
assert_eq!(liquidity_range.unwrap(), (0, 300));
4010+
4011+
// Now set (overwrite) the scorer state with the external data which should lead to an even greater liquidity
4012+
// range. Just the success from the external source is now considered.
4013+
combined_scorer.set_scores(external_scores);
4014+
let liquidity_range =
4015+
combined_scorer.scorer.estimated_channel_liquidity_range(42, &target_node_id());
4016+
assert_eq!(liquidity_range.unwrap(), (0, 0));
39964017
}
39974018
}
39984019

0 commit comments

Comments
 (0)