pub struct ProbabilisticScoringFeeParameters {
pub base_penalty_msat: u64,
pub base_penalty_amount_multiplier_msat: u64,
pub liquidity_penalty_multiplier_msat: u64,
pub liquidity_penalty_amount_multiplier_msat: u64,
pub historical_liquidity_penalty_multiplier_msat: u64,
pub historical_liquidity_penalty_amount_multiplier_msat: u64,
pub manual_node_penalties: HashMap<NodeId, u64>,
pub anti_probing_penalty_msat: u64,
pub considered_impossible_penalty_msat: u64,
}
Expand description
Parameters for configuring ProbabilisticScorer
.
Used to configure base, liquidity, and amount penalties, the sum of which comprises the channel penalty (i.e., the amount in msats willing to be paid to avoid routing through the channel).
The penalty applied to any channel by the ProbabilisticScorer
is the sum of each of the
parameters here.
Fields§
§base_penalty_msat: u64
A fixed penalty in msats to apply to each channel.
Default value: 500 msat
base_penalty_amount_multiplier_msat: u64
A multiplier used with the payment amount to calculate a fixed penalty applied to each
channel, in excess of the base_penalty_msat
.
The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
fees plus penalty) for large payments. The penalty is computed as the product of this
multiplier and 2^30
ths of the payment amount.
ie base_penalty_amount_multiplier_msat * amount_msat / 2^30
Default value: 8,192 msat
liquidity_penalty_multiplier_msat: u64
A multiplier used in conjunction with the negative log10
of the channel’s success
probability for a payment, as determined by our latest estimates of the channel’s
liquidity, to determine the liquidity penalty.
The penalty is based in part on the knowledge learned from prior successful and unsuccessful
payments. This knowledge is decayed over time based on liquidity_offset_half_life
. The
penalty is effectively limited to 2 * liquidity_penalty_multiplier_msat
(corresponding to
lower bounding the success probability to 0.01
) when the amount falls within the
uncertainty bounds of the channel liquidity balance. Amounts above the upper bound will
result in a u64::max_value
penalty, however.
-log10(success_probability) * liquidity_penalty_multiplier_msat
Default value: 30,000 msat
liquidity_penalty_amount_multiplier_msat: u64
A multiplier used in conjunction with a payment amount and the negative log10
of the
channel’s success probability for the payment, as determined by our latest estimates of the
channel’s liquidity, to determine the amount penalty.
The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
fees plus penalty) for large payments. The penalty is computed as the product of this
multiplier and 2^20
ths of the payment amount, weighted by the negative log10
of the
success probability.
-log10(success_probability) * liquidity_penalty_amount_multiplier_msat * amount_msat / 2^20
In practice, this means for 0.1 success probability (-log10(0.1) == 1
) each 2^20
th of
the amount will result in a penalty of the multiplier. And, as the success probability
decreases, the negative log10
weighting will increase dramatically. For higher success
probabilities, the multiplier will have a decreasing effect as the negative log10
will
fall below 1
.
Default value: 192 msat
historical_liquidity_penalty_multiplier_msat: u64
A multiplier used in conjunction with the negative log10
of the channel’s success
probability for the payment, as determined based on the history of our estimates of the
channel’s available liquidity, to determine a penalty.
This penalty is similar to liquidity_penalty_multiplier_msat
, however, instead of using
only our latest estimate for the current liquidity available in the channel, it estimates
success probability based on the estimated liquidity available in the channel through
history. Specifically, every time we update our liquidity bounds on a given channel, we
track which of several buckets those bounds fall into, exponentially decaying the
probability of each bucket as new samples are added.
Default value: 10,000 msat
historical_liquidity_penalty_amount_multiplier_msat: u64
A multiplier used in conjunction with the payment amount and the negative log10
of the
channel’s success probability for the payment, as determined based on the history of our
estimates of the channel’s available liquidity, to determine a penalty.
The purpose of the amount penalty is to avoid having fees dominate the channel cost for
large payments. The penalty is computed as the product of this multiplier and the 2^20
ths
of the payment amount, weighted by the negative log10
of the success probability.
This penalty is similar to liquidity_penalty_amount_multiplier_msat
, however, instead
of using only our latest estimate for the current liquidity available in the channel, it
estimates success probability based on the estimated liquidity available in the channel
through history. Specifically, every time we update our liquidity bounds on a given
channel, we track which of several buckets those bounds fall into, exponentially decaying
the probability of each bucket as new samples are added.
Default value: 64 msat
manual_node_penalties: HashMap<NodeId, u64>
Manual penalties used for the given nodes. Allows to set a particular penalty for a given
node. Note that a manual penalty of u64::max_value()
means the node would not ever be
considered during path finding.
This is not exported to bindings users
anti_probing_penalty_msat: u64
This penalty is applied when htlc_maximum_msat
is equal to or larger than half of the
channel’s capacity, (ie. htlc_maximum_msat ≥ 0.5 * channel_capacity) which makes us
prefer nodes with a smaller htlc_maximum_msat
. We treat such nodes preferentially
as this makes balance discovery attacks harder to execute, thereby creating an incentive
to restrict htlc_maximum_msat
and improve privacy.
Default value: 250 msat
considered_impossible_penalty_msat: u64
This penalty is applied when the amount we’re attempting to send over a channel exceeds our current estimate of the channel’s available liquidity.
Note that in this case all other penalties, including the
liquidity_penalty_multiplier_msat
and liquidity_penalty_amount_multiplier_msat
-based
penalties, as well as the base_penalty_msat
and the anti_probing_penalty_msat
, if
applicable, are still included in the overall penalty.
If you wish to avoid creating paths with such channels entirely, setting this to a value of
u64::max_value()
will guarantee that.
Default value: 1_0000_0000_000 msat (1 Bitcoin)
Implementations§
§impl ProbabilisticScoringFeeParameters
impl ProbabilisticScoringFeeParameters
pub fn add_banned(&mut self, node_id: &NodeId)
pub fn add_banned(&mut self, node_id: &NodeId)
Marks the node with the given node_id
as banned,
i.e it will be avoided during path finding.
pub fn add_banned_from_list(&mut self, node_ids: Vec<NodeId>)
pub fn add_banned_from_list(&mut self, node_ids: Vec<NodeId>)
Marks all nodes in the given list as banned, i.e., they will be avoided during path finding.
pub fn remove_banned(&mut self, node_id: &NodeId)
pub fn remove_banned(&mut self, node_id: &NodeId)
Removes the node with the given node_id
from the list of nodes to avoid.
pub fn set_manual_penalty(&mut self, node_id: &NodeId, penalty: u64)
pub fn set_manual_penalty(&mut self, node_id: &NodeId, penalty: u64)
Sets a manual penalty for the given node.
pub fn remove_manual_penalty(&mut self, node_id: &NodeId)
pub fn remove_manual_penalty(&mut self, node_id: &NodeId)
Removes the node with the given node_id
from the list of manual penalties.
pub fn clear_manual_penalties(&mut self)
pub fn clear_manual_penalties(&mut self)
Clears the list of manual penalties that are applied during path finding.
Trait Implementations§
§impl Clone for ProbabilisticScoringFeeParameters
impl Clone for ProbabilisticScoringFeeParameters
§fn clone(&self) -> ProbabilisticScoringFeeParameters
fn clone(&self) -> ProbabilisticScoringFeeParameters
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Default for ProbabilisticScoringFeeParameters
impl Default for ProbabilisticScoringFeeParameters
§fn default() -> ProbabilisticScoringFeeParameters
fn default() -> ProbabilisticScoringFeeParameters
Auto Trait Implementations§
impl Freeze for ProbabilisticScoringFeeParameters
impl RefUnwindSafe for ProbabilisticScoringFeeParameters
impl Send for ProbabilisticScoringFeeParameters
impl Sync for ProbabilisticScoringFeeParameters
impl Unpin for ProbabilisticScoringFeeParameters
impl UnwindSafe for ProbabilisticScoringFeeParameters
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request