}
}
+#[derive(Clone)]
+/// [`Score`] implementation that uses a fixed penalty.
+pub struct FixedPenaltyScorer {
+ penalty_msat: u64,
+}
+
+impl_writeable_tlv_based!(FixedPenaltyScorer, {
+ (0, penalty_msat, required),
+});
+
+impl FixedPenaltyScorer {
+ /// Creates a new scorer using `penalty_msat`.
+ pub fn with_penalty(penalty_msat: u64) -> Self {
+ Self { penalty_msat }
+ }
+}
+
+impl Score for FixedPenaltyScorer {
+ fn channel_penalty_msat(&self, _: u64, _: u64, _: u64, _: &NodeId, _: &NodeId) -> u64 {
+ self.penalty_msat
+ }
+
+ fn payment_path_failed(&mut self, _path: &[&RouteHop], _short_channel_id: u64) {}
+
+ fn payment_path_successful(&mut self, _path: &[&RouteHop]) {}
+}
+
/// [`Score`] implementation that provides reasonable default behavior.
///
/// Used to apply a fixed penalty to each channel, thus avoiding long paths when shorter paths with
/// behavior.
///
/// [module-level documentation]: crate::routing::scoring
+#[deprecated(
+ since = "0.0.105",
+ note = "ProbabilisticScorer should be used instead of Scorer.",
+)]
pub type Scorer = ScorerUsingTime::<ConfiguredTime>;
#[cfg(not(feature = "no-std"))]
/// [`Score`] implementation.
///
/// (C-not exported) generally all users should use the [`Scorer`] type alias.
-#[doc(hidden)]
pub struct ScorerUsingTime<T: Time> {
params: ScoringParameters,
// TODO: Remove entries of closed channels.
channel_failures: HashMap<u64, ChannelFailure<T>>,
}
+#[derive(Clone)]
/// Parameters for configuring [`Scorer`].
pub struct ScoringParameters {
/// A fixed penalty in msats to apply to each channel.
channel_failures: HashMap::new(),
}
}
-
- /// Creates a new scorer using `penalty_msat` as a fixed channel penalty.
- #[cfg(any(test, feature = "fuzztarget", feature = "_test_utils"))]
- pub fn with_fixed_penalty(penalty_msat: u64) -> Self {
- Self::new(ScoringParameters {
- base_penalty_msat: penalty_msat,
- failure_penalty_msat: 0,
- failure_penalty_half_life: Duration::from_secs(0),
- overuse_penalty_start_1024th: 1024,
- overuse_penalty_msat_per_1024th: 0,
- })
- }
}
impl<T: Time> ChannelFailure<T> {
/// Probabilistic [`Score`] implementation.
///
/// (C-not exported) generally all users should use the [`ProbabilisticScorer`] type alias.
-#[doc(hidden)]
pub struct ProbabilisticScorerUsingTime<G: Deref<Target = NetworkGraph>, T: Time> {
params: ProbabilisticScoringParameters,
network_graph: G,