From 7fb264568922849dd2c408733ade1feb2089ac79 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 18 Mar 2024 22:04:52 +0100 Subject: [PATCH] fix: check for cancun in cast run --- crates/cast/bin/cmd/run.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/cast/bin/cmd/run.rs b/crates/cast/bin/cmd/run.rs index 8de966906791..83cbf5743904 100644 --- a/crates/cast/bin/cmd/run.rs +++ b/crates/cast/bin/cmd/run.rs @@ -117,16 +117,18 @@ impl RunArgs { .ok_or_else(|| eyre::eyre!("tx may still be pending: {:?}", tx_hash))? .to::(); + // fetch the block the transaction was mined in + let block = provider.get_block(tx_block_number.into(), true).await?; + // we need to fork off the parent block config.fork_block_number = Some(tx_block_number - 1); let (mut env, fork, chain) = TracingExecutor::get_fork_material(&config, evm_opts).await?; - let mut executor = TracingExecutor::new(env.clone(), fork, self.evm_version, self.debug); + let mut evm_version = self.evm_version; env.block.number = U256::from(tx_block_number); - let block = provider.get_block(tx_block_number.into(), true).await?; if let Some(ref block) = block { env.block.timestamp = block.header.timestamp; env.block.coinbase = block.header.miner; @@ -134,8 +136,18 @@ impl RunArgs { env.block.prevrandao = Some(block.header.mix_hash.unwrap_or_default()); env.block.basefee = block.header.base_fee_per_gas.unwrap_or_default(); env.block.gas_limit = block.header.gas_limit; + + // TODO: we need a smarter way to map the block to the corresponding evm_version for + // commonly used chains + if evm_version.is_none() { + // if the block has the excess_blob_gas field, we assume it's a Cancun block + if block.header.excess_blob_gas.is_some() { + evm_version = Some(EvmVersion::Cancun); + } + } } + let mut executor = TracingExecutor::new(env.clone(), fork, evm_version, self.debug); let mut env = EnvWithHandlerCfg::new_with_spec_id(Box::new(env.clone()), executor.spec_id());