Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 19 additions & 47 deletions crates/evm/core/src/evm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,13 @@ impl FoundryEvmFactory for EthEvmFactory {
evm_env: EvmEnv,
inspector: I,
) -> Self::FoundryEvm<'db, I> {
new_eth_evm_with_inspector(db, evm_env, inspector)
let eth_evm = Self::default().create_evm_with_inspector(db, evm_env, inspector);
let mut inner = eth_evm.into_inner();
inner.ctx.cfg.tx_chain_id_check = true;

let mut evm = EthFoundryEvm { inner };
evm.inspector().get_networks().inject_precompiles(evm.precompiles_mut());
evm
}

fn transact_with_dyn_inspector(
Expand All @@ -157,7 +163,7 @@ impl FoundryEvmFactory for EthEvmFactory {
depth: usize,
tx_env: TxEnv,
) -> eyre::Result<ResultAndState<Self::HaltReason>> {
let mut evm = new_eth_evm_with_inspector(db, evm_env, inspector);
let mut evm = self.create_foundry_evm_with_inspector(db, evm_env, inspector);
evm.journaled_state.depth = depth;
Ok(evm.transact_raw(tx_env)?)
}
Expand Down Expand Up @@ -186,25 +192,6 @@ impl FoundryEvmFactory for EthEvmFactory {
}
}

/// Creates a new Eth EVM instance with an inspector, applying Foundry-specific setup
/// (chain ID check, network precompile injection).
pub fn new_eth_evm_with_inspector<
'db,
I: FoundryInspectorExt<EthEvmContext<&'db mut dyn DatabaseExt<BlockEnv, TxEnv, SpecId>>>,
>(
db: &'db mut dyn DatabaseExt<BlockEnv, TxEnv, SpecId>,
evm_env: EvmEnv,
inspector: I,
) -> EthFoundryEvm<'db, I> {
let eth_evm = EthEvmFactory::default().create_evm_with_inspector(db, evm_env, inspector);
let mut inner = eth_evm.into_inner();
inner.ctx.cfg.tx_chain_id_check = true;

let mut evm = EthFoundryEvm { inner };
evm.inspector().get_networks().inject_precompiles(evm.precompiles_mut());
evm
}

/// Get the call inputs for the CREATE2 factory.
fn get_create2_factory_call_inputs(
salt: U256,
Expand Down Expand Up @@ -650,30 +637,6 @@ pub struct TempoFoundryEvm<
pub inner: TempoRevmEvm<'db, I>,
}

/// Creates a new Tempo EVM instance with an inspector, applying Foundry-specific setup
/// (gas params, chain ID check, network precompile injection).
pub fn new_tempo_evm_with_inspector<
'db,
I: FoundryInspectorExt<
TempoContext<&'db mut dyn DatabaseExt<TempoBlockEnv, TempoTxEnv, TempoHardfork>>,
>,
>(
db: &'db mut dyn DatabaseExt<TempoBlockEnv, TempoTxEnv, TempoHardfork>,
mut evm_env: EvmEnv<TempoHardfork, TempoBlockEnv>,
inspector: I,
) -> TempoFoundryEvm<'db, I> {
evm_env.cfg_env.gas_params = tempo_gas_params(evm_env.cfg_env.spec);
evm_env.cfg_env.tx_chain_id_check = true;

let tempo_evm = TempoEvmFactory::default().create_evm_with_inspector(db, evm_env, inspector);
let inner = tempo_evm.into_inner();

let mut evm = TempoFoundryEvm { inner };
let networks = Evm::inspector(&evm).get_networks();
networks.inject_precompiles(evm.precompiles_mut());
evm
}

impl FoundryEvmFactory for TempoEvmFactory {
type FoundryContext<'db> =
TempoContext<&'db mut dyn DatabaseExt<Self::BlockEnv, Self::Tx, Self::Spec>>;
Expand All @@ -687,7 +650,16 @@ impl FoundryEvmFactory for TempoEvmFactory {
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> Self::FoundryEvm<'db, I> {
new_tempo_evm_with_inspector(db, evm_env, inspector)
let spec = *evm_env.spec_id();
let tempo_evm = Self::default().create_evm_with_inspector(db, evm_env, inspector);
let mut inner = tempo_evm.into_inner();
inner.ctx.cfg.gas_params = tempo_gas_params(spec);
inner.ctx.cfg.tx_chain_id_check = true;

let mut evm = TempoFoundryEvm { inner };
let networks = Evm::inspector(&evm).get_networks();
networks.inject_precompiles(evm.precompiles_mut());
evm
}

fn transact_with_dyn_inspector(
Expand All @@ -698,7 +670,7 @@ impl FoundryEvmFactory for TempoEvmFactory {
depth: usize,
tx_env: TempoTxEnv,
) -> eyre::Result<ResultAndState<Self::HaltReason>> {
let mut evm = new_tempo_evm_with_inspector(db, evm_env, inspector);
let mut evm = self.create_foundry_evm_with_inspector(db, evm_env, inspector);
evm.journaled_state.depth = depth;
Ok(evm.transact_raw(tx_env)?)
}
Expand Down
Loading