#[non_exhaustive]pub struct CfgEnv<SPEC = SpecId> {Show 18 fields
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 memory_limit: u64,
pub disable_balance_check: bool,
pub disable_block_gas_limit: bool,
pub disable_eip3541: bool,
pub disable_eip3607: bool,
pub disable_eip7623: bool,
pub disable_base_fee: bool,
pub disable_priority_fee_check: bool,
pub disable_fee_charge: bool,
}Expand description
EVM configuration
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.chain_id: u64Chain ID of the EVM. Used in CHAINID opcode and transaction’s chain ID check.
Chain ID is introduced EIP-155.
tx_chain_id_check: boolWhether to check the transaction’s chain ID.
If set to false, the transaction’s chain ID check will be skipped.
spec: SPECSpecification 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: boolSkips 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.
memory_limit: u64A hard memory limit in bytes beyond which OutOfGasError::Memory cannot be resized.
In cases where the gas limit may be extraordinarily high, it is recommended to set this to a sane value to prevent memory allocation panics.
Defaults to 2^32 - 1 bytes per EIP-1985.
disable_balance_check: boolSkip balance checks if true
Adds transaction cost to balance to ensure execution doesn’t fail.
By default, it is set to false.
disable_block_gas_limit: boolThere are use cases where it’s allowed to provide a gas limit that’s higher than a block’s gas limit.
To that end, you can disable the block gas limit validation.
By default, it is set to false.
disable_eip3541: boolEIP-3541 rejects the creation of contracts that starts with 0xEF
This is useful for chains that do not implement EIP-3541.
By default, it is set to false.
disable_eip3607: boolEIP-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.
disable_eip7623: boolEIP-7623 increases calldata cost.
This EIP can be considered irrelevant in the context of an EVM-compatible L2 rollup, if it does not make use of blobs.
By default, it is set to false.
disable_base_fee: boolDisables base fee checks for EIP-1559 transactions
This is useful for testing method calls with zero gas price.
By default, it is set to false.
disable_priority_fee_check: boolDisables “max fee must be less than or equal to max priority fee” check for EIP-1559 transactions.
This is useful because some chains (e.g. Arbitrum) do not enforce this check.
By default, it is set to false.
disable_fee_charge: boolDisables fee charging for transactions.
This is useful when executing eth_call for example, on OP-chains where setting the base fee
to 0 isn’t sufficient.
By default, it is set to false.
Implementations§
Source§impl<SPEC: Into<SpecId> + Copy> CfgEnv<SPEC>
impl<SPEC: Into<SpecId> + Copy> CfgEnv<SPEC>
Sourcepub fn blob_base_fee_update_fraction(&mut self) -> u64
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>
impl<SPEC> CfgEnv<SPEC>
Sourcepub fn new_with_spec(spec: SPEC) -> Self
pub fn new_with_spec(spec: SPEC) -> Self
Create new CfgEnv with default values and specified spec.
Sourcepub fn with_chain_id(self, chain_id: u64) -> Self
pub fn with_chain_id(self, chain_id: u64) -> Self
Consumes self and returns a new CfgEnv with the specified chain ID.
Sourcepub fn enable_tx_chain_id_check(self) -> Self
pub fn enable_tx_chain_id_check(self) -> Self
Enables the transaction’s chain ID check.
Sourcepub fn disable_tx_chain_id_check(self) -> Self
pub fn disable_tx_chain_id_check(self) -> Self
Disables the transaction’s chain ID check.
Sourcepub fn with_spec<OSPEC: Into<SpecId>>(self, spec: OSPEC) -> CfgEnv<OSPEC>
pub fn with_spec<OSPEC: Into<SpecId>>(self, spec: OSPEC) -> CfgEnv<OSPEC>
Consumes self and returns a new CfgEnv with the specified spec.
Sourcepub fn with_max_blobs_per_tx(self, max_blobs_per_tx: u64) -> Self
pub fn with_max_blobs_per_tx(self, max_blobs_per_tx: u64) -> Self
Sets the blob target
Sourcepub fn set_max_blobs_per_tx(&mut self, max_blobs_per_tx: u64)
pub fn set_max_blobs_per_tx(&mut self, max_blobs_per_tx: u64)
Sets the blob target
Sourcepub fn clear_max_blobs_per_tx(&mut self)
pub fn clear_max_blobs_per_tx(&mut self)
Clears the blob target and max count over hardforks.
Sourcepub fn with_disable_priority_fee_check(self, disable: bool) -> Self
pub fn with_disable_priority_fee_check(self, disable: bool) -> Self
Sets the disable priority fee check flag.
Sourcepub fn with_disable_fee_charge(self, disable: bool) -> Self
pub fn with_disable_fee_charge(self, disable: bool) -> Self
Sets the disable fee charge flag.
Sourcepub fn with_disable_eip7623(self, disable: bool) -> Self
pub fn with_disable_eip7623(self, disable: bool) -> Self
Sets the disable eip7623 flag.
Trait Implementations§
Source§impl<SPEC: Into<SpecId> + Copy> Cfg for CfgEnv<SPEC>
impl<SPEC: Into<SpecId> + Copy> Cfg for CfgEnv<SPEC>
Source§fn is_block_gas_limit_disabled(&self) -> bool
fn is_block_gas_limit_disabled(&self) -> bool
Returns true if the block gas limit is disabled.
Source§type Spec = SPEC
type Spec = SPEC
SpecId so it can be used
by default in mainnet.Source§fn chain_id(&self) -> u64
fn chain_id(&self) -> u64
Source§fn tx_chain_id_check(&self) -> bool
fn tx_chain_id_check(&self) -> bool
Source§fn tx_gas_limit_cap(&self) -> u64
fn tx_gas_limit_cap(&self) -> u64
Source§fn max_blobs_per_tx(&self) -> Option<u64>
fn max_blobs_per_tx(&self) -> Option<u64>
Source§fn max_code_size(&self) -> usize
fn max_code_size(&self) -> usize
Source§fn max_initcode_size(&self) -> usize
fn max_initcode_size(&self) -> usize
Source§fn is_eip3541_disabled(&self) -> bool
fn is_eip3541_disabled(&self) -> bool
Source§fn is_eip3607_disabled(&self) -> bool
fn is_eip3607_disabled(&self) -> bool
Source§fn is_eip7623_disabled(&self) -> bool
fn is_eip7623_disabled(&self) -> bool
Source§fn is_balance_check_disabled(&self) -> bool
fn is_balance_check_disabled(&self) -> bool
Source§fn is_nonce_check_disabled(&self) -> bool
fn is_nonce_check_disabled(&self) -> bool
Source§fn is_base_fee_check_disabled(&self) -> bool
fn is_base_fee_check_disabled(&self) -> bool
Source§fn is_priority_fee_check_disabled(&self) -> bool
fn is_priority_fee_check_disabled(&self) -> bool
Source§fn is_fee_charge_disabled(&self) -> bool
fn is_fee_charge_disabled(&self) -> bool
Source§fn memory_limit(&self) -> u64
fn memory_limit(&self) -> u64
Source§impl<'de, SPEC> Deserialize<'de> for CfgEnv<SPEC>where
SPEC: Deserialize<'de>,
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>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl<SPEC: Eq> Eq for CfgEnv<SPEC>
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> 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§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.