Struct cuprate_dandelion_tower::DandelionConfig

source ·
pub struct DandelionConfig {
    pub time_between_hop: Duration,
    pub epoch_duration: Duration,
    pub fluff_probability: f64,
    pub graph: Graph,
}
Expand description

The config used to initialize dandelion.

One notable missing item from the config is Tbase AKA the timeout parameter to prevent black hole attacks. This is removed from the config for simplicity, Tbase is calculated using the formula provided in the D++ paper:

(-k*(k-1)*hop)/(2*log(1-ep))

Where k is calculated from the fluff probability, hop is time_between_hop and ep is fixed at 0.1.

Fields§

§time_between_hop: Duration

The time it takes for a stem transaction to pass through a node, including network latency.

It’s better to be safe and put a slightly higher value than lower.

§epoch_duration: Duration

The duration of an epoch.

§fluff_probability: f64

q in the dandelion paper, this is the probability that a node will be in the fluff state for a certain epoch.

The dandelion paper recommends to make this value small, but the smaller this value, the higher the broadcast latency.

It is recommended for this value to be <= 0.2, this value MUST be in range 0.0..=1.0.

§graph: Graph

The graph type.

Implementations§

source§

impl DandelionConfig

source

pub fn number_of_stems(&self) -> usize

Returns the number of outbound peers to use to stem transactions.

This value depends on the Graph chosen.

source

pub fn average_embargo_timeout(&self) -> Duration

Returns the average embargo timeout, Tbase in the dandelion++ paper.

This is the average embargo timeout only including this node with k nodes also putting an embargo timeout using the exponential distribution, the average until one of them fluffs is Tbase / k.

source

pub fn expected_stem_length(&self) -> f64

Returns the expected length of a stem.

Trait Implementations§

source§

impl Clone for DandelionConfig

source§

fn clone(&self) -> DandelionConfig

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DandelionConfig

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Copy for DandelionConfig

Auto Trait Implementations§

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
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
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

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

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

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> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

source§

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>,

source§

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.
source§

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

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

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
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 48 bytes