CongestionControlConfig

Struct CongestionControlConfig 

Source
pub struct CongestionControlConfig {
    pub max_congestion_incoming_gas: Gas,
    pub max_congestion_outgoing_gas: Gas,
    pub max_congestion_memory_consumption: u64,
    pub max_congestion_missed_chunks: u64,
    pub max_outgoing_gas: Gas,
    pub min_outgoing_gas: Gas,
    pub allowed_shard_outgoing_gas: Gas,
    pub max_tx_gas: Gas,
    pub min_tx_gas: Gas,
    pub reject_tx_congestion_threshold: f64,
    pub outgoing_receipts_usual_size_limit: u64,
    pub outgoing_receipts_big_size_limit: u64,
}
Expand description

The configuration for congestion control.

Fields§

§max_congestion_incoming_gas: Gas

How much gas in delayed receipts of a shard is 100% incoming congestion.

Based on incoming congestion levels, a shard reduces the gas it spends on accepting new transactions instead of working on incoming receipts. Plus, incoming congestion contributes to overall congestion, which reduces how much other shards are allowed to forward to this shard.

§max_congestion_outgoing_gas: Gas

How much gas in outgoing buffered receipts of a shard is 100% congested.

Outgoing congestion contributes to overall congestion, which reduces how much other shards are allowed to forward to this shard.

§max_congestion_memory_consumption: u64

How much memory space of all delayed and buffered receipts in a shard is considered 100% congested.

Memory congestion contributes to overall congestion, which reduces how much other shards are allowed to forward to this shard.

This threshold limits memory requirements of validators to a degree but it is not a hard guarantee.

§max_congestion_missed_chunks: u64

How many missed chunks in a row in a shard is considered 100% congested.

§max_outgoing_gas: Gas

The maximum amount of gas attached to receipts a shard can forward to another shard per chunk.

The actual gas forwarding allowance is a linear interpolation between MIN_OUTGOING_GAS and MAX_OUTGOING_GAS, or 0 if the receiver is fully congested.

§min_outgoing_gas: Gas

The minimum gas each shard can send to a shard that is not fully congested.

The actual gas forwarding allowance is a linear interpolation between MIN_OUTGOING_GAS and MAX_OUTGOING_GAS, or 0 if the receiver is fully congested.

§allowed_shard_outgoing_gas: Gas

How much gas the chosen allowed shard can send to a 100% congested shard.

This amount is the absolute minimum of new workload a congested shard has to accept every round. It ensures deadlocks are provably impossible. But in ideal conditions, the gradual reduction of new workload entering the system combined with gradually limited forwarding to congested shards should prevent shards from becoming 100% congested in the first place.

§max_tx_gas: Gas

The maximum amount of gas in a chunk spent on converting new transactions to receipts.

The actual gas forwarding allowance is a linear interpolation between MIN_OUTGOING_GAS and MAX_OUTGOING_GAS, based on the incoming congestion of the local shard. Additionally, transactions can be rejected if the receiving remote shard is congested more than REJECT_TX_CONGESTION_THRESHOLD based on their general congestion level.

§min_tx_gas: Gas

The minimum amount of gas in a chunk spent on converting new transactions to receipts, as long as the receiving shard is not congested.

The actual gas forwarding allowance is a linear interpolation between MIN_OUTGOING_GAS and MAX_OUTGOING_GAS, based on the incoming congestion of the local shard. Additionally, transactions can be rejected if the receiving remote shard is congested more than REJECT_TX_CONGESTION_THRESHOLD based on their general congestion level.

§reject_tx_congestion_threshold: f64

How much congestion a shard can tolerate before it stops all shards from accepting new transactions with the receiver set to the congested shard.

§outgoing_receipts_usual_size_limit: u64

The standard size limit for outgoing receipts aimed at a single shard. This limit is pretty small to keep the size of source_receipt_proofs under control. It limits the total sum of outgoing receipts, not individual receipts.

§outgoing_receipts_big_size_limit: u64

Large size limit for outgoing receipts to a shard, used when it’s safe to send a lot of receipts without making the state witness too large. It limits the total sum of outgoing receipts, not individual receipts.

Implementations§

Source§

impl CongestionControlConfig

Source

pub fn test_disabled() -> Self

Creates a config where congestion control is disabled. This config can be used for tests. It can be useful e.g. in tests with missing chunks where we still want to process all transactions.

Trait Implementations§

Source§

impl Clone for CongestionControlConfig

Source§

fn clone(&self) -> CongestionControlConfig

Returns a duplicate 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 CongestionControlConfig

Source§

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

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

impl From<CongestionControlConfig> for CongestionControlConfigView

Source§

fn from(other: CongestionControlConfig) -> Self

Converts to this type from the input type.
Source§

impl From<CongestionControlConfigView> for CongestionControlConfig

Source§

fn from(other: CongestionControlConfigView) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for CongestionControlConfig

Source§

fn eq(&self, other: &CongestionControlConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CongestionControlConfig

Source§

impl Eq for CongestionControlConfig

Source§

impl StructuralPartialEq for CongestionControlConfig

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, dest: *mut u8)

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

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
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.