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