From 455b2afa5ed816080795f4675975546685a9d987 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 13 Mar 2024 21:53:34 +0100 Subject: [PATCH] fix: apply block overrides before create env (#7135) --- crates/rpc/rpc/src/eth/revm_utils.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/crates/rpc/rpc/src/eth/revm_utils.rs b/crates/rpc/rpc/src/eth/revm_utils.rs index 445c673689..17ddc1ac43 100644 --- a/crates/rpc/rpc/src/eth/revm_utils.rs +++ b/crates/rpc/rpc/src/eth/revm_utils.rs @@ -237,7 +237,7 @@ where /// - `nonce` is set to `None` pub(crate) fn prepare_call_env( mut cfg: CfgEnvWithHandlerCfg, - block: BlockEnv, + mut block: BlockEnv, request: TransactionRequest, gas_limit: u64, db: &mut CacheDB, @@ -260,24 +260,25 @@ where // cfg.disable_base_fee = true; - let request_gas = request.gas; - - let mut env = build_call_evm_env(cfg, block, request)?; - env.tx.nonce = None; - - // apply state overrides - if let Some(state_overrides) = overrides.state { - apply_state_overrides(state_overrides, db)?; - } - - // apply block overrides + // apply block overrides, we need to apply them first so that they take effect when we we create + // the evm env via `build_call_evm_env`, e.g. basefee if let Some(mut block_overrides) = overrides.block { if let Some(block_hashes) = block_overrides.block_hash.take() { // override block hashes db.block_hashes .extend(block_hashes.into_iter().map(|(num, hash)| (U256::from(num), hash))) } - apply_block_overrides(*block_overrides, &mut env.env.block); + apply_block_overrides(*block_overrides, &mut block); + } + + let request_gas = request.gas; + let mut env = build_call_evm_env(cfg, block, request)?; + // set nonce to None so that the next nonce is used when transacting the call + env.tx.nonce = None; + + // apply state overrides + if let Some(state_overrides) = overrides.state { + apply_state_overrides(state_overrides, db)?; } if request_gas.is_none() {