pub struct ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,
{ /* private fields */ }
Expand description

Probabilistic ScoreLookUp implementation.

This is not exported to bindings users generally all users should use the ProbabilisticScorer type alias.

Implementations§

§

impl<G, L, T> ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,

pub fn new( decay_params: ProbabilisticScoringDecayParameters, network_graph: G, logger: L, ) -> ProbabilisticScorerUsingTime<G, L, T>

Creates a new scorer using the given scoring parameters for sending payments from a node through a network graph.

pub fn debug_log_liquidity_stats(&self)

Dump the contents of this scorer into the configured logger.

Note that this writes roughly one line per channel for which we have a liquidity estimate, which may be a substantial amount of log output.

pub fn estimated_channel_liquidity_range( &self, scid: u64, target: &NodeId, ) -> Option<(u64, u64)>

Query the estimated minimum and maximum liquidity available for sending a payment over the channel with scid towards the given target node.

pub fn historical_estimated_channel_liquidity_probabilities( &self, scid: u64, target: &NodeId, ) -> Option<([u16; 32], [u16; 32])>

Query the historical estimated minimum and maximum liquidity available for sending a payment over the channel with scid towards the given target node.

Returns two sets of 32 buckets. The first set describes the lower-bound liquidity history, the second set describes the upper-bound liquidity history. Each bucket describes the relative frequency at which we’ve seen a liquidity bound in the bucket’s range relative to the channel’s total capacity, on an arbitrary scale. Because the values are slowly decayed, more recent data points are weighted more heavily than older datapoints.

Note that the range of each bucket varies by its location to provide more granular results at the edges of a channel’s capacity, where it is more likely to sit.

When scoring, the estimated probability that an upper-/lower-bound lies in a given bucket is calculated by dividing that bucket’s value with the total value of all buckets.

For example, using a lower bucket count for illustrative purposes, a value of [0, 0, 0, ..., 0, 32] indicates that we believe the probability of a bound being very close to the channel’s capacity to be 100%, and have never (recently) seen it in any other bucket. A value of [31, 0, 0, ..., 0, 0, 32] indicates we’ve seen the bound being both in the top and bottom bucket, and roughly with similar (recent) frequency.

Because the datapoints are decayed slowly over time, values will eventually return to Some(([1; 32], [1; 32])) and then to None once no datapoints remain.

In order to fetch a single success probability from the buckets provided here, as used in the scoring model, see Self::historical_estimated_payment_success_probability.

pub fn historical_estimated_payment_success_probability( &self, scid: u64, target: &NodeId, amount_msat: u64, params: &ProbabilisticScoringFeeParameters, ) -> Option<f64>

Query the probability of payment success sending the given amount_msat over the channel with scid towards the given target node, based on the historical estimated liquidity bounds.

These are the same bounds as returned by Self::historical_estimated_channel_liquidity_probabilities (but not those returned by Self::estimated_channel_liquidity_range).

Trait Implementations§

§

impl<G, L, T> ReadableArgs<(ProbabilisticScoringDecayParameters, G, L)> for ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,

§

fn read<R>( r: &mut R, args: (ProbabilisticScoringDecayParameters, G, L), ) -> Result<ProbabilisticScorerUsingTime<G, L, T>, DecodeError>
where R: Read,

Reads a Self in from the given Read.
§

impl<G, L, T> ScoreLookUp for ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,

§

type ScoreParams = ProbabilisticScoringFeeParameters

A configurable type which should contain various passed-in parameters for configuring the scorer, on a per-routefinding-call basis through to the scorer methods, which are used to determine the parameters for the suitability of channels for use.
§

fn channel_penalty_msat( &self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &ProbabilisticScoringFeeParameters, ) -> u64

Returns the fee in msats willing to be paid to avoid routing send_amt_msat through the given channel in the direction from source to target. Read more
§

impl<G, L, T> ScoreUpdate for ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,

§

fn payment_path_failed(&mut self, path: &Path, short_channel_id: u64)

Handles updating channel penalties after failing to route through a channel.
§

fn payment_path_successful(&mut self, path: &Path)

Handles updating channel penalties after successfully routing along a path.
§

fn probe_failed(&mut self, path: &Path, short_channel_id: u64)

Handles updating channel penalties after a probe over the given path failed.
§

fn probe_successful(&mut self, path: &Path)

Handles updating channel penalties after a probe over the given path succeeded.
§

impl<G, L, T> Writeable for ProbabilisticScorerUsingTime<G, L, T>
where G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time, <L as Deref>::Target: Logger,

§

fn write<W>(&self, w: &mut W) -> Result<(), Error>
where W: Writer,

Writes self out to the given Writer.
§

fn encode(&self) -> Vec<u8>

Writes self out to a Vec<u8>.
§

fn serialized_length(&self) -> usize

Gets the length of this object after it has been serialized. This can be overridden to optimize cases where we prepend an object with its length.

Auto Trait Implementations§

§

impl<G, L, T> Freeze for ProbabilisticScorerUsingTime<G, L, T>
where G: Freeze, L: Freeze,

§

impl<G, L, T> RefUnwindSafe for ProbabilisticScorerUsingTime<G, L, T>

§

impl<G, L, T> Send for ProbabilisticScorerUsingTime<G, L, T>
where G: Send, L: Send, T: Send,

§

impl<G, L, T> Sync for ProbabilisticScorerUsingTime<G, L, T>
where G: Sync, L: Sync, T: Sync,

§

impl<G, L, T> Unpin for ProbabilisticScorerUsingTime<G, L, T>
where G: Unpin, L: Unpin, T: Unpin,

§

impl<G, L, T> UnwindSafe for ProbabilisticScorerUsingTime<G, L, T>
where G: UnwindSafe, L: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Any for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

§

fn type_name(&self) -> &'static str

§

impl<T> AnySync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

§

impl<T> AsAny for T
where T: Any,

§

fn as_any(&self) -> &(dyn Any + 'static)

§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

§

fn type_name(&self) -> &'static str

Gets the type name of self
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: AsAny + ?Sized,

§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> DartSafe for T

§

impl<T> Score for T