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