Struct CfgEnv

Source
#[non_exhaustive]
pub struct CfgEnv<SPEC = SpecId> { pub chain_id: u64, pub tx_chain_id_check: bool, pub spec: SPEC, pub limit_contract_code_size: Option<usize>, pub limit_contract_initcode_size: Option<usize>, pub disable_nonce_check: bool, pub max_blobs_per_tx: Option<u64>, pub blob_base_fee_update_fraction: Option<u64>, pub tx_gas_limit_cap: Option<u64>, pub disable_eip3607: bool, }
Expand description

EVM configuration

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§chain_id: u64

Chain ID of the EVM. Used in CHAINID opcode and transaction’s chain ID check.

Chain ID is introduced EIP-155.

§tx_chain_id_check: bool

Whether to check the transaction’s chain ID.

If set to false, the transaction’s chain ID check will be skipped.

§spec: SPEC

Specification for EVM represent the hardfork

§limit_contract_code_size: Option<usize>

Contract code size limit override.

If None, the limit will be determined by the SpecId (EIP-170 or EIP-7907) at runtime. If Some, this specific limit will be used regardless of SpecId.

Useful to increase this because of tests.

§limit_contract_initcode_size: Option<usize>

Contract initcode size limit override.

If None, the limit will check if limit_contract_code_size is set. If it is set, it will double it for a limit. If it is not set, the limit will be determined by the SpecId (EIP-170 or EIP-7907) at runtime.

Useful to increase this because of tests.

§disable_nonce_check: bool

Skips the nonce validation against the account’s nonce

§max_blobs_per_tx: Option<u64>

Blob max count. EIP-7840 Add blob schedule to EL config files.

If this config is not set, the check for max blobs will be skipped.

§blob_base_fee_update_fraction: Option<u64>

Blob base fee update fraction. EIP-4844 Blob base fee update fraction.

If this config is not set, the blob base fee update fraction will be set to the default value. See also CfgEnv::blob_base_fee_update_fraction.

Default values for Cancun is primitives::eip4844::BLOB_BASE_FEE_UPDATE_FRACTION_CANCUN and for Prague is primitives::eip4844::BLOB_BASE_FEE_UPDATE_FRACTION_PRAGUE.

§tx_gas_limit_cap: Option<u64>

Configures the gas limit cap for the transaction.

If None, default value defined by spec will be used.

Introduced in Osaka in EIP-7825: Transaction Gas Limit Cap with initials cap of 30M.

§disable_eip3607: bool

EIP-3607 rejects transactions from senders with deployed code

In development, it can be desirable to simulate calls from contracts, which this setting allows.

By default, it is set to false.

Implementations§

Source§

impl CfgEnv

Source

pub fn new() -> Self

Creates new CfgEnv with default values.

Source§

impl<SPEC: Into<SpecId> + Copy> CfgEnv<SPEC>

Source

pub fn blob_base_fee_update_fraction(&mut self) -> u64

Returns the blob base fee update fraction from CfgEnv::blob_base_fee_update_fraction.

If this field is not set, return the default value for the spec.

Default values for Cancun is primitives::eip4844::BLOB_BASE_FEE_UPDATE_FRACTION_CANCUN and for Prague is primitives::eip4844::BLOB_BASE_FEE_UPDATE_FRACTION_PRAGUE.

Source§

impl<SPEC> CfgEnv<SPEC>

Source

pub fn new_with_spec(spec: SPEC) -> Self

Create new CfgEnv with default values and specified spec.

Source

pub fn with_chain_id(self, chain_id: u64) -> Self

Consumes self and returns a new CfgEnv with the specified chain ID.

Source

pub fn enable_tx_chain_id_check(self) -> Self

Enables the transaction’s chain ID check.

Source

pub fn disable_tx_chain_id_check(self) -> Self

Disables the transaction’s chain ID check.

Source

pub fn with_spec<OSPEC: Into<SpecId>>(self, spec: OSPEC) -> CfgEnv<OSPEC>

