Struct fuel_gas_price_algorithm::v1::AlgorithmV1
source · pub struct AlgorithmV1 { /* private fields */ }Expand description
An algorithm for calculating the gas price for the next block
The algorithm breaks up the gas price into two components:
- The execution gas price, which is used to cover the cost of executing the next block as well as moderating the congestion of the network by increasing the price when traffic is high.
- The data availability (DA) gas price, which is used to cover the cost of recording the block on the DA chain
The execution gas price is calculated eagerly based on the fullness of the last received l2 block. Each block has a capacity threshold, and if the block is above this threshold, the gas price is increased. If it is below the threshold, the gas price is decreased. The gas price can only change by a fixed amount each block.
The DA gas price is calculated based on the profit of previous blocks. The profit is the difference between the rewards from the DA portion of the gas price and the cost of recording the blocks on the DA chain. The algorithm uses a naive PID controller to calculate the change in the DA gas price. The “P” portion of the new gas price is “proportional” to the profit, either negative or positive. The “D” portion is derived from the slope or change in the profits since the last block.
if p > 0 and dp/db > 0, decrease if p > 0 and dp/db < 0, hold/moderate if p < 0 and dp/db < 0, increase if p < 0 and dp/db > 0, hold/moderate
The DA portion also uses a moving average of the profits over the last avg_window blocks
instead of the actual profit. Setting the avg_window to 1 will effectively disable the
moving average.
Implementations§
Trait Implementations§
source§impl Clone for AlgorithmV1
impl Clone for AlgorithmV1
source§fn clone(&self) -> AlgorithmV1
fn clone(&self) -> AlgorithmV1
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for AlgorithmV1
impl Debug for AlgorithmV1
source§impl PartialEq for AlgorithmV1
impl PartialEq for AlgorithmV1
impl StructuralPartialEq for AlgorithmV1
Auto Trait Implementations§
impl Freeze for AlgorithmV1
impl RefUnwindSafe for AlgorithmV1
impl Send for AlgorithmV1
impl Sync for AlgorithmV1
impl Unpin for AlgorithmV1
impl UnwindSafe for AlgorithmV1
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)