]> git.bitcoin.ninja Git - rust-lightning/blob - lightning/src/routing/scoring.rs
451683c91bff3af128748b32591f2ccfb60453f2
[rust-lightning] / lightning / src / routing / scoring.rs
1 // This file is Copyright its original authors, visible in version control
2 // history.
3 //
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
8 // licenses.
9
10 //! Utilities for scoring payment channels.
11 //!
12 //! [`ProbabilisticScorer`] may be given to [`find_route`] to score payment channels during path
13 //! finding when a custom [`Score`] implementation is not needed.
14 //!
15 //! # Example
16 //!
17 //! ```
18 //! # extern crate bitcoin;
19 //! #
20 //! # use lightning::routing::gossip::NetworkGraph;
21 //! # use lightning::routing::router::{RouteParameters, find_route};
22 //! # use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringFeeParameters, ProbabilisticScoringDecayParameters};
23 //! # use lightning::sign::KeysManager;
24 //! # use lightning::util::logger::{Logger, Record};
25 //! # use bitcoin::secp256k1::PublicKey;
26 //! #
27 //! # struct FakeLogger {};
28 //! # impl Logger for FakeLogger {
29 //! #     fn log(&self, record: &Record) { unimplemented!() }
30 //! # }
31 //! # fn find_scored_route(payer: PublicKey, route_params: RouteParameters, network_graph: NetworkGraph<&FakeLogger>) {
32 //! # let logger = FakeLogger {};
33 //! #
34 //! // Use the default channel penalties.
35 //! let params = ProbabilisticScoringFeeParameters::default();
36 //! let decay_params = ProbabilisticScoringDecayParameters::default();
37 //! let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
38 //!
39 //! // Or use custom channel penalties.
40 //! let params = ProbabilisticScoringFeeParameters {
41 //!     liquidity_penalty_multiplier_msat: 2 * 1000,
42 //!     ..ProbabilisticScoringFeeParameters::default()
43 //! };
44 //! let decay_params = ProbabilisticScoringDecayParameters::default();
45 //! let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
46 //! # let random_seed_bytes = [42u8; 32];
47 //!
48 //! let route = find_route(&payer, &route_params, &network_graph, None, &logger, &scorer, &params, &random_seed_bytes);
49 //! # }
50 //! ```
51 //!
52 //! # Note
53 //!
54 //! Persisting when built with feature `no-std` and restoring without it, or vice versa, uses
55 //! different types and thus is undefined.
56 //!
57 //! [`find_route`]: crate::routing::router::find_route
58
59 use crate::ln::msgs::DecodeError;
60 use crate::routing::gossip::{EffectiveCapacity, NetworkGraph, NodeId};
61 use crate::routing::router::Path;
62 use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
63 use crate::util::logger::Logger;
64 use crate::util::time::Time;
65
66 use crate::prelude::*;
67 use core::{cmp, fmt};
68 use core::cell::{RefCell, RefMut};
69 use core::convert::TryInto;
70 use core::ops::{Deref, DerefMut};
71 use core::time::Duration;
72 use crate::io::{self, Read};
73 use crate::sync::{Mutex, MutexGuard};
74
75 /// We define Score ever-so-slightly differently based on whether we are being built for C bindings
76 /// or not. For users, `LockableScore` must somehow be writeable to disk. For Rust users, this is
77 /// no problem - you move a `Score` that implements `Writeable` into a `Mutex`, lock it, and now
78 /// you have the original, concrete, `Score` type, which presumably implements `Writeable`.
79 ///
80 /// For C users, once you've moved the `Score` into a `LockableScore` all you have after locking it
81 /// is an opaque trait object with an opaque pointer with no type info. Users could take the unsafe
82 /// approach of blindly casting that opaque pointer to a concrete type and calling `Writeable` from
83 /// there, but other languages downstream of the C bindings (e.g. Java) can't even do that.
84 /// Instead, we really want `Score` and `LockableScore` to implement `Writeable` directly, which we
85 /// do here by defining `Score` differently for `cfg(c_bindings)`.
86 macro_rules! define_score { ($($supertrait: path)*) => {
87 /// An interface used to score payment channels for path finding.
88 ///
89 ///     Scoring is in terms of fees willing to be paid in order to avoid routing through a channel.
90 pub trait Score $(: $supertrait)* {
91         #[cfg(not(c_bindings))]
92         /// A configurable type which should contain various passed-in parameters for configuring the scorer,
93         /// on a per-routefinding-call basis through to the scorer methods,
94         /// which are used to determine the parameters for the suitability of channels for use.
95         ///
96         /// Note that due to limitations in many other languages' generics features, language bindings
97         /// use [`ProbabilisticScoringFeeParameters`] for the parameters on all scorers.
98         type ScoreParams;
99         /// Returns the fee in msats willing to be paid to avoid routing `send_amt_msat` through the
100         /// given channel in the direction from `source` to `target`.
101         ///
102         /// The channel's capacity (less any other MPP parts that are also being considered for use in
103         /// the same payment) is given by `capacity_msat`. It may be determined from various sources
104         /// such as a chain data, network gossip, or invoice hints. For invoice hints, a capacity near
105         /// [`u64::max_value`] is given to indicate sufficient capacity for the invoice's full amount.
106         /// Thus, implementations should be overflow-safe.
107         fn channel_penalty_msat(
108                 &self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &ProbabilisticScoringFeeParameters
109         ) -> u64;
110
111         /// Handles updating channel penalties after failing to route through a channel.
112         fn payment_path_failed(&mut self, path: &Path, short_channel_id: u64);
113
114         /// Handles updating channel penalties after successfully routing along a path.
115         fn payment_path_successful(&mut self, path: &Path);
116
117         /// Handles updating channel penalties after a probe over the given path failed.
118         fn probe_failed(&mut self, path: &Path, short_channel_id: u64);
119
120         /// Handles updating channel penalties after a probe over the given path succeeded.
121         fn probe_successful(&mut self, path: &Path);
122 }
123
124 impl<S: Score, T: DerefMut<Target=S> $(+ $supertrait)*> Score for T {
125         #[cfg(not(c_bindings))]
126         type ScoreParams = S::ScoreParams;
127
128         fn channel_penalty_msat(
129                 &self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &ProbabilisticScoringFeeParameters
130         ) -> u64 {
131                 self.deref().channel_penalty_msat(short_channel_id, source, target, usage, score_params)
132         }
133
134         fn payment_path_failed(&mut self, path: &Path, short_channel_id: u64) {
135                 self.deref_mut().payment_path_failed(path, short_channel_id)
136         }
137
138         fn payment_path_successful(&mut self, path: &Path) {
139                 self.deref_mut().payment_path_successful(path)
140         }
141
142         fn probe_failed(&mut self, path: &Path, short_channel_id: u64) {
143                 self.deref_mut().probe_failed(path, short_channel_id)
144         }
145
146         fn probe_successful(&mut self, path: &Path) {
147                 self.deref_mut().probe_successful(path)
148         }
149 }
150 } }
151
152 #[cfg(c_bindings)]
153 define_score!(Writeable);
154 #[cfg(not(c_bindings))]
155 define_score!();
156
157 /// A scorer that is accessed under a lock.
158 ///
159 /// Needed so that calls to [`Score::channel_penalty_msat`] in [`find_route`] can be made while
160 /// having shared ownership of a scorer but without requiring internal locking in [`Score`]
161 /// implementations. Internal locking would be detrimental to route finding performance and could
162 /// result in [`Score::channel_penalty_msat`] returning a different value for the same channel.
163 ///
164 /// [`find_route`]: crate::routing::router::find_route
165 pub trait LockableScore<'a> {
166         /// The [`Score`] type.
167         type Score: 'a + Score;
168
169         /// The locked [`Score`] type.
170         type Locked: DerefMut<Target = Self::Score> + Sized;
171
172         /// Returns the locked scorer.
173         fn lock(&'a self) -> Self::Locked;
174 }
175
176 /// Refers to a scorer that is accessible under lock and also writeable to disk
177 ///
178 /// We need this trait to be able to pass in a scorer to `lightning-background-processor` that will enable us to
179 /// use the Persister to persist it.
180 pub trait WriteableScore<'a>: LockableScore<'a> + Writeable {}
181
182 #[cfg(not(c_bindings))]
183 impl<'a, T> WriteableScore<'a> for T where T: LockableScore<'a> + Writeable {}
184 #[cfg(not(c_bindings))]
185 impl<'a, T: 'a + Score> LockableScore<'a> for Mutex<T> {
186         type Score = T;
187         type Locked = MutexGuard<'a, T>;
188
189         fn lock(&'a self) -> Self::Locked {
190                 Mutex::lock(self).unwrap()
191         }
192 }
193
194 #[cfg(not(c_bindings))]
195 impl<'a, T: 'a + Score> LockableScore<'a> for RefCell<T> {
196         type Score = T;
197         type Locked = RefMut<'a, T>;
198
199         fn lock(&'a self) -> Self::Locked {
200                 self.borrow_mut()
201         }
202 }
203
204 #[cfg(c_bindings)]
205 /// A concrete implementation of [`LockableScore`] which supports multi-threading.
206 pub struct MultiThreadedLockableScore<T: Score> {
207         score: Mutex<T>,
208 }
209
210 #[cfg(c_bindings)]
211 impl<'a, T: 'a + Score> LockableScore<'a> for MultiThreadedLockableScore<T> {
212         type Score = T;
213         type Locked = MultiThreadedScoreLock<'a, T>;
214
215         fn lock(&'a self) -> Self::Locked {
216                 MultiThreadedScoreLock(Mutex::lock(&self.score).unwrap())
217         }
218 }
219
220 #[cfg(c_bindings)]
221 impl<T: Score> Writeable for MultiThreadedLockableScore<T> {
222         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
223                 self.lock().write(writer)
224         }
225 }
226
227 #[cfg(c_bindings)]
228 impl<'a, T: 'a + Score> WriteableScore<'a> for MultiThreadedLockableScore<T> {}
229
230 #[cfg(c_bindings)]
231 impl<T: Score> MultiThreadedLockableScore<T> {
232         /// Creates a new [`MultiThreadedLockableScore`] given an underlying [`Score`].
233         pub fn new(score: T) -> Self {
234                 MultiThreadedLockableScore { score: Mutex::new(score) }
235         }
236 }
237
238 #[cfg(c_bindings)]
239 /// A locked `MultiThreadedLockableScore`.
240 pub struct MultiThreadedScoreLock<'a, T: Score>(MutexGuard<'a, T>);
241
242 #[cfg(c_bindings)]
243 impl<'a, T: 'a + Score> Writeable for MultiThreadedScoreLock<'a, T> {
244         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
245                 self.0.write(writer)
246         }
247 }
248
249 #[cfg(c_bindings)]
250 impl<'a, T: 'a + Score> DerefMut for MultiThreadedScoreLock<'a, T> {
251     fn deref_mut(&mut self) -> &mut Self::Target {
252         self.0.deref_mut()
253     }
254 }
255
256 #[cfg(c_bindings)]
257 impl<'a, T: 'a + Score> Deref for MultiThreadedScoreLock<'a, T> {
258         type Target = T;
259
260     fn deref(&self) -> &Self::Target {
261         self.0.deref()
262     }
263 }
264
265
266
267 /// Proposed use of a channel passed as a parameter to [`Score::channel_penalty_msat`].
268 #[derive(Clone, Copy, Debug, PartialEq)]
269 pub struct ChannelUsage {
270         /// The amount to send through the channel, denominated in millisatoshis.
271         pub amount_msat: u64,
272
273         /// Total amount, denominated in millisatoshis, already allocated to send through the channel
274         /// as part of a multi-path payment.
275         pub inflight_htlc_msat: u64,
276
277         /// The effective capacity of the channel.
278         pub effective_capacity: EffectiveCapacity,
279 }
280
281 #[derive(Clone)]
282 /// [`Score`] implementation that uses a fixed penalty.
283 pub struct FixedPenaltyScorer {
284         penalty_msat: u64,
285 }
286
287 impl FixedPenaltyScorer {
288         /// Creates a new scorer using `penalty_msat`.
289         pub fn with_penalty(penalty_msat: u64) -> Self {
290                 Self { penalty_msat }
291         }
292 }
293
294 impl Score for FixedPenaltyScorer {
295         #[cfg(not(c_bindings))]
296         type ScoreParams = ();
297         fn channel_penalty_msat(&self, _: u64, _: &NodeId, _: &NodeId, _: ChannelUsage, _score_params: &ProbabilisticScoringFeeParameters) -> u64 {
298                 self.penalty_msat
299         }
300
301         fn payment_path_failed(&mut self, _path: &Path, _short_channel_id: u64) {}
302
303         fn payment_path_successful(&mut self, _path: &Path) {}
304
305         fn probe_failed(&mut self, _path: &Path, _short_channel_id: u64) {}
306
307         fn probe_successful(&mut self, _path: &Path) {}
308 }
309
310 impl Writeable for FixedPenaltyScorer {
311         #[inline]
312         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
313                 write_tlv_fields!(w, {});
314                 Ok(())
315         }
316 }
317
318 impl ReadableArgs<u64> for FixedPenaltyScorer {
319         #[inline]
320         fn read<R: Read>(r: &mut R, penalty_msat: u64) -> Result<Self, DecodeError> {
321                 read_tlv_fields!(r, {});
322                 Ok(Self { penalty_msat })
323         }
324 }
325
326 #[cfg(not(feature = "no-std"))]
327 /// [`Score`] implementation using channel success probability distributions.
328 ///
329 /// Channels are tracked with upper and lower liquidity bounds - when an HTLC fails at a channel,
330 /// we learn that the upper-bound on the available liquidity is lower than the amount of the HTLC.
331 /// When a payment is forwarded through a channel (but fails later in the route), we learn the
332 /// lower-bound on the channel's available liquidity must be at least the value of the HTLC.
333 ///
334 /// These bounds are then used to determine a success probability using the formula from
335 /// *Optimally Reliable & Cheap Payment Flows on the Lightning Network* by Rene Pickhardt
336 /// and Stefan Richter [[1]] (i.e. `(upper_bound - payment_amount) / (upper_bound - lower_bound)`).
337 ///
338 /// This probability is combined with the [`liquidity_penalty_multiplier_msat`] and
339 /// [`liquidity_penalty_amount_multiplier_msat`] parameters to calculate a concrete penalty in
340 /// milli-satoshis. The penalties, when added across all hops, have the property of being linear in
341 /// terms of the entire path's success probability. This allows the router to directly compare
342 /// penalties for different paths. See the documentation of those parameters for the exact formulas.
343 ///
344 /// The liquidity bounds are decayed by halving them every [`liquidity_offset_half_life`].
345 ///
346 /// Further, we track the history of our upper and lower liquidity bounds for each channel,
347 /// allowing us to assign a second penalty (using [`historical_liquidity_penalty_multiplier_msat`]
348 /// and [`historical_liquidity_penalty_amount_multiplier_msat`]) based on the same probability
349 /// formula, but using the history of a channel rather than our latest estimates for the liquidity
350 /// bounds.
351 ///
352 /// # Note
353 ///
354 /// Mixing the `no-std` feature between serialization and deserialization results in undefined
355 /// behavior.
356 ///
357 /// [1]: https://arxiv.org/abs/2107.05322
358 /// [`liquidity_penalty_multiplier_msat`]: ProbabilisticScoringFeeParameters::liquidity_penalty_multiplier_msat
359 /// [`liquidity_penalty_amount_multiplier_msat`]: ProbabilisticScoringFeeParameters::liquidity_penalty_amount_multiplier_msat
360 /// [`liquidity_offset_half_life`]: ProbabilisticScoringDecayParameters::liquidity_offset_half_life
361 /// [`historical_liquidity_penalty_multiplier_msat`]: ProbabilisticScoringFeeParameters::historical_liquidity_penalty_multiplier_msat
362 /// [`historical_liquidity_penalty_amount_multiplier_msat`]: ProbabilisticScoringFeeParameters::historical_liquidity_penalty_amount_multiplier_msat
363 pub type ProbabilisticScorer<G, L> = ProbabilisticScorerUsingTime::<G, L, crate::util::time::MonotonicTime>;
364
365 #[cfg(feature = "no-std")]
366 /// [`Score`] implementation using channel success probability distributions.
367 ///
368 /// Channels are tracked with upper and lower liquidity bounds - when an HTLC fails at a channel,
369 /// we learn that the upper-bound on the available liquidity is lower than the amount of the HTLC.
370 /// When a payment is forwarded through a channel (but fails later in the route), we learn the
371 /// lower-bound on the channel's available liquidity must be at least the value of the HTLC.
372 ///
373 /// These bounds are then used to determine a success probability using the formula from
374 /// *Optimally Reliable & Cheap Payment Flows on the Lightning Network* by Rene Pickhardt
375 /// and Stefan Richter [[1]] (i.e. `(upper_bound - payment_amount) / (upper_bound - lower_bound)`).
376 ///
377 /// This probability is combined with the [`liquidity_penalty_multiplier_msat`] and
378 /// [`liquidity_penalty_amount_multiplier_msat`] parameters to calculate a concrete penalty in
379 /// milli-satoshis. The penalties, when added across all hops, have the property of being linear in
380 /// terms of the entire path's success probability. This allows the router to directly compare
381 /// penalties for different paths. See the documentation of those parameters for the exact formulas.
382 ///
383 /// The liquidity bounds are decayed by halving them every [`liquidity_offset_half_life`].
384 ///
385 /// Further, we track the history of our upper and lower liquidity bounds for each channel,
386 /// allowing us to assign a second penalty (using [`historical_liquidity_penalty_multiplier_msat`]
387 /// and [`historical_liquidity_penalty_amount_multiplier_msat`]) based on the same probability
388 /// formula, but using the history of a channel rather than our latest estimates for the liquidity
389 /// bounds.
390 ///
391 /// # Note
392 ///
393 /// Mixing the `no-std` feature between serialization and deserialization results in undefined
394 /// behavior.
395 ///
396 /// [1]: https://arxiv.org/abs/2107.05322
397 /// [`liquidity_penalty_multiplier_msat`]: ProbabilisticScoringFeeParameters::liquidity_penalty_multiplier_msat
398 /// [`liquidity_penalty_amount_multiplier_msat`]: ProbabilisticScoringFeeParameters::liquidity_penalty_amount_multiplier_msat
399 /// [`liquidity_offset_half_life`]: ProbabilisticScoringDecayParameters::liquidity_offset_half_life
400 /// [`historical_liquidity_penalty_multiplier_msat`]: ProbabilisticScoringFeeParameters::historical_liquidity_penalty_multiplier_msat
401 /// [`historical_liquidity_penalty_amount_multiplier_msat`]: ProbabilisticScoringFeeParameters::historical_liquidity_penalty_amount_multiplier_msat
402 pub type ProbabilisticScorer<G, L> = ProbabilisticScorerUsingTime::<G, L, crate::util::time::Eternity>;
403
404 /// Probabilistic [`Score`] implementation.
405 ///
406 /// This is not exported to bindings users generally all users should use the [`ProbabilisticScorer`] type alias.
407 pub struct ProbabilisticScorerUsingTime<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time>
408 where L::Target: Logger {
409         decay_params: ProbabilisticScoringDecayParameters,
410         network_graph: G,
411         logger: L,
412         // TODO: Remove entries of closed channels.
413         channel_liquidities: HashMap<u64, ChannelLiquidity<T>>,
414 }
415
416 /// Parameters for configuring [`ProbabilisticScorer`].
417 ///
418 /// Used to configure base, liquidity, and amount penalties, the sum of which comprises the channel
419 /// penalty (i.e., the amount in msats willing to be paid to avoid routing through the channel).
420 ///
421 /// The penalty applied to any channel by the [`ProbabilisticScorer`] is the sum of each of the
422 /// parameters here.
423 #[derive(Clone)]
424 pub struct ProbabilisticScoringFeeParameters {
425         /// A fixed penalty in msats to apply to each channel.
426         ///
427         /// Default value: 500 msat
428         pub base_penalty_msat: u64,
429
430         /// A multiplier used with the payment amount to calculate a fixed penalty applied to each
431         /// channel, in excess of the [`base_penalty_msat`].
432         ///
433         /// The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
434         /// fees plus penalty) for large payments. The penalty is computed as the product of this
435         /// multiplier and `2^30`ths of the payment amount.
436         ///
437         /// ie `base_penalty_amount_multiplier_msat * amount_msat / 2^30`
438         ///
439         /// Default value: 8,192 msat
440         ///
441         /// [`base_penalty_msat`]: Self::base_penalty_msat
442         pub base_penalty_amount_multiplier_msat: u64,
443
444         /// A multiplier used in conjunction with the negative `log10` of the channel's success
445         /// probability for a payment, as determined by our latest estimates of the channel's
446         /// liquidity, to determine the liquidity penalty.
447         ///
448         /// The penalty is based in part on the knowledge learned from prior successful and unsuccessful
449         /// payments. This knowledge is decayed over time based on [`liquidity_offset_half_life`]. The
450         /// penalty is effectively limited to `2 * liquidity_penalty_multiplier_msat` (corresponding to
451         /// lower bounding the success probability to `0.01`) when the amount falls within the
452         /// uncertainty bounds of the channel liquidity balance. Amounts above the upper bound will
453         /// result in a `u64::max_value` penalty, however.
454         ///
455         /// `-log10(success_probability) * liquidity_penalty_multiplier_msat`
456         ///
457         /// Default value: 30,000 msat
458         ///
459         /// [`liquidity_offset_half_life`]: ProbabilisticScoringDecayParameters::liquidity_offset_half_life
460         pub liquidity_penalty_multiplier_msat: u64,
461
462         /// A multiplier used in conjunction with a payment amount and the negative `log10` of the
463         /// channel's success probability for the payment, as determined by our latest estimates of the
464         /// channel's liquidity, to determine the amount penalty.
465         ///
466         /// The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
467         /// fees plus penalty) for large payments. The penalty is computed as the product of this
468         /// multiplier and `2^20`ths of the payment amount, weighted by the negative `log10` of the
469         /// success probability.
470         ///
471         /// `-log10(success_probability) * liquidity_penalty_amount_multiplier_msat * amount_msat / 2^20`
472         ///
473         /// In practice, this means for 0.1 success probability (`-log10(0.1) == 1`) each `2^20`th of
474         /// the amount will result in a penalty of the multiplier. And, as the success probability
475         /// decreases, the negative `log10` weighting will increase dramatically. For higher success
476         /// probabilities, the multiplier will have a decreasing effect as the negative `log10` will
477         /// fall below `1`.
478         ///
479         /// Default value: 192 msat
480         pub liquidity_penalty_amount_multiplier_msat: u64,
481
482         /// A multiplier used in conjunction with the negative `log10` of the channel's success
483         /// probability for the payment, as determined based on the history of our estimates of the
484         /// channel's available liquidity, to determine a penalty.
485         ///
486         /// This penalty is similar to [`liquidity_penalty_multiplier_msat`], however, instead of using
487         /// only our latest estimate for the current liquidity available in the channel, it estimates
488         /// success probability based on the estimated liquidity available in the channel through
489         /// history. Specifically, every time we update our liquidity bounds on a given channel, we
490         /// track which of several buckets those bounds fall into, exponentially decaying the
491         /// probability of each bucket as new samples are added.
492         ///
493         /// Default value: 10,000 msat
494         ///
495         /// [`liquidity_penalty_multiplier_msat`]: Self::liquidity_penalty_multiplier_msat
496         pub historical_liquidity_penalty_multiplier_msat: u64,
497
498         /// A multiplier used in conjunction with the payment amount and the negative `log10` of the
499         /// channel's success probability for the payment, as determined based on the history of our
500         /// estimates of the channel's available liquidity, to determine a penalty.
501         ///
502         /// The purpose of the amount penalty is to avoid having fees dominate the channel cost for
503         /// large payments. The penalty is computed as the product of this multiplier and the `2^20`ths
504         /// of the payment amount, weighted by the negative `log10` of the success probability.
505         ///
506         /// This penalty is similar to [`liquidity_penalty_amount_multiplier_msat`], however, instead
507         /// of using only our latest estimate for the current liquidity available in the channel, it
508         /// estimates success probability based on the estimated liquidity available in the channel
509         /// through history. Specifically, every time we update our liquidity bounds on a given
510         /// channel, we track which of several buckets those bounds fall into, exponentially decaying
511         /// the probability of each bucket as new samples are added.
512         ///
513         /// Default value: 64 msat
514         ///
515         /// [`liquidity_penalty_amount_multiplier_msat`]: Self::liquidity_penalty_amount_multiplier_msat
516         pub historical_liquidity_penalty_amount_multiplier_msat: u64,
517
518         /// Manual penalties used for the given nodes. Allows to set a particular penalty for a given
519         /// node. Note that a manual penalty of `u64::max_value()` means the node would not ever be
520         /// considered during path finding.
521         ///
522         /// This is not exported to bindings users
523         pub manual_node_penalties: HashMap<NodeId, u64>,
524
525         /// This penalty is applied when `htlc_maximum_msat` is equal to or larger than half of the
526         /// channel's capacity, (ie. htlc_maximum_msat â‰¥ 0.5 * channel_capacity) which makes us
527         /// prefer nodes with a smaller `htlc_maximum_msat`. We treat such nodes preferentially
528         /// as this makes balance discovery attacks harder to execute, thereby creating an incentive
529         /// to restrict `htlc_maximum_msat` and improve privacy.
530         ///
531         /// Default value: 250 msat
532         pub anti_probing_penalty_msat: u64,
533
534         /// This penalty is applied when the amount we're attempting to send over a channel exceeds our
535         /// current estimate of the channel's available liquidity.
536         ///
537         /// Note that in this case all other penalties, including the
538         /// [`liquidity_penalty_multiplier_msat`] and [`liquidity_penalty_amount_multiplier_msat`]-based
539         /// penalties, as well as the [`base_penalty_msat`] and the [`anti_probing_penalty_msat`], if
540         /// applicable, are still included in the overall penalty.
541         ///
542         /// If you wish to avoid creating paths with such channels entirely, setting this to a value of
543         /// `u64::max_value()` will guarantee that.
544         ///
545         /// Default value: 1_0000_0000_000 msat (1 Bitcoin)
546         ///
547         /// [`liquidity_penalty_multiplier_msat`]: Self::liquidity_penalty_multiplier_msat
548         /// [`liquidity_penalty_amount_multiplier_msat`]: Self::liquidity_penalty_amount_multiplier_msat
549         /// [`base_penalty_msat`]: Self::base_penalty_msat
550         /// [`anti_probing_penalty_msat`]: Self::anti_probing_penalty_msat
551         pub considered_impossible_penalty_msat: u64,
552 }
553
554 impl Default for ProbabilisticScoringFeeParameters {
555         fn default() -> Self {
556                 Self {
557                         base_penalty_msat: 500,
558                         base_penalty_amount_multiplier_msat: 8192,
559                         liquidity_penalty_multiplier_msat: 30_000,
560                         liquidity_penalty_amount_multiplier_msat: 192,
561                         manual_node_penalties: HashMap::new(),
562                         anti_probing_penalty_msat: 250,
563                         considered_impossible_penalty_msat: 1_0000_0000_000,
564                         historical_liquidity_penalty_multiplier_msat: 10_000,
565                         historical_liquidity_penalty_amount_multiplier_msat: 64,
566                 }
567         }
568 }
569
570 impl ProbabilisticScoringFeeParameters {
571         /// Marks the node with the given `node_id` as banned,
572         /// i.e it will be avoided during path finding.
573         pub fn add_banned(&mut self, node_id: &NodeId) {
574                 self.manual_node_penalties.insert(*node_id, u64::max_value());
575         }
576
577         /// Marks all nodes in the given list as banned, i.e.,
578         /// they will be avoided during path finding.
579         pub fn add_banned_from_list(&mut self, node_ids: Vec<NodeId>) {
580                 for id in node_ids {
581                         self.manual_node_penalties.insert(id, u64::max_value());
582                 }
583         }
584
585         /// Removes the node with the given `node_id` from the list of nodes to avoid.
586         pub fn remove_banned(&mut self, node_id: &NodeId) {
587                 self.manual_node_penalties.remove(node_id);
588         }
589
590         /// Sets a manual penalty for the given node.
591         pub fn set_manual_penalty(&mut self, node_id: &NodeId, penalty: u64) {
592                 self.manual_node_penalties.insert(*node_id, penalty);
593         }
594
595         /// Removes the node with the given `node_id` from the list of manual penalties.
596         pub fn remove_manual_penalty(&mut self, node_id: &NodeId) {
597                 self.manual_node_penalties.remove(node_id);
598         }
599
600         /// Clears the list of manual penalties that are applied during path finding.
601         pub fn clear_manual_penalties(&mut self) {
602                 self.manual_node_penalties = HashMap::new();
603         }
604 }
605
606 #[cfg(test)]
607 impl ProbabilisticScoringFeeParameters {
608         fn zero_penalty() -> Self {
609                 Self {
610                         base_penalty_msat: 0,
611                         base_penalty_amount_multiplier_msat: 0,
612                         liquidity_penalty_multiplier_msat: 0,
613                         liquidity_penalty_amount_multiplier_msat: 0,
614                         historical_liquidity_penalty_multiplier_msat: 0,
615                         historical_liquidity_penalty_amount_multiplier_msat: 0,
616                         manual_node_penalties: HashMap::new(),
617                         anti_probing_penalty_msat: 0,
618                         considered_impossible_penalty_msat: 0,
619                 }
620         }
621 }
622
623 /// Parameters for configuring [`ProbabilisticScorer`].
624 ///
625 /// Used to configure decay parameters that are static throughout the lifetime of the scorer.
626 /// these decay parameters affect the score of the channel penalty and are not changed on a
627 /// per-route penalty cost call.
628 #[derive(Copy, Clone)]
629 pub struct ProbabilisticScoringDecayParameters {
630         /// If we aren't learning any new datapoints for a channel, the historical liquidity bounds
631         /// tracking can simply live on with increasingly stale data. Instead, when a channel has not
632         /// seen a liquidity estimate update for this amount of time, the historical datapoints are
633         /// decayed by half.
634         /// For an example of historical_no_updates_half_life being used see [`historical_estimated_channel_liquidity_probabilities`]
635         ///
636         /// Note that after 16 or more half lives all historical data will be completely gone.
637         ///
638         /// Default value: 14 days
639         ///
640         /// [`historical_estimated_channel_liquidity_probabilities`]: ProbabilisticScorerUsingTime::historical_estimated_channel_liquidity_probabilities
641         pub historical_no_updates_half_life: Duration,
642
643         /// Whenever this amount of time elapses since the last update to a channel's liquidity bounds,
644         /// the distance from the bounds to "zero" is cut in half. In other words, the lower-bound on
645         /// the available liquidity is halved and the upper-bound moves half-way to the channel's total
646         /// capacity.
647         ///
648         /// Because halving the liquidity bounds grows the uncertainty on the channel's liquidity,
649         /// the penalty for an amount within the new bounds may change. See the [`ProbabilisticScorer`]
650         /// struct documentation for more info on the way the liquidity bounds are used.
651         ///
652         /// For example, if the channel's capacity is 1 million sats, and the current upper and lower
653         /// liquidity bounds are 200,000 sats and 600,000 sats, after this amount of time the upper
654         /// and lower liquidity bounds will be decayed to 100,000 and 800,000 sats.
655         ///
656         /// Default value: 6 hours
657         ///
658         /// # Note
659         ///
660         /// When built with the `no-std` feature, time will never elapse. Therefore, the channel
661         /// liquidity knowledge will never decay except when the bounds cross.
662         pub liquidity_offset_half_life: Duration,
663 }
664
665 impl Default for ProbabilisticScoringDecayParameters {
666         fn default() -> Self {
667                 Self {
668                         liquidity_offset_half_life: Duration::from_secs(6 * 60 * 60),
669                         historical_no_updates_half_life: Duration::from_secs(60 * 60 * 24 * 14),
670                 }
671         }
672 }
673
674 #[cfg(test)]
675 impl ProbabilisticScoringDecayParameters {
676         fn zero_penalty() -> Self {
677                 Self {
678                         liquidity_offset_half_life: Duration::from_secs(6 * 60 * 60),
679                         historical_no_updates_half_life: Duration::from_secs(60 * 60 * 24 * 14),
680                 }
681         }
682 }
683
684 /// Tracks the historical state of a distribution as a weighted average of how much time was spent
685 /// in each of 8 buckets.
686 #[derive(Clone, Copy)]
687 struct HistoricalBucketRangeTracker {
688         buckets: [u16; 8],
689 }
690
691 impl HistoricalBucketRangeTracker {
692         fn new() -> Self { Self { buckets: [0; 8] } }
693         fn track_datapoint(&mut self, liquidity_offset_msat: u64, capacity_msat: u64) {
694                 // We have 8 leaky buckets for min and max liquidity. Each bucket tracks the amount of time
695                 // we spend in each bucket as a 16-bit fixed-point number with a 5 bit fractional part.
696                 //
697                 // Each time we update our liquidity estimate, we add 32 (1.0 in our fixed-point system) to
698                 // the buckets for the current min and max liquidity offset positions.
699                 //
700                 // We then decay each bucket by multiplying by 2047/2048 (avoiding dividing by a
701                 // non-power-of-two). This ensures we can't actually overflow the u16 - when we get to
702                 // 63,457 adding 32 and decaying by 2047/2048 leaves us back at 63,457.
703                 //
704                 // In total, this allows us to track data for the last 8,000 or so payments across a given
705                 // channel.
706                 //
707                 // These constants are a balance - we try to fit in 2 bytes per bucket to reduce overhead,
708                 // and need to balance having more bits in the decimal part (to ensure decay isn't too
709                 // non-linear) with having too few bits in the mantissa, causing us to not store very many
710                 // datapoints.
711                 //
712                 // The constants were picked experimentally, selecting a decay amount that restricts us
713                 // from overflowing buckets without having to cap them manually.
714
715                 // Ensure the bucket index is in the range [0, 7], even if the liquidity offset is zero or
716                 // the channel's capacity, though the second should generally never happen.
717                 debug_assert!(liquidity_offset_msat <= capacity_msat);
718                 let bucket_idx: u8 = (liquidity_offset_msat * 8 / capacity_msat.saturating_add(1))
719                         .try_into().unwrap_or(32); // 32 is bogus for 8 buckets, and will be ignored
720                 debug_assert!(bucket_idx < 8);
721                 if bucket_idx < 8 {
722                         for e in self.buckets.iter_mut() {
723                                 *e = ((*e as u32) * 2047 / 2048) as u16;
724                         }
725                         self.buckets[bucket_idx as usize] = self.buckets[bucket_idx as usize].saturating_add(32);
726                 }
727         }
728         /// Decay all buckets by the given number of half-lives. Used to more aggressively remove old
729         /// datapoints as we receive newer information.
730         fn time_decay_data(&mut self, half_lives: u32) {
731                 for e in self.buckets.iter_mut() {
732                         *e = e.checked_shr(half_lives).unwrap_or(0);
733                 }
734         }
735 }
736
737 impl_writeable_tlv_based!(HistoricalBucketRangeTracker, { (0, buckets, required) });
738
739 struct HistoricalMinMaxBuckets<'a> {
740         min_liquidity_offset_history: &'a HistoricalBucketRangeTracker,
741         max_liquidity_offset_history: &'a HistoricalBucketRangeTracker,
742 }
743
744 impl HistoricalMinMaxBuckets<'_> {
745         #[inline]
746         fn get_decayed_buckets<T: Time>(&self, now: T, last_updated: T, half_life: Duration)
747         -> ([u16; 8], [u16; 8], u32) {
748                 let required_decays = now.duration_since(last_updated).as_secs()
749                         .checked_div(half_life.as_secs())
750                         .map_or(u32::max_value(), |decays| cmp::min(decays, u32::max_value() as u64) as u32);
751                 let mut min_buckets = *self.min_liquidity_offset_history;
752                 min_buckets.time_decay_data(required_decays);
753                 let mut max_buckets = *self.max_liquidity_offset_history;
754                 max_buckets.time_decay_data(required_decays);
755                 (min_buckets.buckets, max_buckets.buckets, required_decays)
756         }
757
758         #[inline]
759         fn calculate_success_probability_times_billion<T: Time>(
760                 &self, now: T, last_updated: T, half_life: Duration, payment_amt_64th_bucket: u8)
761         -> Option<u64> {
762                 // If historical penalties are enabled, calculate the penalty by walking the set of
763                 // historical liquidity bucket (min, max) combinations (where min_idx < max_idx) and, for
764                 // each, calculate the probability of success given our payment amount, then total the
765                 // weighted average probability of success.
766                 //
767                 // We use a sliding scale to decide which point within a given bucket will be compared to
768                 // the amount being sent - for lower-bounds, the amount being sent is compared to the lower
769                 // edge of the first bucket (i.e. zero), but compared to the upper 7/8ths of the last
770                 // bucket (i.e. 9 times the index, or 63), with each bucket in between increasing the
771                 // comparison point by 1/64th. For upper-bounds, the same applies, however with an offset
772                 // of 1/64th (i.e. starting at one and ending at 64). This avoids failing to assign
773                 // penalties to channels at the edges.
774                 //
775                 // If we used the bottom edge of buckets, we'd end up never assigning any penalty at all to
776                 // such a channel when sending less than ~0.19% of the channel's capacity (e.g. ~200k sats
777                 // for a 1 BTC channel!).
778                 //
779                 // If we used the middle of each bucket we'd never assign any penalty at all when sending
780                 // less than 1/16th of a channel's capacity, or 1/8th if we used the top of the bucket.
781                 let mut total_valid_points_tracked = 0;
782
783                 // Check if all our buckets are zero, once decayed and treat it as if we had no data. We
784                 // don't actually use the decayed buckets, though, as that would lose precision.
785                 let (decayed_min_buckets, decayed_max_buckets, required_decays) =
786                         self.get_decayed_buckets(now, last_updated, half_life);
787                 if decayed_min_buckets.iter().all(|v| *v == 0) || decayed_max_buckets.iter().all(|v| *v == 0) {
788                         return None;
789                 }
790
791                 for (min_idx, min_bucket) in self.min_liquidity_offset_history.buckets.iter().enumerate() {
792                         for max_bucket in self.max_liquidity_offset_history.buckets.iter().take(8 - min_idx) {
793                                 total_valid_points_tracked += (*min_bucket as u64) * (*max_bucket as u64);
794                         }
795                 }
796                 // If the total valid points is smaller than 1.0 (i.e. 32 in our fixed-point scheme), treat
797                 // it as if we were fully decayed.
798                 if total_valid_points_tracked.checked_shr(required_decays).unwrap_or(0) < 32*32 {
799                         return None;
800                 }
801
802                 let mut cumulative_success_prob_times_billion = 0;
803                 for (min_idx, min_bucket) in self.min_liquidity_offset_history.buckets.iter().enumerate() {
804                         for (max_idx, max_bucket) in self.max_liquidity_offset_history.buckets.iter().enumerate().take(8 - min_idx) {
805                                 let bucket_prob_times_million = (*min_bucket as u64) * (*max_bucket as u64)
806                                         * 1024 * 1024 / total_valid_points_tracked;
807                                 let min_64th_bucket = min_idx as u8 * 9;
808                                 let max_64th_bucket = (7 - max_idx as u8) * 9 + 1;
809                                 if payment_amt_64th_bucket > max_64th_bucket {
810                                         // Success probability 0, the payment amount is above the max liquidity
811                                 } else if payment_amt_64th_bucket <= min_64th_bucket {
812                                         cumulative_success_prob_times_billion += bucket_prob_times_million * 1024;
813                                 } else {
814                                         cumulative_success_prob_times_billion += bucket_prob_times_million *
815                                                 ((max_64th_bucket - payment_amt_64th_bucket) as u64) * 1024 /
816                                                 ((max_64th_bucket - min_64th_bucket) as u64);
817                                 }
818                         }
819                 }
820
821                 Some(cumulative_success_prob_times_billion)
822         }
823 }
824
825 /// Accounting for channel liquidity balance uncertainty.
826 ///
827 /// Direction is defined in terms of [`NodeId`] partial ordering, where the source node is the
828 /// first node in the ordering of the channel's counterparties. Thus, swapping the two liquidity
829 /// offset fields gives the opposite direction.
830 struct ChannelLiquidity<T: Time> {
831         /// Lower channel liquidity bound in terms of an offset from zero.
832         min_liquidity_offset_msat: u64,
833
834         /// Upper channel liquidity bound in terms of an offset from the effective capacity.
835         max_liquidity_offset_msat: u64,
836
837         /// Time when the liquidity bounds were last modified.
838         last_updated: T,
839
840         min_liquidity_offset_history: HistoricalBucketRangeTracker,
841         max_liquidity_offset_history: HistoricalBucketRangeTracker,
842 }
843
844 /// A snapshot of [`ChannelLiquidity`] in one direction assuming a certain channel capacity and
845 /// decayed with a given half life.
846 struct DirectedChannelLiquidity<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>, T: Time, U: Deref<Target = T>> {
847         min_liquidity_offset_msat: L,
848         max_liquidity_offset_msat: L,
849         min_liquidity_offset_history: BRT,
850         max_liquidity_offset_history: BRT,
851         inflight_htlc_msat: u64,
852         capacity_msat: u64,
853         last_updated: U,
854         now: T,
855         decay_params: ProbabilisticScoringDecayParameters,
856 }
857
858 impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ProbabilisticScorerUsingTime<G, L, T> where L::Target: Logger {
859         /// Creates a new scorer using the given scoring parameters for sending payments from a node
860         /// through a network graph.
861         pub fn new(decay_params: ProbabilisticScoringDecayParameters, network_graph: G, logger: L) -> Self {
862                 Self {
863                         decay_params,
864                         network_graph,
865                         logger,
866                         channel_liquidities: HashMap::new(),
867                 }
868         }
869
870         #[cfg(test)]
871         fn with_channel(mut self, short_channel_id: u64, liquidity: ChannelLiquidity<T>) -> Self {
872                 assert!(self.channel_liquidities.insert(short_channel_id, liquidity).is_none());
873                 self
874         }
875
876         /// Dump the contents of this scorer into the configured logger.
877         ///
878         /// Note that this writes roughly one line per channel for which we have a liquidity estimate,
879         /// which may be a substantial amount of log output.
880         pub fn debug_log_liquidity_stats(&self) {
881                 let now = T::now();
882
883                 let graph = self.network_graph.read_only();
884                 for (scid, liq) in self.channel_liquidities.iter() {
885                         if let Some(chan_debug) = graph.channels().get(scid) {
886                                 let log_direction = |source, target| {
887                                         if let Some((directed_info, _)) = chan_debug.as_directed_to(target) {
888                                                 let amt = directed_info.effective_capacity().as_msat();
889                                                 let dir_liq = liq.as_directed(source, target, 0, amt, self.decay_params);
890
891                                                 let buckets = HistoricalMinMaxBuckets {
892                                                         min_liquidity_offset_history: &dir_liq.min_liquidity_offset_history,
893                                                         max_liquidity_offset_history: &dir_liq.max_liquidity_offset_history,
894                                                 };
895                                                 let (min_buckets, max_buckets, _) = buckets.get_decayed_buckets(now,
896                                                         *dir_liq.last_updated, self.decay_params.historical_no_updates_half_life);
897
898                                                 log_debug!(self.logger, core::concat!(
899                                                         "Liquidity from {} to {} via {} is in the range ({}, {}).\n",
900                                                         "\tHistorical min liquidity octile relative probabilities: {} {} {} {} {} {} {} {}\n",
901                                                         "\tHistorical max liquidity octile relative probabilities: {} {} {} {} {} {} {} {}"),
902                                                         source, target, scid, dir_liq.min_liquidity_msat(), dir_liq.max_liquidity_msat(),
903                                                         min_buckets[0], min_buckets[1], min_buckets[2], min_buckets[3],
904                                                         min_buckets[4], min_buckets[5], min_buckets[6], min_buckets[7],
905                                                         // Note that the liquidity buckets are an offset from the edge, so we
906                                                         // inverse the max order to get the probabilities from zero.
907                                                         max_buckets[7], max_buckets[6], max_buckets[5], max_buckets[4],
908                                                         max_buckets[3], max_buckets[2], max_buckets[1], max_buckets[0]);
909                                         } else {
910                                                 log_debug!(self.logger, "No amount known for SCID {} from {:?} to {:?}", scid, source, target);
911                                         }
912                                 };
913
914                                 log_direction(&chan_debug.node_one, &chan_debug.node_two);
915                                 log_direction(&chan_debug.node_two, &chan_debug.node_one);
916                         } else {
917                                 log_debug!(self.logger, "No network graph entry for SCID {}", scid);
918                         }
919                 }
920         }
921
922         /// Query the estimated minimum and maximum liquidity available for sending a payment over the
923         /// channel with `scid` towards the given `target` node.
924         pub fn estimated_channel_liquidity_range(&self, scid: u64, target: &NodeId) -> Option<(u64, u64)> {
925                 let graph = self.network_graph.read_only();
926
927                 if let Some(chan) = graph.channels().get(&scid) {
928                         if let Some(liq) = self.channel_liquidities.get(&scid) {
929                                 if let Some((directed_info, source)) = chan.as_directed_to(target) {
930                                         let amt = directed_info.effective_capacity().as_msat();
931                                         let dir_liq = liq.as_directed(source, target, 0, amt, self.decay_params);
932                                         return Some((dir_liq.min_liquidity_msat(), dir_liq.max_liquidity_msat()));
933                                 }
934                         }
935                 }
936                 None
937         }
938
939         /// Query the historical estimated minimum and maximum liquidity available for sending a
940         /// payment over the channel with `scid` towards the given `target` node.
941         ///
942         /// Returns two sets of 8 buckets. The first set describes the octiles for lower-bound
943         /// liquidity estimates, the second set describes the octiles for upper-bound liquidity
944         /// estimates. Each bucket describes the relative frequency at which we've seen a liquidity
945         /// bound in the octile relative to the channel's total capacity, on an arbitrary scale.
946         /// Because the values are slowly decayed, more recent data points are weighted more heavily
947         /// than older datapoints.
948         ///
949         /// When scoring, the estimated probability that an upper-/lower-bound lies in a given octile
950         /// relative to the channel's total capacity is calculated by dividing that bucket's value with
951         /// the total of all buckets for the given bound.
952         ///
953         /// For example, a value of `[0, 0, 0, 0, 0, 0, 32]` indicates that we believe the probability
954         /// of a bound being in the top octile to be 100%, and have never (recently) seen it in any
955         /// other octiles. A value of `[31, 0, 0, 0, 0, 0, 0, 32]` indicates we've seen the bound being
956         /// both in the top and bottom octile, and roughly with similar (recent) frequency.
957         ///
958         /// Because the datapoints are decayed slowly over time, values will eventually return to
959         /// `Some(([0; 8], [0; 8]))`.
960         pub fn historical_estimated_channel_liquidity_probabilities(&self, scid: u64, target: &NodeId)
961         -> Option<([u16; 8], [u16; 8])> {
962                 let graph = self.network_graph.read_only();
963
964                 if let Some(chan) = graph.channels().get(&scid) {
965                         if let Some(liq) = self.channel_liquidities.get(&scid) {
966                                 if let Some((directed_info, source)) = chan.as_directed_to(target) {
967                                         let amt = directed_info.effective_capacity().as_msat();
968                                         let dir_liq = liq.as_directed(source, target, 0, amt, self.decay_params);
969
970                                         let buckets = HistoricalMinMaxBuckets {
971                                                 min_liquidity_offset_history: &dir_liq.min_liquidity_offset_history,
972                                                 max_liquidity_offset_history: &dir_liq.max_liquidity_offset_history,
973                                         };
974                                         let (min_buckets, mut max_buckets, _) = buckets.get_decayed_buckets(T::now(),
975                                                 *dir_liq.last_updated, self.decay_params.historical_no_updates_half_life);
976                                         // Note that the liquidity buckets are an offset from the edge, so we inverse
977                                         // the max order to get the probabilities from zero.
978                                         max_buckets.reverse();
979                                         return Some((min_buckets, max_buckets));
980                                 }
981                         }
982                 }
983                 None
984         }
985 }
986
987 impl<T: Time> ChannelLiquidity<T> {
988         #[inline]
989         fn new() -> Self {
990                 Self {
991                         min_liquidity_offset_msat: 0,
992                         max_liquidity_offset_msat: 0,
993                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
994                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
995                         last_updated: T::now(),
996                 }
997         }
998
999         /// Returns a view of the channel liquidity directed from `source` to `target` assuming
1000         /// `capacity_msat`.
1001         fn as_directed(
1002                 &self, source: &NodeId, target: &NodeId, inflight_htlc_msat: u64, capacity_msat: u64, decay_params: ProbabilisticScoringDecayParameters
1003         ) -> DirectedChannelLiquidity<&u64, &HistoricalBucketRangeTracker, T, &T> {
1004                 let (min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
1005                         if source < target {
1006                                 (&self.min_liquidity_offset_msat, &self.max_liquidity_offset_msat,
1007                                         &self.min_liquidity_offset_history, &self.max_liquidity_offset_history)
1008                         } else {
1009                                 (&self.max_liquidity_offset_msat, &self.min_liquidity_offset_msat,
1010                                         &self.max_liquidity_offset_history, &self.min_liquidity_offset_history)
1011                         };
1012
1013                 DirectedChannelLiquidity {
1014                         min_liquidity_offset_msat,
1015                         max_liquidity_offset_msat,
1016                         min_liquidity_offset_history,
1017                         max_liquidity_offset_history,
1018                         inflight_htlc_msat,
1019                         capacity_msat,
1020                         last_updated: &self.last_updated,
1021                         now: T::now(),
1022                         decay_params: decay_params,
1023                 }
1024         }
1025
1026         /// Returns a mutable view of the channel liquidity directed from `source` to `target` assuming
1027         /// `capacity_msat`.
1028         fn as_directed_mut(
1029                 &mut self, source: &NodeId, target: &NodeId, inflight_htlc_msat: u64, capacity_msat: u64, decay_params: ProbabilisticScoringDecayParameters
1030         ) -> DirectedChannelLiquidity<&mut u64, &mut HistoricalBucketRangeTracker, T, &mut T> {
1031                 let (min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
1032                         if source < target {
1033                                 (&mut self.min_liquidity_offset_msat, &mut self.max_liquidity_offset_msat,
1034                                         &mut self.min_liquidity_offset_history, &mut self.max_liquidity_offset_history)
1035                         } else {
1036                                 (&mut self.max_liquidity_offset_msat, &mut self.min_liquidity_offset_msat,
1037                                         &mut self.max_liquidity_offset_history, &mut self.min_liquidity_offset_history)
1038                         };
1039
1040                 DirectedChannelLiquidity {
1041                         min_liquidity_offset_msat,
1042                         max_liquidity_offset_msat,
1043                         min_liquidity_offset_history,
1044                         max_liquidity_offset_history,
1045                         inflight_htlc_msat,
1046                         capacity_msat,
1047                         last_updated: &mut self.last_updated,
1048                         now: T::now(),
1049                         decay_params: decay_params,
1050                 }
1051         }
1052 }
1053
1054 /// Bounds `-log10` to avoid excessive liquidity penalties for payments with low success
1055 /// probabilities.
1056 const NEGATIVE_LOG10_UPPER_BOUND: u64 = 2;
1057
1058 /// The rough cutoff at which our precision falls off and we should stop bothering to try to log a
1059 /// ratio, as X in 1/X.
1060 const PRECISION_LOWER_BOUND_DENOMINATOR: u64 = approx::LOWER_BITS_BOUND;
1061
1062 /// The divisor used when computing the amount penalty.
1063 const AMOUNT_PENALTY_DIVISOR: u64 = 1 << 20;
1064 const BASE_AMOUNT_PENALTY_DIVISOR: u64 = 1 << 30;
1065
1066 impl<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>, T: Time, U: Deref<Target = T>> DirectedChannelLiquidity< L, BRT, T, U> {
1067         /// Returns a liquidity penalty for routing the given HTLC `amount_msat` through the channel in
1068         /// this direction.
1069         fn penalty_msat(&self, amount_msat: u64, score_params: &ProbabilisticScoringFeeParameters) -> u64 {
1070                 let max_liquidity_msat = self.max_liquidity_msat();
1071                 let min_liquidity_msat = core::cmp::min(self.min_liquidity_msat(), max_liquidity_msat);
1072
1073                 let mut res = if amount_msat <= min_liquidity_msat {
1074                         0
1075                 } else if amount_msat >= max_liquidity_msat {
1076                         // Equivalent to hitting the else clause below with the amount equal to the effective
1077                         // capacity and without any certainty on the liquidity upper bound, plus the
1078                         // impossibility penalty.
1079                         let negative_log10_times_2048 = NEGATIVE_LOG10_UPPER_BOUND * 2048;
1080                         Self::combined_penalty_msat(amount_msat, negative_log10_times_2048,
1081                                         score_params.liquidity_penalty_multiplier_msat,
1082                                         score_params.liquidity_penalty_amount_multiplier_msat)
1083                                 .saturating_add(score_params.considered_impossible_penalty_msat)
1084                 } else {
1085                         let numerator = (max_liquidity_msat - amount_msat).saturating_add(1);
1086                         let denominator = (max_liquidity_msat - min_liquidity_msat).saturating_add(1);
1087                         if amount_msat - min_liquidity_msat < denominator / PRECISION_LOWER_BOUND_DENOMINATOR {
1088                                 // If the failure probability is < 1.5625% (as 1 - numerator/denominator < 1/64),
1089                                 // don't bother trying to use the log approximation as it gets too noisy to be
1090                                 // particularly helpful, instead just round down to 0.
1091                                 0
1092                         } else {
1093                                 let negative_log10_times_2048 =
1094                                         approx::negative_log10_times_2048(numerator, denominator);
1095                                 Self::combined_penalty_msat(amount_msat, negative_log10_times_2048,
1096                                         score_params.liquidity_penalty_multiplier_msat,
1097                                         score_params.liquidity_penalty_amount_multiplier_msat)
1098                         }
1099                 };
1100
1101                 if score_params.historical_liquidity_penalty_multiplier_msat != 0 ||
1102                    score_params.historical_liquidity_penalty_amount_multiplier_msat != 0 {
1103                         let payment_amt_64th_bucket = if amount_msat < u64::max_value() / 64 {
1104                                 amount_msat * 64 / self.capacity_msat.saturating_add(1)
1105                         } else {
1106                                 // Only use 128-bit arithmetic when multiplication will overflow to avoid 128-bit
1107                                 // division. This branch should only be hit in fuzz testing since the amount would
1108                                 // need to be over 2.88 million BTC in practice.
1109                                 ((amount_msat as u128) * 64 / (self.capacity_msat as u128).saturating_add(1))
1110                                         .try_into().unwrap_or(65)
1111                         };
1112                         #[cfg(not(fuzzing))]
1113                         debug_assert!(payment_amt_64th_bucket <= 64);
1114                         if payment_amt_64th_bucket > 64 { return res; }
1115
1116                         let buckets = HistoricalMinMaxBuckets {
1117                                 min_liquidity_offset_history: &self.min_liquidity_offset_history,
1118                                 max_liquidity_offset_history: &self.max_liquidity_offset_history,
1119                         };
1120                         if let Some(cumulative_success_prob_times_billion) = buckets
1121                                 .calculate_success_probability_times_billion(self.now, *self.last_updated,
1122                                         self.decay_params.historical_no_updates_half_life, payment_amt_64th_bucket as u8)
1123                         {
1124                                 let historical_negative_log10_times_2048 = approx::negative_log10_times_2048(cumulative_success_prob_times_billion + 1, 1024 * 1024 * 1024);
1125                                 res = res.saturating_add(Self::combined_penalty_msat(amount_msat,
1126                                         historical_negative_log10_times_2048, score_params.historical_liquidity_penalty_multiplier_msat,
1127                                         score_params.historical_liquidity_penalty_amount_multiplier_msat));
1128                         } else {
1129                                 // If we don't have any valid points (or, once decayed, we have less than a full
1130                                 // point), redo the non-historical calculation with no liquidity bounds tracked and
1131                                 // the historical penalty multipliers.
1132                                 let available_capacity = self.available_capacity();
1133                                 let numerator = available_capacity.saturating_sub(amount_msat).saturating_add(1);
1134                                 let denominator = available_capacity.saturating_add(1);
1135                                 let negative_log10_times_2048 =
1136                                         approx::negative_log10_times_2048(numerator, denominator);
1137                                 res = res.saturating_add(Self::combined_penalty_msat(amount_msat, negative_log10_times_2048,
1138                                         score_params.historical_liquidity_penalty_multiplier_msat,
1139                                         score_params.historical_liquidity_penalty_amount_multiplier_msat));
1140                         }
1141                 }
1142
1143                 res
1144         }
1145
1146         /// Computes the liquidity penalty from the penalty multipliers.
1147         #[inline(always)]
1148         fn combined_penalty_msat(amount_msat: u64, negative_log10_times_2048: u64,
1149                 liquidity_penalty_multiplier_msat: u64, liquidity_penalty_amount_multiplier_msat: u64,
1150         ) -> u64 {
1151                 let liquidity_penalty_msat = {
1152                         // Upper bound the liquidity penalty to ensure some channel is selected.
1153                         let multiplier_msat = liquidity_penalty_multiplier_msat;
1154                         let max_penalty_msat = multiplier_msat.saturating_mul(NEGATIVE_LOG10_UPPER_BOUND);
1155                         (negative_log10_times_2048.saturating_mul(multiplier_msat) / 2048).min(max_penalty_msat)
1156                 };
1157                 let amount_penalty_msat = negative_log10_times_2048
1158                         .saturating_mul(liquidity_penalty_amount_multiplier_msat)
1159                         .saturating_mul(amount_msat) / 2048 / AMOUNT_PENALTY_DIVISOR;
1160
1161                 liquidity_penalty_msat.saturating_add(amount_penalty_msat)
1162         }
1163
1164         /// Returns the lower bound of the channel liquidity balance in this direction.
1165         fn min_liquidity_msat(&self) -> u64 {
1166                 self.decayed_offset_msat(*self.min_liquidity_offset_msat)
1167         }
1168
1169         /// Returns the upper bound of the channel liquidity balance in this direction.
1170         fn max_liquidity_msat(&self) -> u64 {
1171                 self.available_capacity()
1172                         .saturating_sub(self.decayed_offset_msat(*self.max_liquidity_offset_msat))
1173         }
1174
1175         /// Returns the capacity minus the in-flight HTLCs in this direction.
1176         fn available_capacity(&self) -> u64 {
1177                 self.capacity_msat.saturating_sub(self.inflight_htlc_msat)
1178         }
1179
1180         fn decayed_offset_msat(&self, offset_msat: u64) -> u64 {
1181                 self.now.duration_since(*self.last_updated).as_secs()
1182                         .checked_div(self.decay_params.liquidity_offset_half_life.as_secs())
1183                         .and_then(|decays| offset_msat.checked_shr(decays as u32))
1184                         .unwrap_or(0)
1185         }
1186 }
1187
1188 impl<L: DerefMut<Target = u64>, BRT: DerefMut<Target = HistoricalBucketRangeTracker>, T: Time, U: DerefMut<Target = T>> DirectedChannelLiquidity<L, BRT, T, U> {
1189         /// Adjusts the channel liquidity balance bounds when failing to route `amount_msat`.
1190         fn failed_at_channel<Log: Deref>(&mut self, amount_msat: u64, chan_descr: fmt::Arguments, logger: &Log) where Log::Target: Logger {
1191                 let existing_max_msat = self.max_liquidity_msat();
1192                 if amount_msat < existing_max_msat {
1193                         log_debug!(logger, "Setting max liquidity of {} from {} to {}", chan_descr, existing_max_msat, amount_msat);
1194                         self.set_max_liquidity_msat(amount_msat);
1195                 } else {
1196                         log_trace!(logger, "Max liquidity of {} is {} (already less than or equal to {})",
1197                                 chan_descr, existing_max_msat, amount_msat);
1198                 }
1199                 self.update_history_buckets();
1200         }
1201
1202         /// Adjusts the channel liquidity balance bounds when failing to route `amount_msat` downstream.
1203         fn failed_downstream<Log: Deref>(&mut self, amount_msat: u64, chan_descr: fmt::Arguments, logger: &Log) where Log::Target: Logger {
1204                 let existing_min_msat = self.min_liquidity_msat();
1205                 if amount_msat > existing_min_msat {
1206                         log_debug!(logger, "Setting min liquidity of {} from {} to {}", existing_min_msat, chan_descr, amount_msat);
1207                         self.set_min_liquidity_msat(amount_msat);
1208                 } else {
1209                         log_trace!(logger, "Min liquidity of {} is {} (already greater than or equal to {})",
1210                                 chan_descr, existing_min_msat, amount_msat);
1211                 }
1212                 self.update_history_buckets();
1213         }
1214
1215         /// Adjusts the channel liquidity balance bounds when successfully routing `amount_msat`.
1216         fn successful<Log: Deref>(&mut self, amount_msat: u64, chan_descr: fmt::Arguments, logger: &Log) where Log::Target: Logger {
1217                 let max_liquidity_msat = self.max_liquidity_msat().checked_sub(amount_msat).unwrap_or(0);
1218                 log_debug!(logger, "Subtracting {} from max liquidity of {} (setting it to {})", amount_msat, chan_descr, max_liquidity_msat);
1219                 self.set_max_liquidity_msat(max_liquidity_msat);
1220                 self.update_history_buckets();
1221         }
1222
1223         fn update_history_buckets(&mut self) {
1224                 let half_lives = self.now.duration_since(*self.last_updated).as_secs()
1225                         .checked_div(self.decay_params.historical_no_updates_half_life.as_secs())
1226                         .map(|v| v.try_into().unwrap_or(u32::max_value())).unwrap_or(u32::max_value());
1227                 self.min_liquidity_offset_history.time_decay_data(half_lives);
1228                 self.max_liquidity_offset_history.time_decay_data(half_lives);
1229
1230                 let min_liquidity_offset_msat = self.decayed_offset_msat(*self.min_liquidity_offset_msat);
1231                 self.min_liquidity_offset_history.track_datapoint(
1232                         min_liquidity_offset_msat, self.capacity_msat
1233                 );
1234                 let max_liquidity_offset_msat = self.decayed_offset_msat(*self.max_liquidity_offset_msat);
1235                 self.max_liquidity_offset_history.track_datapoint(
1236                         max_liquidity_offset_msat, self.capacity_msat
1237                 );
1238         }
1239
1240         /// Adjusts the lower bound of the channel liquidity balance in this direction.
1241         fn set_min_liquidity_msat(&mut self, amount_msat: u64) {
1242                 *self.min_liquidity_offset_msat = amount_msat;
1243                 *self.max_liquidity_offset_msat = if amount_msat > self.max_liquidity_msat() {
1244                         0
1245                 } else {
1246                         self.decayed_offset_msat(*self.max_liquidity_offset_msat)
1247                 };
1248                 *self.last_updated = self.now;
1249         }
1250
1251         /// Adjusts the upper bound of the channel liquidity balance in this direction.
1252         fn set_max_liquidity_msat(&mut self, amount_msat: u64) {
1253                 *self.max_liquidity_offset_msat = self.capacity_msat.checked_sub(amount_msat).unwrap_or(0);
1254                 *self.min_liquidity_offset_msat = if amount_msat < self.min_liquidity_msat() {
1255                         0
1256                 } else {
1257                         self.decayed_offset_msat(*self.min_liquidity_offset_msat)
1258                 };
1259                 *self.last_updated = self.now;
1260         }
1261 }
1262
1263 impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> Score for ProbabilisticScorerUsingTime<G, L, T> where L::Target: Logger {
1264         #[cfg(not(c_bindings))]
1265         type ScoreParams = ProbabilisticScoringFeeParameters;
1266         fn channel_penalty_msat(
1267                 &self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &ProbabilisticScoringFeeParameters
1268         ) -> u64 {
1269                 if let Some(penalty) = score_params.manual_node_penalties.get(target) {
1270                         return *penalty;
1271                 }
1272
1273                 let base_penalty_msat = score_params.base_penalty_msat.saturating_add(
1274                         score_params.base_penalty_amount_multiplier_msat
1275                                 .saturating_mul(usage.amount_msat) / BASE_AMOUNT_PENALTY_DIVISOR);
1276
1277                 let mut anti_probing_penalty_msat = 0;
1278                 match usage.effective_capacity {
1279                         EffectiveCapacity::ExactLiquidity { liquidity_msat: amount_msat } |
1280                                 EffectiveCapacity::HintMaxHTLC { amount_msat } =>
1281                         {
1282                                 if usage.amount_msat > amount_msat {
1283                                         return u64::max_value();
1284                                 } else {
1285                                         return base_penalty_msat;
1286                                 }
1287                         },
1288                         EffectiveCapacity::Total { capacity_msat, htlc_maximum_msat } => {
1289                                 if htlc_maximum_msat >= capacity_msat/2 {
1290                                         anti_probing_penalty_msat = score_params.anti_probing_penalty_msat;
1291                                 }
1292                         },
1293                         _ => {},
1294                 }
1295
1296                 let amount_msat = usage.amount_msat;
1297                 let capacity_msat = usage.effective_capacity.as_msat();
1298                 let inflight_htlc_msat = usage.inflight_htlc_msat;
1299                 self.channel_liquidities
1300                         .get(&short_channel_id)
1301                         .unwrap_or(&ChannelLiquidity::new())
1302                         .as_directed(source, target, inflight_htlc_msat, capacity_msat, self.decay_params)
1303                         .penalty_msat(amount_msat, score_params)
1304                         .saturating_add(anti_probing_penalty_msat)
1305                         .saturating_add(base_penalty_msat)
1306         }
1307
1308         fn payment_path_failed(&mut self, path: &Path, short_channel_id: u64) {
1309                 let amount_msat = path.final_value_msat();
1310                 log_trace!(self.logger, "Scoring path through to SCID {} as having failed at {} msat", short_channel_id, amount_msat);
1311                 let network_graph = self.network_graph.read_only();
1312                 for (hop_idx, hop) in path.hops.iter().enumerate() {
1313                         let target = NodeId::from_pubkey(&hop.pubkey);
1314                         let channel_directed_from_source = network_graph.channels()
1315                                 .get(&hop.short_channel_id)
1316                                 .and_then(|channel| channel.as_directed_to(&target));
1317
1318                         let at_failed_channel = hop.short_channel_id == short_channel_id;
1319                         if at_failed_channel && hop_idx == 0 {
1320                                 log_warn!(self.logger, "Payment failed at the first hop - we do not attempt to learn channel info in such cases as we can directly observe local state.\n\tBecause we know the local state, we should generally not see failures here - this may be an indication that your channel peer on channel {} is broken and you may wish to close the channel.", hop.short_channel_id);
1321                         }
1322
1323                         // Only score announced channels.
1324                         if let Some((channel, source)) = channel_directed_from_source {
1325                                 let capacity_msat = channel.effective_capacity().as_msat();
1326                                 if at_failed_channel {
1327                                         self.channel_liquidities
1328                                                 .entry(hop.short_channel_id)
1329                                                 .or_insert_with(ChannelLiquidity::new)
1330                                                 .as_directed_mut(source, &target, 0, capacity_msat, self.decay_params)
1331                                                 .failed_at_channel(amount_msat, format_args!("SCID {}, towards {:?}", hop.short_channel_id, target), &self.logger);
1332                                 } else {
1333                                         self.channel_liquidities
1334                                                 .entry(hop.short_channel_id)
1335                                                 .or_insert_with(ChannelLiquidity::new)
1336                                                 .as_directed_mut(source, &target, 0, capacity_msat, self.decay_params)
1337                                                 .failed_downstream(amount_msat, format_args!("SCID {}, towards {:?}", hop.short_channel_id, target), &self.logger);
1338                                 }
1339                         } else {
1340                                 log_debug!(self.logger, "Not able to penalize channel with SCID {} as we do not have graph info for it (likely a route-hint last-hop).",
1341                                         hop.short_channel_id);
1342                         }
1343                         if at_failed_channel { break; }
1344                 }
1345         }
1346
1347         fn payment_path_successful(&mut self, path: &Path) {
1348                 let amount_msat = path.final_value_msat();
1349                 log_trace!(self.logger, "Scoring path through SCID {} as having succeeded at {} msat.",
1350                         path.hops.split_last().map(|(hop, _)| hop.short_channel_id).unwrap_or(0), amount_msat);
1351                 let network_graph = self.network_graph.read_only();
1352                 for hop in &path.hops {
1353                         let target = NodeId::from_pubkey(&hop.pubkey);
1354                         let channel_directed_from_source = network_graph.channels()
1355                                 .get(&hop.short_channel_id)
1356                                 .and_then(|channel| channel.as_directed_to(&target));
1357
1358                         // Only score announced channels.
1359                         if let Some((channel, source)) = channel_directed_from_source {
1360                                 let capacity_msat = channel.effective_capacity().as_msat();
1361                                 self.channel_liquidities
1362                                         .entry(hop.short_channel_id)
1363                                         .or_insert_with(ChannelLiquidity::new)
1364                                         .as_directed_mut(source, &target, 0, capacity_msat, self.decay_params)
1365                                         .successful(amount_msat, format_args!("SCID {}, towards {:?}", hop.short_channel_id, target), &self.logger);
1366                         } else {
1367                                 log_debug!(self.logger, "Not able to learn for channel with SCID {} as we do not have graph info for it (likely a route-hint last-hop).",
1368                                         hop.short_channel_id);
1369                         }
1370                 }
1371         }
1372
1373         fn probe_failed(&mut self, path: &Path, short_channel_id: u64) {
1374                 self.payment_path_failed(path, short_channel_id)
1375         }
1376
1377         fn probe_successful(&mut self, path: &Path) {
1378                 self.payment_path_failed(path, u64::max_value())
1379         }
1380 }
1381
1382 mod approx {
1383         const BITS: u32 = 64;
1384         const HIGHEST_BIT: u32 = BITS - 1;
1385         const LOWER_BITS: u32 = 6;
1386         pub(super) const LOWER_BITS_BOUND: u64 = 1 << LOWER_BITS;
1387         const LOWER_BITMASK: u64 = (1 << LOWER_BITS) - 1;
1388
1389         /// Look-up table for `log10(x) * 2048` where row `i` is used for each `x` having `i` as the
1390         /// most significant bit. The next 4 bits of `x`, if applicable, are used for the second index.
1391         const LOG10_TIMES_2048: [[u16; (LOWER_BITS_BOUND) as usize]; BITS as usize] = [
1392                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1393                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1394                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1395                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1396                 [617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617,
1397                         617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617,
1398                         977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977,
1399                         977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977],
1400                 [1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
1401                         1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431,
1402                         1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
1403                         1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731],
1404                 [1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954,
1405                         2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133,
1406                         2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281,
1407                         2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409],
1408                 [2466, 2466, 2466, 2466, 2520, 2520, 2520, 2520, 2571, 2571, 2571, 2571, 2619, 2619, 2619, 2619,
1409                         2665, 2665, 2665, 2665, 2708, 2708, 2708, 2708, 2749, 2749, 2749, 2749, 2789, 2789, 2789, 2789,
1410                         2827, 2827, 2827, 2827, 2863, 2863, 2863, 2863, 2898, 2898, 2898, 2898, 2931, 2931, 2931, 2931,
1411                         2964, 2964, 2964, 2964, 2995, 2995, 2995, 2995, 3025, 3025, 3025, 3025, 3054, 3054, 3054, 3054],
1412                 [3083, 3083, 3110, 3110, 3136, 3136, 3162, 3162, 3187, 3187, 3212, 3212, 3235, 3235, 3259, 3259,
1413                         3281, 3281, 3303, 3303, 3324, 3324, 3345, 3345, 3366, 3366, 3386, 3386, 3405, 3405, 3424, 3424,
1414                         3443, 3443, 3462, 3462, 3479, 3479, 3497, 3497, 3514, 3514, 3531, 3531, 3548, 3548, 3564, 3564,
1415                         3580, 3580, 3596, 3596, 3612, 3612, 3627, 3627, 3642, 3642, 3656, 3656, 3671, 3671, 3685, 3685],
1416                 [3699, 3713, 3726, 3740, 3753, 3766, 3779, 3791, 3804, 3816, 3828, 3840, 3852, 3864, 3875, 3886,
1417                         3898, 3909, 3919, 3930, 3941, 3951, 3962, 3972, 3982, 3992, 4002, 4012, 4022, 4031, 4041, 4050,
1418                         4060, 4069, 4078, 4087, 4096, 4105, 4114, 4122, 4131, 4139, 4148, 4156, 4164, 4173, 4181, 4189,
1419                         4197, 4205, 4213, 4220, 4228, 4236, 4243, 4251, 4258, 4266, 4273, 4280, 4287, 4294, 4302, 4309],
1420                 [4316, 4329, 4343, 4356, 4369, 4382, 4395, 4408, 4420, 4433, 4445, 4457, 4468, 4480, 4492, 4503,
1421                         4514, 4525, 4536, 4547, 4557, 4568, 4578, 4589, 4599, 4609, 4619, 4629, 4638, 4648, 4657, 4667,
1422                         4676, 4685, 4695, 4704, 4713, 4721, 4730, 4739, 4747, 4756, 4764, 4773, 4781, 4789, 4797, 4805,
1423                         4813, 4821, 4829, 4837, 4845, 4852, 4860, 4867, 4875, 4882, 4889, 4897, 4904, 4911, 4918, 4925],
1424                 [4932, 4946, 4959, 4973, 4986, 4999, 5012, 5024, 5037, 5049, 5061, 5073, 5085, 5097, 5108, 5119,
1425                         5131, 5142, 5153, 5163, 5174, 5184, 5195, 5205, 5215, 5225, 5235, 5245, 5255, 5264, 5274, 5283,
1426                         5293, 5302, 5311, 5320, 5329, 5338, 5347, 5355, 5364, 5372, 5381, 5389, 5397, 5406, 5414, 5422,
1427                         5430, 5438, 5446, 5453, 5461, 5469, 5476, 5484, 5491, 5499, 5506, 5513, 5520, 5527, 5535, 5542],
1428                 [5549, 5562, 5576, 5589, 5603, 5615, 5628, 5641, 5653, 5666, 5678, 5690, 5701, 5713, 5725, 5736,
1429                         5747, 5758, 5769, 5780, 5790, 5801, 5811, 5822, 5832, 5842, 5852, 5862, 5871, 5881, 5890, 5900,
1430                         5909, 5918, 5928, 5937, 5946, 5954, 5963, 5972, 5980, 5989, 5997, 6006, 6014, 6022, 6030, 6038,
1431                         6046, 6054, 6062, 6070, 6078, 6085, 6093, 6100, 6108, 6115, 6122, 6130, 6137, 6144, 6151, 6158],
1432                 [6165, 6179, 6192, 6206, 6219, 6232, 6245, 6257, 6270, 6282, 6294, 6306, 6318, 6330, 6341, 6352,
1433                         6364, 6375, 6386, 6396, 6407, 6417, 6428, 6438, 6448, 6458, 6468, 6478, 6488, 6497, 6507, 6516,
1434                         6526, 6535, 6544, 6553, 6562, 6571, 6580, 6588, 6597, 6605, 6614, 6622, 6630, 6639, 6647, 6655,
1435                         6663, 6671, 6679, 6686, 6694, 6702, 6709, 6717, 6724, 6732, 6739, 6746, 6753, 6761, 6768, 6775],
1436                 [6782, 6795, 6809, 6822, 6836, 6849, 6861, 6874, 6886, 6899, 6911, 6923, 6934, 6946, 6958, 6969,
1437                         6980, 6991, 7002, 7013, 7023, 7034, 7044, 7055, 7065, 7075, 7085, 7095, 7104, 7114, 7124, 7133,
1438                         7142, 7151, 7161, 7170, 7179, 7187, 7196, 7205, 7213, 7222, 7230, 7239, 7247, 7255, 7263, 7271,
1439                         7279, 7287, 7295, 7303, 7311, 7318, 7326, 7333, 7341, 7348, 7355, 7363, 7370, 7377, 7384, 7391],
1440                 [7398, 7412, 7425, 7439, 7452, 7465, 7478, 7490, 7503, 7515, 7527, 7539, 7551, 7563, 7574, 7585,
1441                         7597, 7608, 7619, 7629, 7640, 7651, 7661, 7671, 7681, 7691, 7701, 7711, 7721, 7731, 7740, 7749,
1442                         7759, 7768, 7777, 7786, 7795, 7804, 7813, 7821, 7830, 7838, 7847, 7855, 7864, 7872, 7880, 7888,
1443                         7896, 7904, 7912, 7919, 7927, 7935, 7942, 7950, 7957, 7965, 7972, 7979, 7986, 7994, 8001, 8008],
1444                 [8015, 8028, 8042, 8055, 8069, 8082, 8094, 8107, 8119, 8132, 8144, 8156, 8167, 8179, 8191, 8202,
1445                         8213, 8224, 8235, 8246, 8256, 8267, 8277, 8288, 8298, 8308, 8318, 8328, 8337, 8347, 8357, 8366,
1446                         8375, 8384, 8394, 8403, 8412, 8420, 8429, 8438, 8446, 8455, 8463, 8472, 8480, 8488, 8496, 8504,
1447                         8512, 8520, 8528, 8536, 8544, 8551, 8559, 8566, 8574, 8581, 8588, 8596, 8603, 8610, 8617, 8624],
1448                 [8631, 8645, 8659, 8672, 8685, 8698, 8711, 8723, 8736, 8748, 8760, 8772, 8784, 8796, 8807, 8818,
1449                         8830, 8841, 8852, 8862, 8873, 8884, 8894, 8904, 8914, 8924, 8934, 8944, 8954, 8964, 8973, 8982,
1450                         8992, 9001, 9010, 9019, 9028, 9037, 9046, 9054, 9063, 9071, 9080, 9088, 9097, 9105, 9113, 9121,
1451                         9129, 9137, 9145, 9152, 9160, 9168, 9175, 9183, 9190, 9198, 9205, 9212, 9219, 9227, 9234, 9241],
1452                 [9248, 9261, 9275, 9288, 9302, 9315, 9327, 9340, 9352, 9365, 9377, 9389, 9400, 9412, 9424, 9435,
1453                         9446, 9457, 9468, 9479, 9490, 9500, 9510, 9521, 9531, 9541, 9551, 9561, 9570, 9580, 9590, 9599,
1454                         9608, 9617, 9627, 9636, 9645, 9653, 9662, 9671, 9679, 9688, 9696, 9705, 9713, 9721, 9729, 9737,
1455                         9745, 9753, 9761, 9769, 9777, 9784, 9792, 9799, 9807, 9814, 9821, 9829, 9836, 9843, 9850, 9857],
1456                 [9864, 9878, 9892, 9905, 9918, 9931, 9944, 9956, 9969, 9981, 9993, 10005, 10017, 10029, 10040, 10051,
1457                         10063, 10074, 10085, 10095, 10106, 10117, 10127, 10137, 10147, 10157, 10167, 10177, 10187, 10197, 10206, 10215,
1458                         10225, 10234, 10243, 10252, 10261, 10270, 10279, 10287, 10296, 10304, 10313, 10321, 10330, 10338, 10346, 10354,
1459                         10362, 10370, 10378, 10385, 10393, 10401, 10408, 10416, 10423, 10431, 10438, 10445, 10452, 10460, 10467, 10474],
1460                 [10481, 10494, 10508, 10521, 10535, 10548, 10560, 10573, 10585, 10598, 10610, 10622, 10634, 10645, 10657, 10668,
1461                         10679, 10690, 10701, 10712, 10723, 10733, 10743, 10754, 10764, 10774, 10784, 10794, 10803, 10813, 10823, 10832,
1462                         10841, 10851, 10860, 10869, 10878, 10886, 10895, 10904, 10912, 10921, 10929, 10938, 10946, 10954, 10962, 10970,
1463                         10978, 10986, 10994, 11002, 11010, 11017, 11025, 11032, 11040, 11047, 11054, 11062, 11069, 11076, 11083, 11090],
1464                 [11097, 11111, 11125, 11138, 11151, 11164, 11177, 11189, 11202, 11214, 11226, 11238, 11250, 11262, 11273, 11284,
1465                         11296, 11307, 11318, 11328, 11339, 11350, 11360, 11370, 11380, 11390, 11400, 11410, 11420, 11430, 11439, 11448,
1466                         11458, 11467, 11476, 11485, 11494, 11503, 11512, 11520, 11529, 11538, 11546, 11554, 11563, 11571, 11579, 11587,
1467                         11595, 11603, 11611, 11618, 11626, 11634, 11641, 11649, 11656, 11664, 11671, 11678, 11685, 11693, 11700, 11707],
1468                 [11714, 11727, 11741, 11754, 11768, 11781, 11793, 11806, 11818, 11831, 11843, 11855, 11867, 11878, 11890, 11901,
1469                         11912, 11923, 11934, 11945, 11956, 11966, 11976, 11987, 11997, 12007, 12017, 12027, 12036, 12046, 12056, 12065,
1470                         12074, 12084, 12093, 12102, 12111, 12119, 12128, 12137, 12146, 12154, 12162, 12171, 12179, 12187, 12195, 12203,
1471                         12211, 12219, 12227, 12235, 12243, 12250, 12258, 12265, 12273, 12280, 12287, 12295, 12302, 12309, 12316, 12323],
1472                 [12330, 12344, 12358, 12371, 12384, 12397, 12410, 12423, 12435, 12447, 12459, 12471, 12483, 12495, 12506, 12517,
1473                         12529, 12540, 12551, 12561, 12572, 12583, 12593, 12603, 12613, 12623, 12633, 12643, 12653, 12663, 12672, 12682,
1474                         12691, 12700, 12709, 12718, 12727, 12736, 12745, 12753, 12762, 12771, 12779, 12787, 12796, 12804, 12812, 12820,
1475                         12828, 12836, 12844, 12851, 12859, 12867, 12874, 12882, 12889, 12897, 12904, 12911, 12918, 12926, 12933, 12940],
1476                 [12947, 12960, 12974, 12987, 13001, 13014, 13026, 13039, 13051, 13064, 13076, 13088, 13100, 13111, 13123, 13134,
1477                         13145, 13156, 13167, 13178, 13189, 13199, 13209, 13220, 13230, 13240, 13250, 13260, 13269, 13279, 13289, 13298,
1478                         13307, 13317, 13326, 13335, 13344, 13352, 13361, 13370, 13379, 13387, 13395, 13404, 13412, 13420, 13428, 13436,
1479                         13444, 13452, 13460, 13468, 13476, 13483, 13491, 13498, 13506, 13513, 13521, 13528, 13535, 13542, 13549, 13556],
1480                 [13563, 13577, 13591, 13604, 13617, 13630, 13643, 13656, 13668, 13680, 13692, 13704, 13716, 13728, 13739, 13750,
1481                         13762, 13773, 13784, 13794, 13805, 13816, 13826, 13836, 13846, 13857, 13866, 13876, 13886, 13896, 13905, 13915,
1482                         13924, 13933, 13942, 13951, 13960, 13969, 13978, 13986, 13995, 14004, 14012, 14020, 14029, 14037, 14045, 14053,
1483                         14061, 14069, 14077, 14084, 14092, 14100, 14107, 14115, 14122, 14130, 14137, 14144, 14151, 14159, 14166, 14173],
1484                 [14180, 14194, 14207, 14220, 14234, 14247, 14259, 14272, 14284, 14297, 14309, 14321, 14333, 14344, 14356, 14367,
1485                         14378, 14389, 14400, 14411, 14422, 14432, 14443, 14453, 14463, 14473, 14483, 14493, 14502, 14512, 14522, 14531,
1486                         14540, 14550, 14559, 14568, 14577, 14586, 14594, 14603, 14612, 14620, 14628, 14637, 14645, 14653, 14661, 14669,
1487                         14677, 14685, 14693, 14701, 14709, 14716, 14724, 14731, 14739, 14746, 14754, 14761, 14768, 14775, 14782, 14789],
1488                 [14796, 14810, 14824, 14837, 14850, 14863, 14876, 14889, 14901, 14913, 14925, 14937, 14949, 14961, 14972, 14984,
1489                         14995, 15006, 15017, 15027, 15038, 15049, 15059, 15069, 15079, 15090, 15099, 15109, 15119, 15129, 15138, 15148,
1490                         15157, 15166, 15175, 15184, 15193, 15202, 15211, 15219, 15228, 15237, 15245, 15253, 15262, 15270, 15278, 15286,
1491                         15294, 15302, 15310, 15317, 15325, 15333, 15340, 15348, 15355, 15363, 15370, 15377, 15384, 15392, 15399, 15406],
1492                 [15413, 15427, 15440, 15453, 15467, 15480, 15492, 15505, 15517, 15530, 15542, 15554, 15566, 15577, 15589, 15600,
1493                         15611, 15622, 15633, 15644, 15655, 15665, 15676, 15686, 15696, 15706, 15716, 15726, 15736, 15745, 15755, 15764,
1494                         15773, 15783, 15792, 15801, 15810, 15819, 15827, 15836, 15845, 15853, 15862, 15870, 15878, 15886, 15894, 15903,
1495                         15910, 15918, 15926, 15934, 15942, 15949, 15957, 15964, 15972, 15979, 15987, 15994, 16001, 16008, 16015, 16022],
1496                 [16029, 16043, 16057, 16070, 16083, 16096, 16109, 16122, 16134, 16146, 16158, 16170, 16182, 16194, 16205, 16217,
1497                         16228, 16239, 16250, 16260, 16271, 16282, 16292, 16302, 16312, 16323, 16332, 16342, 16352, 16362, 16371, 16381,
1498                         16390, 16399, 16408, 16417, 16426, 16435, 16444, 16452, 16461, 16470, 16478, 16486, 16495, 16503, 16511, 16519,
1499                         16527, 16535, 16543, 16550, 16558, 16566, 16573, 16581, 16588, 16596, 16603, 16610, 16618, 16625, 16632, 16639],
1500                 [16646, 16660, 16673, 16686, 16700, 16713, 16725, 16738, 16751, 16763, 16775, 16787, 16799, 16810, 16822, 16833,
1501                         16844, 16855, 16866, 16877, 16888, 16898, 16909, 16919, 16929, 16939, 16949, 16959, 16969, 16978, 16988, 16997,
1502                         17006, 17016, 17025, 17034, 17043, 17052, 17060, 17069, 17078, 17086, 17095, 17103, 17111, 17119, 17127, 17136,
1503                         17143, 17151, 17159, 17167, 17175, 17182, 17190, 17197, 17205, 17212, 17220, 17227, 17234, 17241, 17248, 17255],
1504                 [17262, 17276, 17290, 17303, 17316, 17329, 17342, 17355, 17367, 17379, 17391, 17403, 17415, 17427, 17438, 17450,
1505                         17461, 17472, 17483, 17493, 17504, 17515, 17525, 17535, 17546, 17556, 17565, 17575, 17585, 17595, 17604, 17614,
1506                         17623, 17632, 17641, 17650, 17659, 17668, 17677, 17685, 17694, 17703, 17711, 17719, 17728, 17736, 17744, 17752,
1507                         17760, 17768, 17776, 17784, 17791, 17799, 17806, 17814, 17821, 17829, 17836, 17843, 17851, 17858, 17865, 17872],
1508                 [17879, 17893, 17906, 17920, 17933, 17946, 17958, 17971, 17984, 17996, 18008, 18020, 18032, 18043, 18055, 18066,
1509                         18077, 18088, 18099, 18110, 18121, 18131, 18142, 18152, 18162, 18172, 18182, 18192, 18202, 18211, 18221, 18230,
1510                         18239, 18249, 18258, 18267, 18276, 18285, 18293, 18302, 18311, 18319, 18328, 18336, 18344, 18352, 18360, 18369,
1511                         18377, 18384, 18392, 18400, 18408, 18415, 18423, 18430, 18438, 18445, 18453, 18460, 18467, 18474, 18481, 18488],
1512                 [18495, 18509, 18523, 18536, 18549, 18562, 18575, 18588, 18600, 18612, 18624, 18636, 18648, 18660, 18671, 18683,
1513                         18694, 18705, 18716, 18726, 18737, 18748, 18758, 18768, 18779, 18789, 18799, 18808, 18818, 18828, 18837, 18847,
1514                         18856, 18865, 18874, 18883, 18892, 18901, 18910, 18919, 18927, 18936, 18944, 18952, 18961, 18969, 18977, 18985,
1515                         18993, 19001, 19009, 19017, 19024, 19032, 19039, 19047, 19054, 19062, 19069, 19076, 19084, 19091, 19098, 19105],
1516                 [19112, 19126, 19139, 19153, 19166, 19179, 19191, 19204, 19217, 19229, 19241, 19253, 19265, 19276, 19288, 19299,
1517                         19310, 19321, 19332, 19343, 19354, 19364, 19375, 19385, 19395, 19405, 19415, 19425, 19435, 19444, 19454, 19463,
1518                         19472, 19482, 19491, 19500, 19509, 19518, 19526, 19535, 19544, 19552, 19561, 19569, 19577, 19585, 19594, 19602,
1519                         19610, 19617, 19625, 19633, 19641, 19648, 19656, 19663, 19671, 19678, 19686, 19693, 19700, 19707, 19714, 19721],
1520                 [19728, 19742, 19756, 19769, 19782, 19795, 19808, 19821, 19833, 19845, 19857, 19869, 19881, 19893, 19904, 19916,
1521                         19927, 19938, 19949, 19960, 19970, 19981, 19991, 20001, 20012, 20022, 20032, 20041, 20051, 20061, 20070, 20080,
1522                         20089, 20098, 20107, 20116, 20125, 20134, 20143, 20152, 20160, 20169, 20177, 20185, 20194, 20202, 20210, 20218,
1523                         20226, 20234, 20242, 20250, 20257, 20265, 20272, 20280, 20287, 20295, 20302, 20309, 20317, 20324, 20331, 20338],
1524                 [20345, 20359, 20372, 20386, 20399, 20412, 20425, 20437, 20450, 20462, 20474, 20486, 20498, 20509, 20521, 20532,
1525                         20543, 20554, 20565, 20576, 20587, 20597, 20608, 20618, 20628, 20638, 20648, 20658, 20668, 20677, 20687, 20696,
1526                         20705, 20715, 20724, 20733, 20742, 20751, 20759, 20768, 20777, 20785, 20794, 20802, 20810, 20818, 20827, 20835,
1527                         20843, 20850, 20858, 20866, 20874, 20881, 20889, 20896, 20904, 20911, 20919, 20926, 20933, 20940, 20947, 20954],
1528                 [20961, 20975, 20989, 21002, 21015, 21028, 21041, 21054, 21066, 21078, 21090, 21102, 21114, 21126, 21137, 21149,
1529                         21160, 21171, 21182, 21193, 21203, 21214, 21224, 21234, 21245, 21255, 21265, 21274, 21284, 21294, 21303, 21313,
1530                         21322, 21331, 21340, 21349, 21358, 21367, 21376, 21385, 21393, 21402, 21410, 21418, 21427, 21435, 21443, 21451,
1531                         21459, 21467, 21475, 21483, 21490, 21498, 21505, 21513, 21520, 21528, 21535, 21542, 21550, 21557, 21564, 21571],
1532                 [21578, 21592, 21605, 21619, 21632, 21645, 21658, 21670, 21683, 21695, 21707, 21719, 21731, 21742, 21754, 21765,
1533                         21776, 21787, 21798, 21809, 21820, 21830, 21841, 21851, 21861, 21871, 21881, 21891, 21901, 21910, 21920, 21929,
1534                         21938, 21948, 21957, 21966, 21975, 21984, 21992, 22001, 22010, 22018, 22027, 22035, 22043, 22051, 22060, 22068,
1535                         22076, 22083, 22091, 22099, 22107, 22114, 22122, 22129, 22137, 22144, 22152, 22159, 22166, 22173, 22180, 22187],
1536                 [22194, 22208, 22222, 22235, 22248, 22261, 22274, 22287, 22299, 22311, 22323, 22335, 22347, 22359, 22370, 22382,
1537                         22393, 22404, 22415, 22426, 22436, 22447, 22457, 22467, 22478, 22488, 22498, 22507, 22517, 22527, 22536, 22546,
1538                         22555, 22564, 22573, 22582, 22591, 22600, 22609, 22618, 22626, 22635, 22643, 22651, 22660, 22668, 22676, 22684,
1539                         22692, 22700, 22708, 22716, 22723, 22731, 22738, 22746, 22753, 22761, 22768, 22775, 22783, 22790, 22797, 22804],
1540                 [22811, 22825, 22838, 22852, 22865, 22878, 22891, 22903, 22916, 22928, 22940, 22952, 22964, 22975, 22987, 22998,
1541                         23009, 23020, 23031, 23042, 23053, 23063, 23074, 23084, 23094, 23104, 23114, 23124, 23134, 23143, 23153, 23162,
1542                         23171, 23181, 23190, 23199, 23208, 23217, 23225, 23234, 23243, 23251, 23260, 23268, 23276, 23284, 23293, 23301,
1543                         23309, 23316, 23324, 23332, 23340, 23347, 23355, 23363, 23370, 23377, 23385, 23392, 23399, 23406, 23413, 23420],
1544                 [23427, 23441, 23455, 23468, 23481, 23494, 23507, 23520, 23532, 23544, 23556, 23568, 23580, 23592, 23603, 23615,
1545                         23626, 23637, 23648, 23659, 23669, 23680, 23690, 23700, 23711, 23721, 23731, 23740, 23750, 23760, 23769, 23779,
1546                         23788, 23797, 23806, 23815, 23824, 23833, 23842, 23851, 23859, 23868, 23876, 23884, 23893, 23901, 23909, 23917,
1547                         23925, 23933, 23941, 23949, 23956, 23964, 23972, 23979, 23986, 23994, 24001, 24008, 24016, 24023, 24030, 24037],
1548                 [24044, 24058, 24071, 24085, 24098, 24111, 24124, 24136, 24149, 24161, 24173, 24185, 24197, 24208, 24220, 24231,
1549                         24242, 24253, 24264, 24275, 24286, 24296, 24307, 24317, 24327, 24337, 24347, 24357, 24367, 24376, 24386, 24395,
1550                         24405, 24414, 24423, 24432, 24441, 24450, 24458, 24467, 24476, 24484, 24493, 24501, 24509, 24517, 24526, 24534,
1551                         24542, 24550, 24557, 24565, 24573, 24580, 24588, 24596, 24603, 24610, 24618, 24625, 24632, 24639, 24646, 24653],
1552                 [24660, 24674, 24688, 24701, 24714, 24727, 24740, 24753, 24765, 24777, 24790, 24801, 24813, 24825, 24836, 24848,
1553                         24859, 24870, 24881, 24892, 24902, 24913, 24923, 24933, 24944, 24954, 24964, 24973, 24983, 24993, 25002, 25012,
1554                         25021, 25030, 25039, 25048, 25057, 25066, 25075, 25084, 25092, 25101, 25109, 25117, 25126, 25134, 25142, 25150,
1555                         25158, 25166, 25174, 25182, 25189, 25197, 25205, 25212, 25219, 25227, 25234, 25241, 25249, 25256, 25263, 25270],
1556                 [25277, 25291, 25304, 25318, 25331, 25344, 25357, 25369, 25382, 25394, 25406, 25418, 25430, 25441, 25453, 25464,
1557                         25475, 25486, 25497, 25508, 25519, 25529, 25540, 25550, 25560, 25570, 25580, 25590, 25600, 25609, 25619, 25628,
1558                         25638, 25647, 25656, 25665, 25674, 25683, 25691, 25700, 25709, 25717, 25726, 25734, 25742, 25750, 25759, 25767,
1559                         25775, 25783, 25790, 25798, 25806, 25813, 25821, 25829, 25836, 25843, 25851, 25858, 25865, 25872, 25879, 25886],
1560                 [25893, 25907, 25921, 25934, 25947, 25960, 25973, 25986, 25998, 26010, 26023, 26034, 26046, 26058, 26069, 26081,
1561                         26092, 26103, 26114, 26125, 26135, 26146, 26156, 26166, 26177, 26187, 26197, 26206, 26216, 26226, 26235, 26245,
1562                         26254, 26263, 26272, 26281, 26290, 26299, 26308, 26317, 26325, 26334, 26342, 26351, 26359, 26367, 26375, 26383,
1563                         26391, 26399, 26407, 26415, 26422, 26430, 26438, 26445, 26453, 26460, 26467, 26474, 26482, 26489, 26496, 26503],
1564                 [26510, 26524, 26537, 26551, 26564, 26577, 26590, 26602, 26615, 26627, 26639, 26651, 26663, 26674, 26686, 26697,
1565                         26708, 26719, 26730, 26741, 26752, 26762, 26773, 26783, 26793, 26803, 26813, 26823, 26833, 26842, 26852, 26861,
1566                         26871, 26880, 26889, 26898, 26907, 26916, 26924, 26933, 26942, 26950, 26959, 26967, 26975, 26983, 26992, 27000,
1567                         27008, 27016, 27023, 27031, 27039, 27046, 27054, 27062, 27069, 27076, 27084, 27091, 27098, 27105, 27112, 27119],
1568                 [27126, 27140, 27154, 27167, 27180, 27193, 27206, 27219, 27231, 27243, 27256, 27267, 27279, 27291, 27302, 27314,
1569                         27325, 27336, 27347, 27358, 27368, 27379, 27389, 27399, 27410, 27420, 27430, 27439, 27449, 27459, 27468, 27478,
1570                         27487, 27496, 27505, 27514, 27523, 27532, 27541, 27550, 27558, 27567, 27575, 27584, 27592, 27600, 27608, 27616,
1571                         27624, 27632, 27640, 27648, 27655, 27663, 27671, 27678, 27686, 27693, 27700, 27707, 27715, 27722, 27729, 27736],
1572                 [27743, 27757, 27770, 27784, 27797, 27810, 27823, 27835, 27848, 27860, 27872, 27884, 27896, 27907, 27919, 27930,
1573                         27941, 27952, 27963, 27974, 27985, 27995, 28006, 28016, 28026, 28036, 28046, 28056, 28066, 28075, 28085, 28094,
1574                         28104, 28113, 28122, 28131, 28140, 28149, 28157, 28166, 28175, 28183, 28192, 28200, 28208, 28217, 28225, 28233,
1575                         28241, 28249, 28256, 28264, 28272, 28280, 28287, 28295, 28302, 28309, 28317, 28324, 28331, 28338, 28345, 28352],
1576                 [28359, 28373, 28387, 28400, 28413, 28426, 28439, 28452, 28464, 28476, 28489, 28501, 28512, 28524, 28535, 28547,
1577                         28558, 28569, 28580, 28591, 28601, 28612, 28622, 28633, 28643, 28653, 28663, 28672, 28682, 28692, 28701, 28711,
1578                         28720, 28729, 28738, 28747, 28756, 28765, 28774, 28783, 28791, 28800, 28808, 28817, 28825, 28833, 28841, 28849,
1579                         28857, 28865, 28873, 28881, 28888, 28896, 28904, 28911, 28919, 28926, 28933, 28941, 28948, 28955, 28962, 28969],
1580                 [28976, 28990, 29003, 29017, 29030, 29043, 29056, 29068, 29081, 29093, 29105, 29117, 29129, 29140, 29152, 29163,
1581                         29174, 29185, 29196, 29207, 29218, 29228, 29239, 29249, 29259, 29269, 29279, 29289, 29299, 29308, 29318, 29327,
1582                         29337, 29346, 29355, 29364, 29373, 29382, 29390, 29399, 29408, 29416, 29425, 29433, 29441, 29450, 29458, 29466,
1583                         29474, 29482, 29489, 29497, 29505, 29513, 29520, 29528, 29535, 29542, 29550, 29557, 29564, 29571, 29578, 29585],
1584                 [29592, 29606, 29620, 29633, 29646, 29659, 29672, 29685, 29697, 29709, 29722, 29734, 29745, 29757, 29768, 29780,
1585                         29791, 29802, 29813, 29824, 29834, 29845, 29855, 29866, 29876, 29886, 29896, 29906, 29915, 29925, 29934, 29944,
1586                         29953, 29962, 29971, 29980, 29989, 29998, 30007, 30016, 30024, 30033, 30041, 30050, 30058, 30066, 30074, 30082,
1587                         30090, 30098, 30106, 30114, 30121, 30129, 30137, 30144, 30152, 30159, 30166, 30174, 30181, 30188, 30195, 30202],
1588                 [30209, 30223, 30236, 30250, 30263, 30276, 30289, 30301, 30314, 30326, 30338, 30350, 30362, 30373, 30385, 30396,
1589                         30407, 30418, 30429, 30440, 30451, 30461, 30472, 30482, 30492, 30502, 30512, 30522, 30532, 30541, 30551, 30560,
1590                         30570, 30579, 30588, 30597, 30606, 30615, 30624, 30632, 30641, 30649, 30658, 30666, 30674, 30683, 30691, 30699,
1591                         30707, 30715, 30722, 30730, 30738, 30746, 30753, 30761, 30768, 30775, 30783, 30790, 30797, 30804, 30811, 30818],
1592                 [30825, 30839, 30853, 30866, 30879, 30892, 30905, 30918, 30930, 30943, 30955, 30967, 30978, 30990, 31001, 31013,
1593                         31024, 31035, 31046, 31057, 31067, 31078, 31088, 31099, 31109, 31119, 31129, 31139, 31148, 31158, 31167, 31177,
1594                         31186, 31195, 31204, 31213, 31222, 31231, 31240, 31249, 31257, 31266, 31274, 31283, 31291, 31299, 31307, 31315,
1595                         31323, 31331, 31339, 31347, 31354, 31362, 31370, 31377, 31385, 31392, 31399, 31407, 31414, 31421, 31428, 31435],
1596                 [31442, 31456, 31469, 31483, 31496, 31509, 31522, 31534, 31547, 31559, 31571, 31583, 31595, 31606, 31618, 31629,
1597                         31640, 31652, 31662, 31673, 31684, 31694, 31705, 31715, 31725, 31735, 31745, 31755, 31765, 31774, 31784, 31793,
1598                         31803, 31812, 31821, 31830, 31839, 31848, 31857, 31865, 31874, 31882, 31891, 31899, 31907, 31916, 31924, 31932,
1599                         31940, 31948, 31955, 31963, 31971, 31979, 31986, 31994, 32001, 32008, 32016, 32023, 32030, 32037, 32044, 32052],
1600                 [32058, 32072, 32086, 32099, 32112, 32125, 32138, 32151, 32163, 32176, 32188, 32200, 32211, 32223, 32234, 32246,
1601                         32257, 32268, 32279, 32290, 32300, 32311, 32321, 32332, 32342, 32352, 32362, 32372, 32381, 32391, 32400, 32410,
1602                         32419, 32428, 32437, 32446, 32455, 32464, 32473, 32482, 32490, 32499, 32507, 32516, 32524, 32532, 32540, 32548,
1603                         32556, 32564, 32572, 32580, 32587, 32595, 32603, 32610, 32618, 32625, 32632, 32640, 32647, 32654, 32661, 32668],
1604                 [32675, 32689, 32702, 32716, 32729, 32742, 32755, 32767, 32780, 32792, 32804, 32816, 32828, 32839, 32851, 32862,
1605                         32873, 32885, 32895, 32906, 32917, 32927, 32938, 32948, 32958, 32968, 32978, 32988, 32998, 33007, 33017, 33026,
1606                         33036, 33045, 33054, 33063, 33072, 33081, 33090, 33098, 33107, 33115, 33124, 33132, 33140, 33149, 33157, 33165,
1607                         33173, 33181, 33188, 33196, 33204, 33212, 33219, 33227, 33234, 33241, 33249, 33256, 33263, 33270, 33278, 33285],
1608                 [33292, 33305, 33319, 33332, 33345, 33358, 33371, 33384, 33396, 33409, 33421, 33433, 33444, 33456, 33467, 33479,
1609                         33490, 33501, 33512, 33523, 33533, 33544, 33554, 33565, 33575, 33585, 33595, 33605, 33614, 33624, 33633, 33643,
1610                         33652, 33661, 33670, 33680, 33688, 33697, 33706, 33715, 33723, 33732, 33740, 33749, 33757, 33765, 33773, 33781,
1611                         33789, 33797, 33805, 33813, 33820, 33828, 33836, 33843, 33851, 33858, 33865, 33873, 33880, 33887, 33894, 33901],
1612                 [33908, 33922, 33935, 33949, 33962, 33975, 33988, 34000, 34013, 34025, 34037, 34049, 34061, 34072, 34084, 34095,
1613                         34106, 34118, 34128, 34139, 34150, 34160, 34171, 34181, 34191, 34201, 34211, 34221, 34231, 34240, 34250, 34259,
1614                         34269, 34278, 34287, 34296, 34305, 34314, 34323, 34331, 34340, 34348, 34357, 34365, 34373, 34382, 34390, 34398,
1615                         34406, 34414, 34422, 34429, 34437, 34445, 34452, 34460, 34467, 34475, 34482, 34489, 34496, 34503, 34511, 34518],
1616                 [34525, 34538, 34552, 34565, 34578, 34591, 34604, 34617, 34629, 34642, 34654, 34666, 34677, 34689, 34700, 34712,
1617                         34723, 34734, 34745, 34756, 34766, 34777, 34787, 34798, 34808, 34818, 34828, 34838, 34847, 34857, 34866, 34876,
1618                         34885, 34894, 34904, 34913, 34921, 34930, 34939, 34948, 34956, 34965, 34973, 34982, 34990, 34998, 35006, 35014,
1619                         35022, 35030, 35038, 35046, 35053, 35061, 35069, 35076, 35084, 35091, 35098, 35106, 35113, 35120, 35127, 35134],
1620                 [35141, 35155, 35168, 35182, 35195, 35208, 35221, 35233, 35246, 35258, 35270, 35282, 35294, 35306, 35317, 35328,
1621                         35340, 35351, 35361, 35372, 35383, 35393, 35404, 35414, 35424, 35434, 35444, 35454, 35464, 35473, 35483, 35492,
1622                         35502, 35511, 35520, 35529, 35538, 35547, 35556, 35564, 35573, 35581, 35590, 35598, 35606, 35615, 35623, 35631,
1623                         35639, 35647, 35655, 35662, 35670, 35678, 35685, 35693, 35700, 35708, 35715, 35722, 35729, 35736, 35744, 35751],
1624                 [35758, 35771, 35785, 35798, 35811, 35824, 35837, 35850, 35862, 35875, 35887, 35899, 35910, 35922, 35934, 35945,
1625                         35956, 35967, 35978, 35989, 35999, 36010, 36020, 36031, 36041, 36051, 36061, 36071, 36080, 36090, 36099, 36109,
1626                         36118, 36127, 36137, 36146, 36154, 36163, 36172, 36181, 36189, 36198, 36206, 36215, 36223, 36231, 36239, 36247,
1627                         36255, 36263, 36271, 36279, 36287, 36294, 36302, 36309, 36317, 36324, 36331, 36339, 36346, 36353, 36360, 36367],
1628                 [36374, 36388, 36401, 36415, 36428, 36441, 36454, 36466, 36479, 36491, 36503, 36515, 36527, 36539, 36550, 36561,
1629                         36573, 36584, 36594, 36605, 36616, 36626, 36637, 36647, 36657, 36667, 36677, 36687, 36697, 36706, 36716, 36725,
1630                         36735, 36744, 36753, 36762, 36771, 36780, 36789, 36797, 36806, 36814, 36823, 36831, 36839, 36848, 36856, 36864,
1631                         36872, 36880, 36888, 36895, 36903, 36911, 36918, 36926, 36933, 36941, 36948, 36955, 36962, 36969, 36977, 36984],
1632                 [36991, 37004, 37018, 37031, 37044, 37057, 37070, 37083, 37095, 37108, 37120, 37132, 37143, 37155, 37167, 37178,
1633                         37189, 37200, 37211, 37222, 37232, 37243, 37253, 37264, 37274, 37284, 37294, 37304, 37313, 37323, 37332, 37342,
1634                         37351, 37360, 37370, 37379, 37388, 37396, 37405, 37414, 37422, 37431, 37439, 37448, 37456, 37464, 37472, 37480,
1635                         37488, 37496, 37504, 37512, 37520, 37527, 37535, 37542, 37550, 37557, 37564, 37572, 37579, 37586, 37593, 37600],
1636                 [37607, 37621, 37634, 37648, 37661, 37674, 37687, 37699, 37712, 37724, 37736, 37748, 37760, 37772, 37783, 37794,
1637                         37806, 37817, 37828, 37838, 37849, 37859, 37870, 37880, 37890, 37900, 37910, 37920, 37930, 37939, 37949, 37958,
1638                         37968, 37977, 37986, 37995, 38004, 38013, 38022, 38030, 38039, 38047, 38056, 38064, 38072, 38081, 38089, 38097,
1639                         38105, 38113, 38121, 38128, 38136, 38144, 38151, 38159, 38166, 38174, 38181, 38188, 38195, 38202, 38210, 38217],
1640                 [38224, 38237, 38251, 38264, 38278, 38290, 38303, 38316, 38328, 38341, 38353, 38365, 38376, 38388, 38400, 38411,
1641                         38422, 38433, 38444, 38455, 38465, 38476, 38486, 38497, 38507, 38517, 38527, 38537, 38546, 38556, 38565, 38575,
1642                         38584, 38593, 38603, 38612, 38621, 38629, 38638, 38647, 38655, 38664, 38672, 38681, 38689, 38697, 38705, 38713,
1643                         38721, 38729, 38737, 38745, 38753, 38760, 38768, 38775, 38783, 38790, 38797, 38805, 38812, 38819, 38826, 38833],
1644                 [38840, 38854, 38867, 38881, 38894, 38907, 38920, 38932, 38945, 38957, 38969, 38981, 38993, 39005, 39016, 39027,
1645                         39039, 39050, 39061, 39071, 39082, 39092, 39103, 39113, 39123, 39133, 39143, 39153, 39163, 39172, 39182, 39191,
1646                         39201, 39210, 39219, 39228, 39237, 39246, 39255, 39263, 39272, 39280, 39289, 39297, 39305, 39314, 39322, 39330,
1647                         39338, 39346, 39354, 39361, 39369, 39377, 39384, 39392, 39399, 39407, 39414, 39421, 39428, 39436, 39443, 39450],
1648         ];
1649
1650         /// Approximate `log10(numerator / denominator) * 2048` using a look-up table.
1651         #[inline]
1652         pub fn negative_log10_times_2048(numerator: u64, denominator: u64) -> u64 {
1653                 // Multiply the -1 through to avoid needing to use signed numbers.
1654                 (log10_times_2048(denominator) - log10_times_2048(numerator)) as u64
1655         }
1656
1657         #[inline]
1658         fn log10_times_2048(x: u64) -> u16 {
1659                 debug_assert_ne!(x, 0);
1660                 let most_significant_bit = HIGHEST_BIT - x.leading_zeros();
1661                 let lower_bits = (x >> most_significant_bit.saturating_sub(LOWER_BITS)) & LOWER_BITMASK;
1662                 LOG10_TIMES_2048[most_significant_bit as usize][lower_bits as usize]
1663         }
1664
1665         #[cfg(test)]
1666         mod tests {
1667                 use super::*;
1668
1669                 #[test]
1670                 fn prints_negative_log10_times_2048_lookup_table() {
1671                         for msb in 0..BITS {
1672                                 for i in 0..LOWER_BITS_BOUND {
1673                                         let x = ((LOWER_BITS_BOUND + i) << (HIGHEST_BIT - LOWER_BITS)) >> (HIGHEST_BIT - msb);
1674                                         let log10_times_2048 = ((x as f64).log10() * 2048.0).round() as u16;
1675                                         assert_eq!(log10_times_2048, LOG10_TIMES_2048[msb as usize][i as usize]);
1676
1677                                         if i % LOWER_BITS_BOUND == 0 {
1678                                                 print!("\t\t[{}, ", log10_times_2048);
1679                                         } else if i % LOWER_BITS_BOUND == LOWER_BITS_BOUND - 1 {
1680                                                 println!("{}],", log10_times_2048);
1681                                         } else if i % (LOWER_BITS_BOUND/4) == LOWER_BITS_BOUND/4 - 1 {
1682                                                 print!("{},\n\t\t\t", log10_times_2048);
1683                                         } else {
1684                                                 print!("{}, ", log10_times_2048);
1685                                         }
1686                                 }
1687                         }
1688                 }
1689         }
1690 }
1691
1692 impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> Writeable for ProbabilisticScorerUsingTime<G, L, T> where L::Target: Logger {
1693         #[inline]
1694         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
1695                 write_tlv_fields!(w, {
1696                         (0, self.channel_liquidities, required),
1697                 });
1698                 Ok(())
1699         }
1700 }
1701
1702 impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time>
1703 ReadableArgs<(ProbabilisticScoringDecayParameters, G, L)> for ProbabilisticScorerUsingTime<G, L, T> where L::Target: Logger {
1704         #[inline]
1705         fn read<R: Read>(
1706                 r: &mut R, args: (ProbabilisticScoringDecayParameters, G, L)
1707         ) -> Result<Self, DecodeError> {
1708                 let (decay_params, network_graph, logger) = args;
1709                 let mut channel_liquidities = HashMap::new();
1710                 read_tlv_fields!(r, {
1711                         (0, channel_liquidities, required),
1712                 });
1713                 Ok(Self {
1714                         decay_params,
1715                         network_graph,
1716                         logger,
1717                         channel_liquidities,
1718                 })
1719         }
1720 }
1721
1722 impl<T: Time> Writeable for ChannelLiquidity<T> {
1723         #[inline]
1724         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
1725                 let duration_since_epoch = T::duration_since_epoch() - self.last_updated.elapsed();
1726                 write_tlv_fields!(w, {
1727                         (0, self.min_liquidity_offset_msat, required),
1728                         (1, Some(self.min_liquidity_offset_history), option),
1729                         (2, self.max_liquidity_offset_msat, required),
1730                         (3, Some(self.max_liquidity_offset_history), option),
1731                         (4, duration_since_epoch, required),
1732                 });
1733                 Ok(())
1734         }
1735 }
1736
1737 impl<T: Time> Readable for ChannelLiquidity<T> {
1738         #[inline]
1739         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
1740                 let mut min_liquidity_offset_msat = 0;
1741                 let mut max_liquidity_offset_msat = 0;
1742                 let mut min_liquidity_offset_history = Some(HistoricalBucketRangeTracker::new());
1743                 let mut max_liquidity_offset_history = Some(HistoricalBucketRangeTracker::new());
1744                 let mut duration_since_epoch = Duration::from_secs(0);
1745                 read_tlv_fields!(r, {
1746                         (0, min_liquidity_offset_msat, required),
1747                         (1, min_liquidity_offset_history, option),
1748                         (2, max_liquidity_offset_msat, required),
1749                         (3, max_liquidity_offset_history, option),
1750                         (4, duration_since_epoch, required),
1751                 });
1752                 // On rust prior to 1.60 `Instant::duration_since` will panic if time goes backwards.
1753                 // We write `last_updated` as wallclock time even though its ultimately an `Instant` (which
1754                 // is a time from a monotonic clock usually represented as an offset against boot time).
1755                 // Thus, we have to construct an `Instant` by subtracting the difference in wallclock time
1756                 // from the one that was written. However, because `Instant` can panic if we construct one
1757                 // in the future, we must handle wallclock time jumping backwards, which we do by simply
1758                 // using `Instant::now()` in that case.
1759                 let wall_clock_now = T::duration_since_epoch();
1760                 let now = T::now();
1761                 let last_updated = if wall_clock_now > duration_since_epoch {
1762                         now - (wall_clock_now - duration_since_epoch)
1763                 } else { now };
1764                 Ok(Self {
1765                         min_liquidity_offset_msat,
1766                         max_liquidity_offset_msat,
1767                         min_liquidity_offset_history: min_liquidity_offset_history.unwrap(),
1768                         max_liquidity_offset_history: max_liquidity_offset_history.unwrap(),
1769                         last_updated,
1770                 })
1771         }
1772 }
1773
1774 #[cfg(test)]
1775 mod tests {
1776         use super::{ChannelLiquidity, HistoricalBucketRangeTracker, ProbabilisticScoringFeeParameters, ProbabilisticScoringDecayParameters, ProbabilisticScorerUsingTime};
1777         use crate::blinded_path::{BlindedHop, BlindedPath};
1778         use crate::util::config::UserConfig;
1779         use crate::util::time::Time;
1780         use crate::util::time::tests::SinceEpoch;
1781
1782         use crate::ln::channelmanager;
1783         use crate::ln::msgs::{ChannelAnnouncement, ChannelUpdate, UnsignedChannelAnnouncement, UnsignedChannelUpdate};
1784         use crate::routing::gossip::{EffectiveCapacity, NetworkGraph, NodeId};
1785         use crate::routing::router::{BlindedTail, Path, RouteHop};
1786         use crate::routing::scoring::{ChannelUsage, Score};
1787         use crate::util::ser::{ReadableArgs, Writeable};
1788         use crate::util::test_utils::{self, TestLogger};
1789
1790         use bitcoin::blockdata::constants::genesis_block;
1791         use bitcoin::hashes::Hash;
1792         use bitcoin::hashes::sha256d::Hash as Sha256dHash;
1793         use bitcoin::network::constants::Network;
1794         use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
1795         use core::time::Duration;
1796         use crate::io;
1797
1798         fn source_privkey() -> SecretKey {
1799                 SecretKey::from_slice(&[42; 32]).unwrap()
1800         }
1801
1802         fn target_privkey() -> SecretKey {
1803                 SecretKey::from_slice(&[43; 32]).unwrap()
1804         }
1805
1806         fn source_pubkey() -> PublicKey {
1807                 let secp_ctx = Secp256k1::new();
1808                 PublicKey::from_secret_key(&secp_ctx, &source_privkey())
1809         }
1810
1811         fn target_pubkey() -> PublicKey {
1812                 let secp_ctx = Secp256k1::new();
1813                 PublicKey::from_secret_key(&secp_ctx, &target_privkey())
1814         }
1815
1816         fn source_node_id() -> NodeId {
1817                 NodeId::from_pubkey(&source_pubkey())
1818         }
1819
1820         fn target_node_id() -> NodeId {
1821                 NodeId::from_pubkey(&target_pubkey())
1822         }
1823
1824         // `ProbabilisticScorer` tests
1825
1826         /// A probabilistic scorer for testing with time that can be manually advanced.
1827         type ProbabilisticScorer<'a> = ProbabilisticScorerUsingTime::<&'a NetworkGraph<&'a TestLogger>, &'a TestLogger, SinceEpoch>;
1828
1829         fn sender_privkey() -> SecretKey {
1830                 SecretKey::from_slice(&[41; 32]).unwrap()
1831         }
1832
1833         fn recipient_privkey() -> SecretKey {
1834                 SecretKey::from_slice(&[45; 32]).unwrap()
1835         }
1836
1837         fn sender_pubkey() -> PublicKey {
1838                 let secp_ctx = Secp256k1::new();
1839                 PublicKey::from_secret_key(&secp_ctx, &sender_privkey())
1840         }
1841
1842         fn recipient_pubkey() -> PublicKey {
1843                 let secp_ctx = Secp256k1::new();
1844                 PublicKey::from_secret_key(&secp_ctx, &recipient_privkey())
1845         }
1846
1847         fn sender_node_id() -> NodeId {
1848                 NodeId::from_pubkey(&sender_pubkey())
1849         }
1850
1851         fn recipient_node_id() -> NodeId {
1852                 NodeId::from_pubkey(&recipient_pubkey())
1853         }
1854
1855         fn network_graph(logger: &TestLogger) -> NetworkGraph<&TestLogger> {
1856                 let mut network_graph = NetworkGraph::new(Network::Testnet, logger);
1857                 add_channel(&mut network_graph, 42, source_privkey(), target_privkey());
1858                 add_channel(&mut network_graph, 43, target_privkey(), recipient_privkey());
1859
1860                 network_graph
1861         }
1862
1863         fn add_channel(
1864                 network_graph: &mut NetworkGraph<&TestLogger>, short_channel_id: u64, node_1_key: SecretKey,
1865                 node_2_key: SecretKey
1866         ) {
1867                 let genesis_hash = genesis_block(Network::Testnet).header.block_hash();
1868                 let node_1_secret = &SecretKey::from_slice(&[39; 32]).unwrap();
1869                 let node_2_secret = &SecretKey::from_slice(&[40; 32]).unwrap();
1870                 let secp_ctx = Secp256k1::new();
1871                 let unsigned_announcement = UnsignedChannelAnnouncement {
1872                         features: channelmanager::provided_channel_features(&UserConfig::default()),
1873                         chain_hash: genesis_hash,
1874                         short_channel_id,
1875                         node_id_1: NodeId::from_pubkey(&PublicKey::from_secret_key(&secp_ctx, &node_1_key)),
1876                         node_id_2: NodeId::from_pubkey(&PublicKey::from_secret_key(&secp_ctx, &node_2_key)),
1877                         bitcoin_key_1: NodeId::from_pubkey(&PublicKey::from_secret_key(&secp_ctx, &node_1_secret)),
1878                         bitcoin_key_2: NodeId::from_pubkey(&PublicKey::from_secret_key(&secp_ctx, &node_2_secret)),
1879                         excess_data: Vec::new(),
1880                 };
1881                 let msghash = hash_to_message!(&Sha256dHash::hash(&unsigned_announcement.encode()[..])[..]);
1882                 let signed_announcement = ChannelAnnouncement {
1883                         node_signature_1: secp_ctx.sign_ecdsa(&msghash, &node_1_key),
1884                         node_signature_2: secp_ctx.sign_ecdsa(&msghash, &node_2_key),
1885                         bitcoin_signature_1: secp_ctx.sign_ecdsa(&msghash, &node_1_secret),
1886                         bitcoin_signature_2: secp_ctx.sign_ecdsa(&msghash, &node_2_secret),
1887                         contents: unsigned_announcement,
1888                 };
1889                 let chain_source: Option<&crate::util::test_utils::TestChainSource> = None;
1890                 network_graph.update_channel_from_announcement(
1891                         &signed_announcement, &chain_source).unwrap();
1892                 update_channel(network_graph, short_channel_id, node_1_key, 0, 1_000);
1893                 update_channel(network_graph, short_channel_id, node_2_key, 1, 0);
1894         }
1895
1896         fn update_channel(
1897                 network_graph: &mut NetworkGraph<&TestLogger>, short_channel_id: u64, node_key: SecretKey,
1898                 flags: u8, htlc_maximum_msat: u64
1899         ) {
1900                 let genesis_hash = genesis_block(Network::Testnet).header.block_hash();
1901                 let secp_ctx = Secp256k1::new();
1902                 let unsigned_update = UnsignedChannelUpdate {
1903                         chain_hash: genesis_hash,
1904                         short_channel_id,
1905                         timestamp: 100,
1906                         flags,
1907                         cltv_expiry_delta: 18,
1908                         htlc_minimum_msat: 0,
1909                         htlc_maximum_msat,
1910                         fee_base_msat: 1,
1911                         fee_proportional_millionths: 0,
1912                         excess_data: Vec::new(),
1913                 };
1914                 let msghash = hash_to_message!(&Sha256dHash::hash(&unsigned_update.encode()[..])[..]);
1915                 let signed_update = ChannelUpdate {
1916                         signature: secp_ctx.sign_ecdsa(&msghash, &node_key),
1917                         contents: unsigned_update,
1918                 };
1919                 network_graph.update_channel(&signed_update).unwrap();
1920         }
1921
1922         fn path_hop(pubkey: PublicKey, short_channel_id: u64, fee_msat: u64) -> RouteHop {
1923                 let config = UserConfig::default();
1924                 RouteHop {
1925                         pubkey,
1926                         node_features: channelmanager::provided_node_features(&config),
1927                         short_channel_id,
1928                         channel_features: channelmanager::provided_channel_features(&config),
1929                         fee_msat,
1930                         cltv_expiry_delta: 18,
1931                 }
1932         }
1933
1934         fn payment_path_for_amount(amount_msat: u64) -> Path {
1935                 Path {
1936                         hops: vec![
1937                                 path_hop(source_pubkey(), 41, 1),
1938                                 path_hop(target_pubkey(), 42, 2),
1939                                 path_hop(recipient_pubkey(), 43, amount_msat),
1940                         ], blinded_tail: None,
1941                 }
1942         }
1943
1944         #[test]
1945         fn liquidity_bounds_directed_from_lowest_node_id() {
1946                 let logger = TestLogger::new();
1947                 let last_updated = SinceEpoch::now();
1948                 let network_graph = network_graph(&logger);
1949                 let decay_params = ProbabilisticScoringDecayParameters::default();
1950                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger)
1951                         .with_channel(42,
1952                                 ChannelLiquidity {
1953                                         min_liquidity_offset_msat: 700, max_liquidity_offset_msat: 100, last_updated,
1954                                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
1955                                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
1956                                 })
1957                         .with_channel(43,
1958                                 ChannelLiquidity {
1959                                         min_liquidity_offset_msat: 700, max_liquidity_offset_msat: 100, last_updated,
1960                                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
1961                                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
1962                                 });
1963                 let source = source_node_id();
1964                 let target = target_node_id();
1965                 let recipient = recipient_node_id();
1966                 assert!(source > target);
1967                 assert!(target < recipient);
1968
1969                 // Update minimum liquidity.
1970
1971                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
1972                         .as_directed(&source, &target, 0, 1_000, decay_params);
1973                 assert_eq!(liquidity.min_liquidity_msat(), 100);
1974                 assert_eq!(liquidity.max_liquidity_msat(), 300);
1975
1976                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
1977                         .as_directed(&target, &source, 0, 1_000, decay_params);
1978                 assert_eq!(liquidity.min_liquidity_msat(), 700);
1979                 assert_eq!(liquidity.max_liquidity_msat(), 900);
1980
1981                 scorer.channel_liquidities.get_mut(&42).unwrap()
1982                         .as_directed_mut(&source, &target, 0, 1_000, decay_params)
1983                         .set_min_liquidity_msat(200);
1984
1985                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
1986                         .as_directed(&source, &target, 0, 1_000, decay_params);
1987                 assert_eq!(liquidity.min_liquidity_msat(), 200);
1988                 assert_eq!(liquidity.max_liquidity_msat(), 300);
1989
1990                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
1991                         .as_directed(&target, &source, 0, 1_000, decay_params);
1992                 assert_eq!(liquidity.min_liquidity_msat(), 700);
1993                 assert_eq!(liquidity.max_liquidity_msat(), 800);
1994
1995                 // Update maximum liquidity.
1996
1997                 let liquidity = scorer.channel_liquidities.get(&43).unwrap()
1998                         .as_directed(&target, &recipient, 0, 1_000, decay_params);
1999                 assert_eq!(liquidity.min_liquidity_msat(), 700);
2000                 assert_eq!(liquidity.max_liquidity_msat(), 900);
2001
2002                 let liquidity = scorer.channel_liquidities.get(&43).unwrap()
2003                         .as_directed(&recipient, &target, 0, 1_000, decay_params);
2004                 assert_eq!(liquidity.min_liquidity_msat(), 100);
2005                 assert_eq!(liquidity.max_liquidity_msat(), 300);
2006
2007                 scorer.channel_liquidities.get_mut(&43).unwrap()
2008                         .as_directed_mut(&target, &recipient, 0, 1_000, decay_params)
2009                         .set_max_liquidity_msat(200);
2010
2011                 let liquidity = scorer.channel_liquidities.get(&43).unwrap()
2012                         .as_directed(&target, &recipient, 0, 1_000, decay_params);
2013                 assert_eq!(liquidity.min_liquidity_msat(), 0);
2014                 assert_eq!(liquidity.max_liquidity_msat(), 200);
2015
2016                 let liquidity = scorer.channel_liquidities.get(&43).unwrap()
2017                         .as_directed(&recipient, &target, 0, 1_000, decay_params);
2018                 assert_eq!(liquidity.min_liquidity_msat(), 800);
2019                 assert_eq!(liquidity.max_liquidity_msat(), 1000);
2020         }
2021
2022         #[test]
2023         fn resets_liquidity_upper_bound_when_crossed_by_lower_bound() {
2024                 let logger = TestLogger::new();
2025                 let last_updated = SinceEpoch::now();
2026                 let network_graph = network_graph(&logger);
2027                 let decay_params = ProbabilisticScoringDecayParameters::default();
2028                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger)
2029                         .with_channel(42,
2030                                 ChannelLiquidity {
2031                                         min_liquidity_offset_msat: 200, max_liquidity_offset_msat: 400, last_updated,
2032                                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2033                                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2034                                 });
2035                 let source = source_node_id();
2036                 let target = target_node_id();
2037                 assert!(source > target);
2038
2039                 // Check initial bounds.
2040                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2041                         .as_directed(&source, &target, 0, 1_000, decay_params);
2042                 assert_eq!(liquidity.min_liquidity_msat(), 400);
2043                 assert_eq!(liquidity.max_liquidity_msat(), 800);
2044
2045                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2046                         .as_directed(&target, &source, 0, 1_000, decay_params);
2047                 assert_eq!(liquidity.min_liquidity_msat(), 200);
2048                 assert_eq!(liquidity.max_liquidity_msat(), 600);
2049
2050                 // Reset from source to target.
2051                 scorer.channel_liquidities.get_mut(&42).unwrap()
2052                         .as_directed_mut(&source, &target, 0, 1_000, decay_params)
2053                         .set_min_liquidity_msat(900);
2054
2055                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2056                         .as_directed(&source, &target, 0, 1_000, decay_params);
2057                 assert_eq!(liquidity.min_liquidity_msat(), 900);
2058                 assert_eq!(liquidity.max_liquidity_msat(), 1_000);
2059
2060                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2061                         .as_directed(&target, &source, 0, 1_000, decay_params);
2062                 assert_eq!(liquidity.min_liquidity_msat(), 0);
2063                 assert_eq!(liquidity.max_liquidity_msat(), 100);
2064
2065                 // Reset from target to source.
2066                 scorer.channel_liquidities.get_mut(&42).unwrap()
2067                         .as_directed_mut(&target, &source, 0, 1_000, decay_params)
2068                         .set_min_liquidity_msat(400);
2069
2070                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2071                         .as_directed(&source, &target, 0, 1_000, decay_params);
2072                 assert_eq!(liquidity.min_liquidity_msat(), 0);
2073                 assert_eq!(liquidity.max_liquidity_msat(), 600);
2074
2075                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2076                         .as_directed(&target, &source, 0, 1_000, decay_params);
2077                 assert_eq!(liquidity.min_liquidity_msat(), 400);
2078                 assert_eq!(liquidity.max_liquidity_msat(), 1_000);
2079         }
2080
2081         #[test]
2082         fn resets_liquidity_lower_bound_when_crossed_by_upper_bound() {
2083                 let logger = TestLogger::new();
2084                 let last_updated = SinceEpoch::now();
2085                 let network_graph = network_graph(&logger);
2086                 let decay_params = ProbabilisticScoringDecayParameters::default();
2087                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger)
2088                         .with_channel(42,
2089                                 ChannelLiquidity {
2090                                         min_liquidity_offset_msat: 200, max_liquidity_offset_msat: 400, last_updated,
2091                                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2092                                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2093                                 });
2094                 let source = source_node_id();
2095                 let target = target_node_id();
2096                 assert!(source > target);
2097
2098                 // Check initial bounds.
2099                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2100                         .as_directed(&source, &target, 0, 1_000, decay_params);
2101                 assert_eq!(liquidity.min_liquidity_msat(), 400);
2102                 assert_eq!(liquidity.max_liquidity_msat(), 800);
2103
2104                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2105                         .as_directed(&target, &source, 0, 1_000, decay_params);
2106                 assert_eq!(liquidity.min_liquidity_msat(), 200);
2107                 assert_eq!(liquidity.max_liquidity_msat(), 600);
2108
2109                 // Reset from source to target.
2110                 scorer.channel_liquidities.get_mut(&42).unwrap()
2111                         .as_directed_mut(&source, &target, 0, 1_000, decay_params)
2112                         .set_max_liquidity_msat(300);
2113
2114                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2115                         .as_directed(&source, &target, 0, 1_000, decay_params);
2116                 assert_eq!(liquidity.min_liquidity_msat(), 0);
2117                 assert_eq!(liquidity.max_liquidity_msat(), 300);
2118
2119                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2120                         .as_directed(&target, &source, 0, 1_000, decay_params);
2121                 assert_eq!(liquidity.min_liquidity_msat(), 700);
2122                 assert_eq!(liquidity.max_liquidity_msat(), 1_000);
2123
2124                 // Reset from target to source.
2125                 scorer.channel_liquidities.get_mut(&42).unwrap()
2126                         .as_directed_mut(&target, &source, 0, 1_000, decay_params)
2127                         .set_max_liquidity_msat(600);
2128
2129                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2130                         .as_directed(&source, &target, 0, 1_000, decay_params);
2131                 assert_eq!(liquidity.min_liquidity_msat(), 400);
2132                 assert_eq!(liquidity.max_liquidity_msat(), 1_000);
2133
2134                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
2135                         .as_directed(&target, &source, 0, 1_000, decay_params);
2136                 assert_eq!(liquidity.min_liquidity_msat(), 0);
2137                 assert_eq!(liquidity.max_liquidity_msat(), 600);
2138         }
2139
2140         #[test]
2141         fn increased_penalty_nearing_liquidity_upper_bound() {
2142                 let logger = TestLogger::new();
2143                 let network_graph = network_graph(&logger);
2144                 let params = ProbabilisticScoringFeeParameters {
2145                         liquidity_penalty_multiplier_msat: 1_000,
2146                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2147                 };
2148                 let decay_params = ProbabilisticScoringDecayParameters::default();
2149                 let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2150                 let source = source_node_id();
2151                 let target = target_node_id();
2152
2153                 let usage = ChannelUsage {
2154                         amount_msat: 1_024,
2155                         inflight_htlc_msat: 0,
2156                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 1_000 },
2157                 };
2158                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2159                 let usage = ChannelUsage { amount_msat: 10_240, ..usage };
2160                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2161                 let usage = ChannelUsage { amount_msat: 102_400, ..usage };
2162                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 47);
2163                 let usage = ChannelUsage { amount_msat: 1_023_999, ..usage };
2164                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2_000);
2165
2166                 let usage = ChannelUsage {
2167                         amount_msat: 128,
2168                         inflight_htlc_msat: 0,
2169                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_000 },
2170                 };
2171                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 58);
2172                 let usage = ChannelUsage { amount_msat: 256, ..usage };
2173                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 125);
2174                 let usage = ChannelUsage { amount_msat: 374, ..usage };
2175                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 198);
2176                 let usage = ChannelUsage { amount_msat: 512, ..usage };
2177                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2178                 let usage = ChannelUsage { amount_msat: 640, ..usage };
2179                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 425);
2180                 let usage = ChannelUsage { amount_msat: 768, ..usage };
2181                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 602);
2182                 let usage = ChannelUsage { amount_msat: 896, ..usage };
2183                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 902);
2184         }
2185
2186         #[test]
2187         fn constant_penalty_outside_liquidity_bounds() {
2188                 let logger = TestLogger::new();
2189                 let last_updated = SinceEpoch::now();
2190                 let network_graph = network_graph(&logger);
2191                 let params = ProbabilisticScoringFeeParameters {
2192                         liquidity_penalty_multiplier_msat: 1_000,
2193                         considered_impossible_penalty_msat: u64::max_value(),
2194                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2195                 };
2196                 let decay_params = ProbabilisticScoringDecayParameters {
2197                         ..ProbabilisticScoringDecayParameters::zero_penalty()
2198                 };
2199                 let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger)
2200                         .with_channel(42,
2201                                 ChannelLiquidity {
2202                                         min_liquidity_offset_msat: 40, max_liquidity_offset_msat: 40, last_updated,
2203                                         min_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2204                                         max_liquidity_offset_history: HistoricalBucketRangeTracker::new(),
2205                                 });
2206                 let source = source_node_id();
2207                 let target = target_node_id();
2208
2209                 let usage = ChannelUsage {
2210                         amount_msat: 39,
2211                         inflight_htlc_msat: 0,
2212                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 100, htlc_maximum_msat: 1_000 },
2213                 };
2214                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2215                 let usage = ChannelUsage { amount_msat: 50, ..usage };
2216                 assert_ne!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2217                 assert_ne!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2218                 let usage = ChannelUsage { amount_msat: 61, ..usage };
2219                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2220         }
2221
2222         #[test]
2223         fn does_not_further_penalize_own_channel() {
2224                 let logger = TestLogger::new();
2225                 let network_graph = network_graph(&logger);
2226                 let params = ProbabilisticScoringFeeParameters {
2227                         liquidity_penalty_multiplier_msat: 1_000,
2228                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2229                 };
2230                 let mut scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2231                 let sender = sender_node_id();
2232                 let source = source_node_id();
2233                 let usage = ChannelUsage {
2234                         amount_msat: 500,
2235                         inflight_htlc_msat: 0,
2236                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2237                 };
2238                 let failed_path = payment_path_for_amount(500);
2239                 let successful_path = payment_path_for_amount(200);
2240
2241                 assert_eq!(scorer.channel_penalty_msat(41, &sender, &source, usage, &params), 301);
2242
2243                 scorer.payment_path_failed(&failed_path, 41);
2244                 assert_eq!(scorer.channel_penalty_msat(41, &sender, &source, usage, &params), 301);
2245
2246                 scorer.payment_path_successful(&successful_path);
2247                 assert_eq!(scorer.channel_penalty_msat(41, &sender, &source, usage, &params), 301);
2248         }
2249
2250         #[test]
2251         fn sets_liquidity_lower_bound_on_downstream_failure() {
2252                 let logger = TestLogger::new();
2253                 let network_graph = network_graph(&logger);
2254                 let params = ProbabilisticScoringFeeParameters {
2255                         liquidity_penalty_multiplier_msat: 1_000,
2256                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2257                 };
2258                 let mut scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2259                 let source = source_node_id();
2260                 let target = target_node_id();
2261                 let path = payment_path_for_amount(500);
2262
2263                 let usage = ChannelUsage {
2264                         amount_msat: 250,
2265                         inflight_htlc_msat: 0,
2266                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2267                 };
2268                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 128);
2269                 let usage = ChannelUsage { amount_msat: 500, ..usage };
2270                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 301);
2271                 let usage = ChannelUsage { amount_msat: 750, ..usage };
2272                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 602);
2273
2274                 scorer.payment_path_failed(&path, 43);
2275
2276                 let usage = ChannelUsage { amount_msat: 250, ..usage };
2277                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2278                 let usage = ChannelUsage { amount_msat: 500, ..usage };
2279                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2280                 let usage = ChannelUsage { amount_msat: 750, ..usage };
2281                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2282         }
2283
2284         #[test]
2285         fn sets_liquidity_upper_bound_on_failure() {
2286                 let logger = TestLogger::new();
2287                 let network_graph = network_graph(&logger);
2288                 let params = ProbabilisticScoringFeeParameters {
2289                         liquidity_penalty_multiplier_msat: 1_000,
2290                         considered_impossible_penalty_msat: u64::max_value(),
2291                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2292                 };
2293                 let mut scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2294                 let source = source_node_id();
2295                 let target = target_node_id();
2296                 let path = payment_path_for_amount(500);
2297
2298                 let usage = ChannelUsage {
2299                         amount_msat: 250,
2300                         inflight_htlc_msat: 0,
2301                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2302                 };
2303                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 128);
2304                 let usage = ChannelUsage { amount_msat: 500, ..usage };
2305                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 301);
2306                 let usage = ChannelUsage { amount_msat: 750, ..usage };
2307                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 602);
2308
2309                 scorer.payment_path_failed(&path, 42);
2310
2311                 let usage = ChannelUsage { amount_msat: 250, ..usage };
2312                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2313                 let usage = ChannelUsage { amount_msat: 500, ..usage };
2314                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2315                 let usage = ChannelUsage { amount_msat: 750, ..usage };
2316                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2317         }
2318
2319         #[test]
2320         fn ignores_channels_after_removed_failed_channel() {
2321                 // Previously, if we'd tried to send over a channel which was removed from the network
2322                 // graph before we call `payment_path_failed` (which is the default if the we get a "no
2323                 // such channel" error in the `InvoicePayer`), we would call `failed_downstream` on all
2324                 // channels in the route, even ones which they payment never reached. This tests to ensure
2325                 // we do not score such channels.
2326                 let secp_ctx = Secp256k1::new();
2327                 let logger = TestLogger::new();
2328                 let mut network_graph = NetworkGraph::new(Network::Testnet, &logger);
2329                 let secret_a = SecretKey::from_slice(&[42; 32]).unwrap();
2330                 let secret_b = SecretKey::from_slice(&[43; 32]).unwrap();
2331                 let secret_c = SecretKey::from_slice(&[44; 32]).unwrap();
2332                 let secret_d = SecretKey::from_slice(&[45; 32]).unwrap();
2333                 add_channel(&mut network_graph, 42, secret_a, secret_b);
2334                 // Don't add the channel from B -> C.
2335                 add_channel(&mut network_graph, 44, secret_c, secret_d);
2336
2337                 let pub_a = PublicKey::from_secret_key(&secp_ctx, &secret_a);
2338                 let pub_b = PublicKey::from_secret_key(&secp_ctx, &secret_b);
2339                 let pub_c = PublicKey::from_secret_key(&secp_ctx, &secret_c);
2340                 let pub_d = PublicKey::from_secret_key(&secp_ctx, &secret_d);
2341
2342                 let path = vec![
2343                         path_hop(pub_b, 42, 1),
2344                         path_hop(pub_c, 43, 2),
2345                         path_hop(pub_d, 44, 100),
2346                 ];
2347
2348                 let node_a = NodeId::from_pubkey(&pub_a);
2349                 let node_b = NodeId::from_pubkey(&pub_b);
2350                 let node_c = NodeId::from_pubkey(&pub_c);
2351                 let node_d = NodeId::from_pubkey(&pub_d);
2352
2353                 let params = ProbabilisticScoringFeeParameters {
2354                         liquidity_penalty_multiplier_msat: 1_000,
2355                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2356                 };
2357                 let mut scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2358
2359                 let usage = ChannelUsage {
2360                         amount_msat: 250,
2361                         inflight_htlc_msat: 0,
2362                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2363                 };
2364                 assert_eq!(scorer.channel_penalty_msat(42, &node_a, &node_b, usage, &params), 128);
2365                 // Note that a default liquidity bound is used for B -> C as no channel exists
2366                 assert_eq!(scorer.channel_penalty_msat(43, &node_b, &node_c, usage, &params), 128);
2367                 assert_eq!(scorer.channel_penalty_msat(44, &node_c, &node_d, usage, &params), 128);
2368
2369                 scorer.payment_path_failed(&Path { hops: path, blinded_tail: None }, 43);
2370
2371                 assert_eq!(scorer.channel_penalty_msat(42, &node_a, &node_b, usage, &params), 80);
2372                 // Note that a default liquidity bound is used for B -> C as no channel exists
2373                 assert_eq!(scorer.channel_penalty_msat(43, &node_b, &node_c, usage, &params), 128);
2374                 assert_eq!(scorer.channel_penalty_msat(44, &node_c, &node_d, usage, &params), 128);
2375         }
2376
2377         #[test]
2378         fn reduces_liquidity_upper_bound_along_path_on_success() {
2379                 let logger = TestLogger::new();
2380                 let network_graph = network_graph(&logger);
2381                 let params = ProbabilisticScoringFeeParameters {
2382                         liquidity_penalty_multiplier_msat: 1_000,
2383                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2384                 };
2385                 let mut scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2386                 let sender = sender_node_id();
2387                 let source = source_node_id();
2388                 let target = target_node_id();
2389                 let recipient = recipient_node_id();
2390                 let usage = ChannelUsage {
2391                         amount_msat: 250,
2392                         inflight_htlc_msat: 0,
2393                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2394                 };
2395
2396                 assert_eq!(scorer.channel_penalty_msat(41, &sender, &source, usage, &params), 128);
2397                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 128);
2398                 assert_eq!(scorer.channel_penalty_msat(43, &target, &recipient, usage, &params), 128);
2399
2400                 scorer.payment_path_successful(&payment_path_for_amount(500));
2401
2402                 assert_eq!(scorer.channel_penalty_msat(41, &sender, &source, usage, &params), 128);
2403                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2404                 assert_eq!(scorer.channel_penalty_msat(43, &target, &recipient, usage, &params), 300);
2405         }
2406
2407         #[test]
2408         fn decays_liquidity_bounds_over_time() {
2409                 let logger = TestLogger::new();
2410                 let network_graph = network_graph(&logger);
2411                 let params = ProbabilisticScoringFeeParameters {
2412                         liquidity_penalty_multiplier_msat: 1_000,
2413                         considered_impossible_penalty_msat: u64::max_value(),
2414                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2415                 };
2416                 let decay_params = ProbabilisticScoringDecayParameters {
2417                         liquidity_offset_half_life: Duration::from_secs(10),
2418                         ..ProbabilisticScoringDecayParameters::zero_penalty()
2419                 };
2420                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2421                 let source = source_node_id();
2422                 let target = target_node_id();
2423
2424                 let usage = ChannelUsage {
2425                         amount_msat: 0,
2426                         inflight_htlc_msat: 0,
2427                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_024 },
2428                 };
2429                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2430                 let usage = ChannelUsage { amount_msat: 1_023, ..usage };
2431                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2_000);
2432
2433                 scorer.payment_path_failed(&payment_path_for_amount(768), 42);
2434                 scorer.payment_path_failed(&payment_path_for_amount(128), 43);
2435
2436                 let usage = ChannelUsage { amount_msat: 128, ..usage };
2437                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2438                 let usage = ChannelUsage { amount_msat: 256, ..usage };
2439                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 93);
2440                 let usage = ChannelUsage { amount_msat: 768, ..usage };
2441                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1_479);
2442                 let usage = ChannelUsage { amount_msat: 896, ..usage };
2443                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2444
2445                 SinceEpoch::advance(Duration::from_secs(9));
2446                 let usage = ChannelUsage { amount_msat: 128, ..usage };
2447                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2448                 let usage = ChannelUsage { amount_msat: 256, ..usage };
2449                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 93);
2450                 let usage = ChannelUsage { amount_msat: 768, ..usage };
2451                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1_479);
2452                 let usage = ChannelUsage { amount_msat: 896, ..usage };
2453                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2454
2455                 SinceEpoch::advance(Duration::from_secs(1));
2456                 let usage = ChannelUsage { amount_msat: 64, ..usage };
2457                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2458                 let usage = ChannelUsage { amount_msat: 128, ..usage };
2459                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 34);
2460                 let usage = ChannelUsage { amount_msat: 896, ..usage };
2461                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1_970);
2462                 let usage = ChannelUsage { amount_msat: 960, ..usage };
2463                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2464
2465                 // Fully decay liquidity lower bound.
2466                 SinceEpoch::advance(Duration::from_secs(10 * 7));
2467                 let usage = ChannelUsage { amount_msat: 0, ..usage };
2468                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2469                 let usage = ChannelUsage { amount_msat: 1, ..usage };
2470                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2471                 let usage = ChannelUsage { amount_msat: 1_023, ..usage };
2472                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2_000);
2473                 let usage = ChannelUsage { amount_msat: 1_024, ..usage };
2474                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2475
2476                 // Fully decay liquidity upper bound.
2477                 SinceEpoch::advance(Duration::from_secs(10));
2478                 let usage = ChannelUsage { amount_msat: 0, ..usage };
2479                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2480                 let usage = ChannelUsage { amount_msat: 1_024, ..usage };
2481                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2482
2483                 SinceEpoch::advance(Duration::from_secs(10));
2484                 let usage = ChannelUsage { amount_msat: 0, ..usage };
2485                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2486                 let usage = ChannelUsage { amount_msat: 1_024, ..usage };
2487                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2488         }
2489
2490         #[test]
2491         fn decays_liquidity_bounds_without_shift_overflow() {
2492                 let logger = TestLogger::new();
2493                 let network_graph = network_graph(&logger);
2494                 let params = ProbabilisticScoringFeeParameters {
2495                         liquidity_penalty_multiplier_msat: 1_000,
2496                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2497                 };
2498                 let decay_params = ProbabilisticScoringDecayParameters {
2499                         liquidity_offset_half_life: Duration::from_secs(10),
2500                         ..ProbabilisticScoringDecayParameters::default()
2501                 };
2502                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2503                 let source = source_node_id();
2504                 let target = target_node_id();
2505                 let usage = ChannelUsage {
2506                         amount_msat: 256,
2507                         inflight_htlc_msat: 0,
2508                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_000 },
2509                 };
2510                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 125);
2511
2512                 scorer.payment_path_failed(&payment_path_for_amount(512), 42);
2513                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 281);
2514
2515                 // An unchecked right shift 64 bits or more in DirectedChannelLiquidity::decayed_offset_msat
2516                 // would cause an overflow.
2517                 SinceEpoch::advance(Duration::from_secs(10 * 64));
2518                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 125);
2519
2520                 SinceEpoch::advance(Duration::from_secs(10));
2521                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 125);
2522         }
2523
2524         #[test]
2525         fn restricts_liquidity_bounds_after_decay() {
2526                 let logger = TestLogger::new();
2527                 let network_graph = network_graph(&logger);
2528                 let params = ProbabilisticScoringFeeParameters {
2529                         liquidity_penalty_multiplier_msat: 1_000,
2530                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2531                 };
2532                 let decay_params = ProbabilisticScoringDecayParameters {
2533                         liquidity_offset_half_life: Duration::from_secs(10),
2534                         ..ProbabilisticScoringDecayParameters::default()
2535                 };
2536                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2537                 let source = source_node_id();
2538                 let target = target_node_id();
2539                 let usage = ChannelUsage {
2540                         amount_msat: 512,
2541                         inflight_htlc_msat: 0,
2542                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_000 },
2543                 };
2544
2545                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2546
2547                 // More knowledge gives higher confidence (256, 768), meaning a lower penalty.
2548                 scorer.payment_path_failed(&payment_path_for_amount(768), 42);
2549                 scorer.payment_path_failed(&payment_path_for_amount(256), 43);
2550                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 281);
2551
2552                 // Decaying knowledge gives less confidence (128, 896), meaning a higher penalty.
2553                 SinceEpoch::advance(Duration::from_secs(10));
2554                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 291);
2555
2556                 // Reducing the upper bound gives more confidence (128, 832) that the payment amount (512)
2557                 // is closer to the upper bound, meaning a higher penalty.
2558                 scorer.payment_path_successful(&payment_path_for_amount(64));
2559                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 331);
2560
2561                 // Increasing the lower bound gives more confidence (256, 832) that the payment amount (512)
2562                 // is closer to the lower bound, meaning a lower penalty.
2563                 scorer.payment_path_failed(&payment_path_for_amount(256), 43);
2564                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 245);
2565
2566                 // Further decaying affects the lower bound more than the upper bound (128, 928).
2567                 SinceEpoch::advance(Duration::from_secs(10));
2568                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 280);
2569         }
2570
2571         #[test]
2572         fn restores_persisted_liquidity_bounds() {
2573                 let logger = TestLogger::new();
2574                 let network_graph = network_graph(&logger);
2575                 let params = ProbabilisticScoringFeeParameters {
2576                         liquidity_penalty_multiplier_msat: 1_000,
2577                         considered_impossible_penalty_msat: u64::max_value(),
2578                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2579                 };
2580                 let decay_params = ProbabilisticScoringDecayParameters {
2581                         liquidity_offset_half_life: Duration::from_secs(10),
2582                         ..ProbabilisticScoringDecayParameters::default()
2583                 };
2584                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2585                 let source = source_node_id();
2586                 let target = target_node_id();
2587                 let usage = ChannelUsage {
2588                         amount_msat: 500,
2589                         inflight_htlc_msat: 0,
2590                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2591                 };
2592
2593                 scorer.payment_path_failed(&payment_path_for_amount(500), 42);
2594                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2595
2596                 SinceEpoch::advance(Duration::from_secs(10));
2597                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 473);
2598
2599                 scorer.payment_path_failed(&payment_path_for_amount(250), 43);
2600                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2601
2602                 let mut serialized_scorer = Vec::new();
2603                 scorer.write(&mut serialized_scorer).unwrap();
2604
2605                 let mut serialized_scorer = io::Cursor::new(&serialized_scorer);
2606                 let deserialized_scorer =
2607                         <ProbabilisticScorer>::read(&mut serialized_scorer, (decay_params, &network_graph, &logger)).unwrap();
2608                 assert_eq!(deserialized_scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2609         }
2610
2611         #[test]
2612         fn decays_persisted_liquidity_bounds() {
2613                 let logger = TestLogger::new();
2614                 let network_graph = network_graph(&logger);
2615                 let params = ProbabilisticScoringFeeParameters {
2616                         liquidity_penalty_multiplier_msat: 1_000,
2617                         considered_impossible_penalty_msat: u64::max_value(),
2618                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2619                 };
2620                 let decay_params = ProbabilisticScoringDecayParameters {
2621                         liquidity_offset_half_life: Duration::from_secs(10),
2622                         ..ProbabilisticScoringDecayParameters::zero_penalty()
2623                 };
2624                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2625                 let source = source_node_id();
2626                 let target = target_node_id();
2627                 let usage = ChannelUsage {
2628                         amount_msat: 500,
2629                         inflight_htlc_msat: 0,
2630                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2631                 };
2632
2633                 scorer.payment_path_failed(&payment_path_for_amount(500), 42);
2634                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2635
2636                 let mut serialized_scorer = Vec::new();
2637                 scorer.write(&mut serialized_scorer).unwrap();
2638
2639                 SinceEpoch::advance(Duration::from_secs(10));
2640
2641                 let mut serialized_scorer = io::Cursor::new(&serialized_scorer);
2642                 let deserialized_scorer =
2643                         <ProbabilisticScorer>::read(&mut serialized_scorer, (decay_params, &network_graph, &logger)).unwrap();
2644                 assert_eq!(deserialized_scorer.channel_penalty_msat(42, &source, &target, usage, &params), 473);
2645
2646                 scorer.payment_path_failed(&payment_path_for_amount(250), 43);
2647                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2648
2649                 SinceEpoch::advance(Duration::from_secs(10));
2650                 assert_eq!(deserialized_scorer.channel_penalty_msat(42, &source, &target, usage, &params), 365);
2651         }
2652
2653         #[test]
2654         fn scores_realistic_payments() {
2655                 // Shows the scores of "realistic" sends of 100k sats over channels of 1-10m sats (with a
2656                 // 50k sat reserve).
2657                 let logger = TestLogger::new();
2658                 let network_graph = network_graph(&logger);
2659                 let params = ProbabilisticScoringFeeParameters::default();
2660                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2661                 let source = source_node_id();
2662                 let target = target_node_id();
2663
2664                 let usage = ChannelUsage {
2665                         amount_msat: 100_000_000,
2666                         inflight_htlc_msat: 0,
2667                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 950_000_000, htlc_maximum_msat: 1_000 },
2668                 };
2669                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 4375);
2670                 let usage = ChannelUsage {
2671                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2672                 };
2673                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2739);
2674                 let usage = ChannelUsage {
2675                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 2_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2676                 };
2677                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2236);
2678                 let usage = ChannelUsage {
2679                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 3_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2680                 };
2681                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1983);
2682                 let usage = ChannelUsage {
2683                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 4_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2684                 };
2685                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1637);
2686                 let usage = ChannelUsage {
2687                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 5_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2688                 };
2689                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1606);
2690                 let usage = ChannelUsage {
2691                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 6_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2692                 };
2693                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1331);
2694                 let usage = ChannelUsage {
2695                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 7_450_000_000, htlc_maximum_msat: 1_000 }, ..usage
2696                 };
2697                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1387);
2698                 let usage = ChannelUsage {
2699                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 7_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2700                 };
2701                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1379);
2702                 let usage = ChannelUsage {
2703                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 8_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2704                 };
2705                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1363);
2706                 let usage = ChannelUsage {
2707                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 9_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
2708                 };
2709                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 1355);
2710         }
2711
2712         #[test]
2713         fn adds_base_penalty_to_liquidity_penalty() {
2714                 let logger = TestLogger::new();
2715                 let network_graph = network_graph(&logger);
2716                 let source = source_node_id();
2717                 let target = target_node_id();
2718                 let usage = ChannelUsage {
2719                         amount_msat: 128,
2720                         inflight_htlc_msat: 0,
2721                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_000 },
2722                 };
2723
2724                 let params = ProbabilisticScoringFeeParameters {
2725                         liquidity_penalty_multiplier_msat: 1_000,
2726                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2727                 };
2728                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2729                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 58);
2730
2731                 let params = ProbabilisticScoringFeeParameters {
2732                         base_penalty_msat: 500, liquidity_penalty_multiplier_msat: 1_000,
2733                         anti_probing_penalty_msat: 0, ..ProbabilisticScoringFeeParameters::zero_penalty()
2734                 };
2735                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2736                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 558);
2737
2738                 let params = ProbabilisticScoringFeeParameters {
2739                         base_penalty_msat: 500, liquidity_penalty_multiplier_msat: 1_000,
2740                         base_penalty_amount_multiplier_msat: (1 << 30),
2741                         anti_probing_penalty_msat: 0, ..ProbabilisticScoringFeeParameters::zero_penalty()
2742                 };
2743
2744                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2745                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 558 + 128);
2746         }
2747
2748         #[test]
2749         fn adds_amount_penalty_to_liquidity_penalty() {
2750                 let logger = TestLogger::new();
2751                 let network_graph = network_graph(&logger);
2752                 let source = source_node_id();
2753                 let target = target_node_id();
2754                 let usage = ChannelUsage {
2755                         amount_msat: 512_000,
2756                         inflight_htlc_msat: 0,
2757                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 1_000 },
2758                 };
2759
2760                 let params = ProbabilisticScoringFeeParameters {
2761                         liquidity_penalty_multiplier_msat: 1_000,
2762                         liquidity_penalty_amount_multiplier_msat: 0,
2763                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2764                 };
2765                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2766                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2767
2768                 let params = ProbabilisticScoringFeeParameters {
2769                         liquidity_penalty_multiplier_msat: 1_000,
2770                         liquidity_penalty_amount_multiplier_msat: 256,
2771                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2772                 };
2773                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2774                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 337);
2775         }
2776
2777         #[test]
2778         fn calculates_log10_without_overflowing_u64_max_value() {
2779                 let logger = TestLogger::new();
2780                 let network_graph = network_graph(&logger);
2781                 let source = source_node_id();
2782                 let target = target_node_id();
2783                 let usage = ChannelUsage {
2784                         amount_msat: u64::max_value(),
2785                         inflight_htlc_msat: 0,
2786                         effective_capacity: EffectiveCapacity::Infinite,
2787                 };
2788
2789                 let params = ProbabilisticScoringFeeParameters {
2790                         liquidity_penalty_multiplier_msat: 40_000,
2791                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2792                 };
2793                 let decay_params = ProbabilisticScoringDecayParameters::zero_penalty();
2794                 let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2795                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 80_000);
2796         }
2797
2798         #[test]
2799         fn accounts_for_inflight_htlc_usage() {
2800                 let logger = TestLogger::new();
2801                 let network_graph = network_graph(&logger);
2802                 let params = ProbabilisticScoringFeeParameters {
2803                         considered_impossible_penalty_msat: u64::max_value(),
2804                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2805                 };
2806                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2807                 let source = source_node_id();
2808                 let target = target_node_id();
2809
2810                 let usage = ChannelUsage {
2811                         amount_msat: 750,
2812                         inflight_htlc_msat: 0,
2813                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_000, htlc_maximum_msat: 1_000 },
2814                 };
2815                 assert_ne!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2816
2817                 let usage = ChannelUsage { inflight_htlc_msat: 251, ..usage };
2818                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2819         }
2820
2821         #[test]
2822         fn removes_uncertainity_when_exact_liquidity_known() {
2823                 let logger = TestLogger::new();
2824                 let network_graph = network_graph(&logger);
2825                 let params = ProbabilisticScoringFeeParameters::default();
2826                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2827                 let source = source_node_id();
2828                 let target = target_node_id();
2829
2830                 let base_penalty_msat = params.base_penalty_msat;
2831                 let usage = ChannelUsage {
2832                         amount_msat: 750,
2833                         inflight_htlc_msat: 0,
2834                         effective_capacity: EffectiveCapacity::ExactLiquidity { liquidity_msat: 1_000 },
2835                 };
2836                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), base_penalty_msat);
2837
2838                 let usage = ChannelUsage { amount_msat: 1_000, ..usage };
2839                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), base_penalty_msat);
2840
2841                 let usage = ChannelUsage { amount_msat: 1_001, ..usage };
2842                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), u64::max_value());
2843         }
2844
2845         #[test]
2846         fn remembers_historical_failures() {
2847                 let logger = TestLogger::new();
2848                 let network_graph = network_graph(&logger);
2849                 let params = ProbabilisticScoringFeeParameters {
2850                         historical_liquidity_penalty_multiplier_msat: 1024,
2851                         historical_liquidity_penalty_amount_multiplier_msat: 1024,
2852                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2853                 };
2854                 let decay_params = ProbabilisticScoringDecayParameters {
2855                         liquidity_offset_half_life: Duration::from_secs(60 * 60),
2856                         historical_no_updates_half_life: Duration::from_secs(10),
2857                 };
2858                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2859                 let source = source_node_id();
2860                 let target = target_node_id();
2861
2862                 let usage = ChannelUsage {
2863                         amount_msat: 100,
2864                         inflight_htlc_msat: 0,
2865                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_024 },
2866                 };
2867                 // With no historical data the normal liquidity penalty calculation is used.
2868                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 47);
2869                 assert_eq!(scorer.historical_estimated_channel_liquidity_probabilities(42, &target),
2870                         None);
2871
2872                 scorer.payment_path_failed(&payment_path_for_amount(1), 42);
2873                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 2048);
2874                 // The "it failed" increment is 32, where the probability should lie fully in the first
2875                 // octile.
2876                 assert_eq!(scorer.historical_estimated_channel_liquidity_probabilities(42, &target),
2877                         Some(([32, 0, 0, 0, 0, 0, 0, 0], [32, 0, 0, 0, 0, 0, 0, 0])));
2878
2879                 // Even after we tell the scorer we definitely have enough available liquidity, it will
2880                 // still remember that there was some failure in the past, and assign a non-0 penalty.
2881                 scorer.payment_path_failed(&payment_path_for_amount(1000), 43);
2882                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 198);
2883                 // The first octile should be decayed just slightly and the last octile has a new point.
2884                 assert_eq!(scorer.historical_estimated_channel_liquidity_probabilities(42, &target),
2885                         Some(([31, 0, 0, 0, 0, 0, 0, 32], [31, 0, 0, 0, 0, 0, 0, 32])));
2886
2887                 // Advance the time forward 16 half-lives (which the docs claim will ensure all data is
2888                 // gone), and check that we're back to where we started.
2889                 SinceEpoch::advance(Duration::from_secs(10 * 16));
2890                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 47);
2891                 // Once fully decayed we still have data, but its all-0s. In the future we may remove the
2892                 // data entirely instead.
2893                 assert_eq!(scorer.historical_estimated_channel_liquidity_probabilities(42, &target),
2894                         Some(([0; 8], [0; 8])));
2895
2896                 let usage = ChannelUsage {
2897                         amount_msat: 100,
2898                         inflight_htlc_msat: 1024,
2899                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_024 },
2900                 };
2901                 scorer.payment_path_failed(&payment_path_for_amount(1), 42);
2902                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 409);
2903
2904                 let usage = ChannelUsage {
2905                         amount_msat: 1,
2906                         inflight_htlc_msat: 0,
2907                         effective_capacity: EffectiveCapacity::AdvertisedMaxHTLC { amount_msat: 0 },
2908                 };
2909                 assert_eq!(scorer.channel_penalty_msat(42, &target, &source, usage, &params), 2048);
2910
2911                 // Advance to decay all liquidity offsets to zero.
2912                 SinceEpoch::advance(Duration::from_secs(60 * 60 * 10));
2913
2914                 // Use a path in the opposite direction, which have zero for htlc_maximum_msat. This will
2915                 // ensure that the effective capacity is zero to test division-by-zero edge cases.
2916                 let path = vec![
2917                         path_hop(target_pubkey(), 43, 2),
2918                         path_hop(source_pubkey(), 42, 1),
2919                         path_hop(sender_pubkey(), 41, 0),
2920                 ];
2921                 scorer.payment_path_failed(&Path { hops: path, blinded_tail: None }, 42);
2922         }
2923
2924         #[test]
2925         fn adds_anti_probing_penalty() {
2926                 let logger = TestLogger::new();
2927                 let network_graph = network_graph(&logger);
2928                 let source = source_node_id();
2929                 let target = target_node_id();
2930                 let params = ProbabilisticScoringFeeParameters {
2931                         anti_probing_penalty_msat: 500,
2932                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2933                 };
2934                 let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
2935
2936                 // Check we receive no penalty for a low htlc_maximum_msat.
2937                 let usage = ChannelUsage {
2938                         amount_msat: 512_000,
2939                         inflight_htlc_msat: 0,
2940                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 1_000 },
2941                 };
2942                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2943
2944                 // Check we receive anti-probing penalty for htlc_maximum_msat == channel_capacity.
2945                 let usage = ChannelUsage {
2946                         amount_msat: 512_000,
2947                         inflight_htlc_msat: 0,
2948                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 1_024_000 },
2949                 };
2950                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 500);
2951
2952                 // Check we receive anti-probing penalty for htlc_maximum_msat == channel_capacity/2.
2953                 let usage = ChannelUsage {
2954                         amount_msat: 512_000,
2955                         inflight_htlc_msat: 0,
2956                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 512_000 },
2957                 };
2958                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 500);
2959
2960                 // Check we receive no anti-probing penalty for htlc_maximum_msat == channel_capacity/2 - 1.
2961                 let usage = ChannelUsage {
2962                         amount_msat: 512_000,
2963                         inflight_htlc_msat: 0,
2964                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024_000, htlc_maximum_msat: 511_999 },
2965                 };
2966                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 0);
2967         }
2968
2969         #[test]
2970         fn scores_with_blinded_path() {
2971                 // Make sure we'll account for a blinded path's final_value_msat in scoring
2972                 let logger = TestLogger::new();
2973                 let network_graph = network_graph(&logger);
2974                 let params = ProbabilisticScoringFeeParameters {
2975                         liquidity_penalty_multiplier_msat: 1_000,
2976                         ..ProbabilisticScoringFeeParameters::zero_penalty()
2977                 };
2978                 let decay_params = ProbabilisticScoringDecayParameters::default();
2979                 let mut scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
2980                 let source = source_node_id();
2981                 let target = target_node_id();
2982                 let usage = ChannelUsage {
2983                         amount_msat: 512,
2984                         inflight_htlc_msat: 0,
2985                         effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_024, htlc_maximum_msat: 1_000 },
2986                 };
2987                 assert_eq!(scorer.channel_penalty_msat(42, &source, &target, usage, &params), 300);
2988
2989                 let mut path = payment_path_for_amount(768);
2990                 let recipient_hop = path.hops.pop().unwrap();
2991                 let blinded_path = BlindedPath {
2992                         introduction_node_id: path.hops.last().as_ref().unwrap().pubkey,
2993                         blinding_point: test_utils::pubkey(42),
2994                         blinded_hops: vec![
2995                                 BlindedHop { blinded_node_id: test_utils::pubkey(44), encrypted_payload: Vec::new() }
2996                         ],
2997                 };
2998                 path.blinded_tail = Some(BlindedTail {
2999                         hops: blinded_path.blinded_hops,
3000                         blinding_point: blinded_path.blinding_point,
3001                         excess_final_cltv_expiry_delta: recipient_hop.cltv_expiry_delta,
3002                         final_value_msat: recipient_hop.fee_msat,
3003                 });
3004
3005                 // Check the liquidity before and after scoring payment failures to ensure the blinded path's
3006                 // final value is taken into account.
3007                 assert!(scorer.channel_liquidities.get(&42).is_none());
3008
3009                 scorer.payment_path_failed(&path, 42);
3010                 path.blinded_tail.as_mut().unwrap().final_value_msat = 256;
3011                 scorer.payment_path_failed(&path, 43);
3012
3013                 let liquidity = scorer.channel_liquidities.get(&42).unwrap()
3014                         .as_directed(&source, &target, 0, 1_000, decay_params);
3015                 assert_eq!(liquidity.min_liquidity_msat(), 256);
3016                 assert_eq!(liquidity.max_liquidity_msat(), 768);
3017         }
3018 }