Consumes self and returns a new CfgEnv with the specified spec.

Source

pub fn with_max_blobs_per_tx(self, max_blobs_per_tx: u64) -> Self

Sets the blob target

Source

pub fn set_max_blobs_per_tx(&mut self, max_blobs_per_tx: u64)

Sets the blob target

Source

pub fn clear_max_blobs_per_tx(&mut self)

Clears the blob target and max count over hardforks.

Trait Implementations§

Source§

impl<SPEC: Into<SpecId> + Copy> Cfg for CfgEnv<SPEC>

Source§

fn is_block_gas_limit_disabled(&self) -> bool

Returns true if the block gas limit is disabled.

Source§

type Spec = SPEC

Specification id type, in requires to be convertible to SpecId so it can be used by default in mainnet.
Source§

fn chain_id(&self) -> u64

Returns the chain ID of the EVM that is compared with the transaction’s chain ID.
Source§

fn spec(&self) -> Self::Spec

Specification id
Source§

fn tx_chain_id_check(&self) -> bool

Returns whether the transaction’s chain ID check is enabled.
Source§

fn tx_gas_limit_cap(&self) -> u64

Returns the gas limit cap for the transaction. Read more
Source§

fn max_blobs_per_tx(&self) -> Option<u64>

Returns the maximum number of blobs allowed per transaction. If it is None, check for max count will be skipped.
Source§

fn max_code_size(&self) -> usize

Returns the maximum code size for the given spec id.
Source§

fn max_initcode_size(&self) -> usize

Returns the max initcode size for the given spec id.
Source§

fn is_eip3541_disabled(&self) -> bool

Returns whether the EIP-3541 (disallowing new contracts with 0xEF prefix) is disabled.
Source§

fn is_eip3607_disabled(&self) -> bool

Returns whether the EIP-3607 (account clearing) is disabled.
Source§

fn is_balance_check_disabled(&self) -> bool

Returns whether the balance check is disabled.
Source§

fn is_nonce_check_disabled(&self) -> bool

Returns whether the nonce check is disabled.
Source§

fn is_base_fee_check_disabled(&self) -> bool

Returns whether the base fee check is disabled.
Source§

fn is_priority_fee_check_disabled(&self) -> bool

Returns whether the priority fee check is disabled.
Source§

impl<SPEC: Clone> Clone for CfgEnv<SPEC>

Source§

fn clone(&self) -> CfgEnv<SPEC>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<SPEC: Debug> Debug for CfgEnv<SPEC>

Source§

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

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

impl<SPEC: Default> Default for CfgEnv<SPEC>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de, SPEC> Deserialize<'de> for CfgEnv<SPEC>
where SPEC: Deserialize<'de>,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<SPEC: PartialEq> PartialEq for CfgEnv<SPEC>

Source§

fn eq(&self, other: &CfgEnv<SPEC>) -> bool

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

const 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<SPEC> Serialize for CfgEnv<SPEC>
where SPEC: Serialize,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<SPEC: Eq> Eq for CfgEnv<SPEC>

Source§

impl<SPEC> StructuralPartialEq for CfgEnv<SPEC>

Auto Trait Implementations§

§

impl<SPEC> Freeze for CfgEnv<SPEC>
where SPEC: Freeze,

§

impl<SPEC> RefUnwindSafe for CfgEnv<SPEC>
where SPEC: RefUnwindSafe,

§

impl<SPEC> Send for CfgEnv<SPEC>
where SPEC: Send,

§

impl<SPEC> Sync for CfgEnv<SPEC>
where SPEC: Sync,

§

impl<SPEC> Unpin for CfgEnv<SPEC>
where SPEC: Unpin,

§

impl<SPEC> UnwindSafe for CfgEnv<SPEC>
where SPEC: UnwindSafe,

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
§

impl<T> Conv for T

§

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

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

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

§

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

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

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.

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

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

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,