reth_node_builder

Trait ConfigureEvmEnv

pub trait ConfigureEvmEnv:
    Send
    + Sync
    + Unpin
    + Clone
    + 'static {
    type Header: BlockHeader;

    // Required methods
    fn fill_tx_env(
        &self,
        tx_env: &mut TxEnv,
        transaction: &TransactionSigned,
        sender: Address,
    );
    fn fill_tx_env_system_contract_call(
        &self,
        env: &mut Env,
        caller: Address,
        contract: Address,
        data: Bytes,
    );
    fn fill_cfg_env(
        &self,
        cfg_env: &mut CfgEnvWithHandlerCfg,
        header: &Self::Header,
        total_difficulty: Uint<256, 4>,
    );
    fn next_cfg_and_block_env(
        &self,
        parent: &Self::Header,
        attributes: NextBlockEnvAttributes,
    ) -> (CfgEnvWithHandlerCfg, BlockEnv);

    // Provided methods
    fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv { ... }
    fn fill_block_env(
        &self,
        block_env: &mut BlockEnv,
        header: &Self::Header,
        after_merge: bool,
    ) { ... }
    fn fill_cfg_and_block_env(
        &self,
        cfg: &mut CfgEnvWithHandlerCfg,
        block_env: &mut BlockEnv,
        header: &Self::Header,
        total_difficulty: Uint<256, 4>,
    ) { ... }
}
Expand description

This represents the set of methods used to configure the EVM’s environment before block execution.

Default trait method implementation is done w.r.t. L1.

Required Associated Types§

type Header: BlockHeader

The header type used by the EVM.

Required Methods§

fn fill_tx_env( &self, tx_env: &mut TxEnv, transaction: &TransactionSigned, sender: Address, )

Fill transaction environment from a [TransactionSigned] and the given sender address.

fn fill_tx_env_system_contract_call( &self, env: &mut Env, caller: Address, contract: Address, data: Bytes, )

Fill transaction environment with a system contract call.

fn fill_cfg_env( &self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &Self::Header, total_difficulty: Uint<256, 4>, )

Fill [CfgEnvWithHandlerCfg] fields according to the chain spec and given header.

This must set the corresponding spec id in the handler cfg, based on timestamp or total difficulty

fn next_cfg_and_block_env( &self, parent: &Self::Header, attributes: NextBlockEnvAttributes, ) -> (CfgEnvWithHandlerCfg, BlockEnv)

Returns the configured [CfgEnvWithHandlerCfg] and [BlockEnv] for parent + 1 block.

This is intended for usage in block building after the merge and requires additional attributes that can’t be derived from the parent block: attributes that are determined by the CL, such as the timestamp, suggested fee recipient, and randomness value.

Provided Methods§

fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv

Returns a [TxEnv] from a [TransactionSignedEcRecovered].

fn fill_block_env( &self, block_env: &mut BlockEnv, header: &Self::Header, after_merge: bool, )

Fill [BlockEnv] field according to the chain spec and given header

fn fill_cfg_and_block_env( &self, cfg: &mut CfgEnvWithHandlerCfg, block_env: &mut BlockEnv, header: &Self::Header, total_difficulty: Uint<256, 4>, )

Convenience function to call both fill_cfg_env and ConfigureEvmEnv::fill_block_env.

Note: Implementers should ensure that all fields are required fields are filled.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

§

impl<'a, T> ConfigureEvmEnv for &'a T
where T: 'a + ConfigureEvmEnv + ?Sized, &'a T: Send + Sync + Unpin + Clone + 'static,

§

type Header = <T as ConfigureEvmEnv>::Header

§

fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv

§

fn fill_tx_env( &self, tx_env: &mut TxEnv, transaction: &TransactionSigned, sender: Address, )

§

fn fill_tx_env_system_contract_call( &self, env: &mut Env, caller: Address, contract: Address, data: Bytes, )

§

fn fill_cfg_env( &self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &<&'a T as ConfigureEvmEnv>::Header, total_difficulty: Uint<256, 4>, )

§

fn fill_block_env( &self, block_env: &mut BlockEnv, header: &<&'a T as ConfigureEvmEnv>::Header, after_merge: bool, )

§

fn fill_cfg_and_block_env( &self, cfg: &mut CfgEnvWithHandlerCfg, block_env: &mut BlockEnv, header: &<&'a T as ConfigureEvmEnv>::Header, total_difficulty: Uint<256, 4>, )

§

fn next_cfg_and_block_env( &self, parent: &<&'a T as ConfigureEvmEnv>::Header, attributes: NextBlockEnvAttributes, ) -> (CfgEnvWithHandlerCfg, BlockEnv)

§

impl<T> ConfigureEvmEnv for Arc<T>
where T: ConfigureEvmEnv + ?Sized, Arc<T>: Send + Sync + Unpin + Clone + 'static,

§

type Header = <T as ConfigureEvmEnv>::Header

§

fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv

§

fn fill_tx_env( &self, tx_env: &mut TxEnv, transaction: &TransactionSigned, sender: Address, )

§

fn fill_tx_env_system_contract_call( &self, env: &mut Env, caller: Address, contract: Address, data: Bytes, )

§

fn fill_cfg_env( &self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &<Arc<T> as ConfigureEvmEnv>::Header, total_difficulty: Uint<256, 4>, )

§

fn fill_block_env( &self, block_env: &mut BlockEnv, header: &<Arc<T> as ConfigureEvmEnv>::Header, after_merge: bool, )

§

fn fill_cfg_and_block_env( &self, cfg: &mut CfgEnvWithHandlerCfg, block_env: &mut BlockEnv, header: &<Arc<T> as ConfigureEvmEnv>::Header, total_difficulty: Uint<256, 4>, )

§

fn next_cfg_and_block_env( &self, parent: &<Arc<T> as ConfigureEvmEnv>::Header, attributes: NextBlockEnvAttributes, ) -> (CfgEnvWithHandlerCfg, BlockEnv)

Implementors§