L2PricingState

Struct L2PricingState 

Source
pub struct L2PricingState<D> {
    pub backing_storage: Storage<D>,
    pub arbos_version: u64,
    /* private fields */
}
Expand description

L2 pricing state manages gas pricing for L2 execution.

Fields§

§backing_storage: Storage<D>§arbos_version: u64

Implementations§

Source§

impl<D: Database> L2PricingState<D>

Source

pub fn gas_model_to_use(&self) -> Result<GasModel, ()>

Determine which gas model to use based on ArbOS version and stored constraints.

Source

pub fn grow_backlog( &self, used_gas: u64, used_multi_gas: MultiGas, ) -> Result<(), ()>

Grow the gas backlog for the active pricing model.

Source

pub fn shrink_backlog( &self, used_gas: u64, used_multi_gas: MultiGas, ) -> Result<(), ()>

Shrink the gas backlog for the active pricing model.

Source

pub fn update_pricing_model( &self, time_passed: u64, arbos_version: u64, ) -> Result<(), ()>

Update the pricing model for a new block.

Source

pub fn calc_multi_gas_constraints_exponents(&self) -> Result<[u64; 8], ()>

Calculate exponent (in basis points) per resource kind across all constraints.

Aggregates weighted backlog contributions from each constraint into a per-resource-kind exponent array.

Uses signed saturation arithmetic with Bips (int64) computation: dividend = NaturalToBips(SaturatingCast]int64](SaturatingUMul(backlog, weight))) divisor = SaturatingCastToBips(SaturatingUMul(window, SaturatingUMul(target, maxWeight))) exp = dividend / divisor (signed int64 division)

Source

pub fn calc_base_fee_from_exponent( &self, exponent_bips: u64, ) -> Result<U256, ()>

Calculate base fee from an exponent in basis points. base_fee = min_base_fee * exp(exponent_bips / 10000)

Source

pub fn get_multi_gas_base_fee_per_resource(&self) -> Result<[U256; 8], ()>

Get multi-gas current-block base fee per resource kind.

L1Calldata kind is always forced to the global base fee, and any zero fee is replaced with the global base fee.

Source

pub fn commit_multi_gas_fees(&self) -> Result<(), ()>

Rotate next-block multi-gas fees into current-block fees.

Called at block start before executing transactions.

Source

pub fn backlog_update_cost(&self) -> Result<u64, ()>

Calculate the cost for a backlog update operation.

Version-gated cost accounting:

  • v60+: static cost (StorageReadCost + StorageWriteCost)
  • v51+: overhead for single-gas constraint traversal
  • v50+: base overhead for GasModelToUse() read
  • legacy: read + write for backlog
Source

pub fn set_gas_constraints_from_legacy(&self) -> Result<(), ()>

Set gas constraints from legacy parameters (for upgrades).

Source

pub fn set_multi_gas_constraints_from_single_gas_constraints( &self, ) -> Result<(), ()>

Convert single-gas constraints to multi-gas constraints (for upgrades).

Iterates existing single-gas constraints, reads their target/window/backlog, and creates corresponding multi-gas constraints with equal weights across all resource dimensions.

Source

pub fn multi_dimensional_price_for_refund( &self, gas_used: MultiGas, ) -> Result<U256, ()>

Compute total cost for a multi-gas usage, for refund calculations.

Returns sum(gas_used[kind] * base_fee[kind]) across all resource kinds.

Source§

impl<D: Database> L2PricingState<D>

Source

pub fn open(sto: Storage<D>, arbos_version: u64) -> Self

Source

pub fn initialize(sto: &Storage<D>)

Source

pub fn base_fee_wei(&self) -> Result<U256, ()>

Source

pub fn set_base_fee_wei(&self, val: U256) -> Result<(), ()>

Source

pub fn min_base_fee_wei(&self) -> Result<U256, ()>

Source

pub fn set_min_base_fee_wei(&self, val: U256) -> Result<(), ()>

Source

pub fn speed_limit_per_second(&self) -> Result<u64, ()>

Source

pub fn set_speed_limit_per_second(&self, limit: u64) -> Result<(), ()>

Source

pub fn per_block_gas_limit(&self) -> Result<u64, ()>

Source

pub fn set_max_per_block_gas_limit(&self, limit: u64) -> Result<(), ()>

Source

pub fn per_tx_gas_limit(&self) -> Result<u64, ()>

Source

pub fn set_max_per_tx_gas_limit(&self, limit: u64) -> Result<(), ()>

Source

pub fn gas_backlog(&self) -> Result<u64, ()>

Source

pub fn set_gas_backlog(&self, backlog: u64) -> Result<(), ()>

Source

pub fn pricing_inertia(&self) -> Result<u64, ()>

Source

pub fn set_pricing_inertia(&self, val: u64) -> Result<(), ()>

Source

pub fn backlog_tolerance(&self) -> Result<u64, ()>

Source

pub fn set_backlog_tolerance(&self, val: u64) -> Result<(), ()>

Source

pub fn gas_constraints_length(&self) -> Result<u64, ()>

Source

pub fn open_gas_constraint_at(&self, index: u64) -> GasConstraint<D>

Source

pub fn add_gas_constraint( &self, target: u64, adjustment_window: u64, backlog: u64, ) -> Result<(), ()>

Source

pub fn clear_gas_constraints(&self) -> Result<(), ()>

Source

pub fn multi_gas_constraints_length(&self) -> Result<u64, ()>

Source

pub fn open_multi_gas_constraint_at(&self, index: u64) -> MultiGasConstraint<D>

Source

pub fn add_multi_gas_constraint( &self, target: u64, adjustment_window: u32, backlog: u64, weights: &[u64; 8], ) -> Result<(), ()>

Source

pub fn clear_multi_gas_constraints(&self) -> Result<(), ()>

Source

pub fn restrict(&self, _err: ())

Auto Trait Implementations§

§

impl<D> Freeze for L2PricingState<D>

§

impl<D> RefUnwindSafe for L2PricingState<D>
where D: RefUnwindSafe,

§

impl<D> Send for L2PricingState<D>
where D: Send,

§

impl<D> Sync for L2PricingState<D>
where D: Sync,

§

impl<D> Unpin for L2PricingState<D>

§

impl<D> UnwindSafe for L2PricingState<D>
where D: RefUnwindSafe,

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a [TxEnv] from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a [TxEnv] from a transaction, its sender, and encoded transaction bytes.
§

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
§

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> ErasedDestructor for T
where T: 'static,