From 3acca40ef0c1f7f82a6d9c008d0b9dee51f70ec2 Mon Sep 17 00:00:00 2001 From: joshieDo <93316087+joshieDo@users.noreply.github.com> Date: Thu, 27 Jun 2024 22:42:00 +0200 Subject: [PATCH 1/4] remove tx_env_with_recovered from rpc --- crates/rpc/rpc-eth-api/src/helpers/call.rs | 20 ++++++--- .../rpc-eth-api/src/helpers/pending_block.rs | 11 +++-- crates/rpc/rpc-eth-api/src/helpers/trace.rs | 21 +++++++--- crates/rpc/rpc/src/debug.rs | 41 +++++++++++++++---- crates/rpc/rpc/src/trace.rs | 18 ++++++-- 5 files changed, 83 insertions(+), 28 deletions(-) diff --git a/crates/rpc/rpc-eth-api/src/helpers/call.rs b/crates/rpc/rpc-eth-api/src/helpers/call.rs index 888b739945ee..25b9fe850a76 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/call.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/call.rs @@ -4,7 +4,6 @@ use futures::Future; use reth_evm::{ConfigureEvm, ConfigureEvmEnv}; use reth_primitives::{ - revm::env::tx_env_with_recovered, revm_primitives::{ BlockEnv, CfgEnvWithHandlerCfg, EnvWithHandlerCfg, ExecutionResult, HaltReason, ResultAndState, TransactTo, @@ -30,6 +29,7 @@ use reth_rpc_types::{ }; use revm::{Database, DatabaseCommit}; use revm_inspectors::access_list::AccessListInspector; +use revm_primitives::TxEnv; use tracing::trace; use super::{LoadBlock, LoadPendingBlock, LoadState, LoadTransaction, SpawnBlocking, Trace}; @@ -119,9 +119,14 @@ pub trait EthCall: Call + LoadPendingBlock { // to be replayed let transactions = block.into_transactions_ecrecovered().take(num_txs); for tx in transactions { - let tx = tx_env_with_recovered(&tx); - let env = - EnvWithHandlerCfg::new_with_cfg_env(cfg.clone(), block_env.clone(), tx); + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); + let env = EnvWithHandlerCfg::new_with_cfg_env( + cfg.clone(), + block_env.clone(), + tx_env, + ); let (res, _) = this.transact(&mut db, env)?; db.commit(res.state); } @@ -422,8 +427,11 @@ pub trait Call: LoadState + SpawnBlocking { tx.hash, )?; - let env = - EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env_with_recovered(&tx)); + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); + + let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env); let (res, _) = this.transact(&mut db, env)?; f(tx_info, res, db) diff --git a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs index f30e397e030f..41c0d9cc2ec2 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs @@ -5,12 +5,11 @@ use std::time::{Duration, Instant}; use futures::Future; use reth_chainspec::EthereumHardforks; -use reth_evm::ConfigureEvm; +use reth_evm::{ConfigureEvm, ConfigureEvmEnv}; use reth_execution_types::ExecutionOutcome; use reth_primitives::{ constants::{eip4844::MAX_DATA_GAS_PER_BLOCK, BEACON_NONCE, EMPTY_ROOT_HASH}, proofs::calculate_transaction_root, - revm::env::tx_env_with_recovered, revm_primitives::{ BlockEnv, CfgEnv, CfgEnvWithHandlerCfg, EVMError, Env, ExecutionResult, InvalidTransaction, ResultAndState, SpecId, @@ -31,6 +30,7 @@ use reth_rpc_eth_types::{ }; use reth_transaction_pool::{BestTransactionsAttributes, TransactionPool}; use revm::{db::states::bundle_state::BundleRetention, DatabaseCommit, State}; +use revm_primitives::TxEnv; use tokio::sync::Mutex; use tracing::debug; @@ -291,9 +291,12 @@ pub trait LoadPendingBlock { } } + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Self::evm_config(&self).fill_tx_env(&mut tx_env, &tx.clone().into_signed(), signer); + // Configure the environment for the block. - let env = - Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env_with_recovered(&tx)); + let env = Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env); let mut evm = revm::Evm::builder().with_env(env).with_db(&mut db).build(); diff --git a/crates/rpc/rpc-eth-api/src/helpers/trace.rs b/crates/rpc/rpc-eth-api/src/helpers/trace.rs index 63b210204065..b8b8d24c92c2 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/trace.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/trace.rs @@ -1,8 +1,8 @@ //! Loads a pending block from database. Helper trait for `eth_` call and trace RPC methods. use futures::Future; -use reth_evm::ConfigureEvm; -use reth_primitives::{revm::env::tx_env_with_recovered, B256}; +use reth_evm::{ConfigureEvm, ConfigureEvmEnv}; +use reth_primitives::B256; use reth_revm::database::StateProviderDatabase; use reth_rpc_eth_types::{ cache::db::{StateCacheDb, StateCacheDbRefMutWrapper, StateProviderTraitObjWrapper}, @@ -11,7 +11,7 @@ use reth_rpc_eth_types::{ use reth_rpc_types::{BlockId, TransactionInfo}; use revm::{db::CacheDB, Database, DatabaseCommit, GetInspector, Inspector}; use revm_inspectors::tracing::{TracingInspector, TracingInspectorConfig}; -use revm_primitives::{EnvWithHandlerCfg, EvmState, ExecutionResult, ResultAndState}; +use revm_primitives::{EnvWithHandlerCfg, EvmState, ExecutionResult, ResultAndState, TxEnv}; use super::{Call, LoadBlock, LoadPendingBlock, LoadState, LoadTransaction}; @@ -196,8 +196,11 @@ pub trait Trace: LoadState { tx.hash, )?; - let env = - EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env_with_recovered(&tx)); + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); + + let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env); let (res, _) = this.inspect(StateCacheDbRefMutWrapper(&mut db), env, &mut inspector)?; f(tx_info, inspector, res, db) @@ -308,7 +311,13 @@ pub trait Trace: LoadState { block_number: Some(block_number), base_fee: Some(base_fee), }; - let tx_env = tx_env_with_recovered(&tx); + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Trace::evm_config(&this).fill_tx_env( + &mut tx_env, + &tx.into_signed(), + signer, + ); (tx_info, tx_env) }) .peekable(); diff --git a/crates/rpc/rpc/src/debug.rs b/crates/rpc/rpc/src/debug.rs index 2658547b1963..42c6114d9cbe 100644 --- a/crates/rpc/rpc/src/debug.rs +++ b/crates/rpc/rpc/src/debug.rs @@ -4,9 +4,10 @@ use alloy_rlp::{Decodable, Encodable}; use async_trait::async_trait; use jsonrpsee::core::RpcResult; use reth_chainspec::EthereumHardforks; +use reth_evm::ConfigureEvmEnv; use reth_primitives::{ - revm::env::tx_env_with_recovered, Address, Block, BlockId, BlockNumberOrTag, Bytes, - TransactionSignedEcRecovered, Withdrawals, B256, U256, + Address, Block, BlockId, BlockNumberOrTag, Bytes, TransactionSignedEcRecovered, Withdrawals, + B256, U256, }; use reth_provider::{ BlockReaderIdExt, ChainSpecProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory, @@ -14,7 +15,7 @@ use reth_provider::{ }; use reth_revm::database::StateProviderDatabase; use reth_rpc_api::DebugApiServer; -use reth_rpc_eth_api::helpers::{EthApiSpec, EthTransactions, TraceExt}; +use reth_rpc_eth_api::helpers::{Call, EthApiSpec, EthTransactions, TraceExt}; use reth_rpc_eth_types::{revm_utils::prepare_call_env, EthApiError, EthResult, StateCacheDb}; use reth_rpc_server_types::{result::internal_rpc_err, ToRpcResult}; use reth_rpc_types::{ @@ -34,6 +35,7 @@ use revm_inspectors::tracing::{ js::{JsInspector, TransactionContext}, FourByteInspector, MuxInspector, TracingInspector, TracingInspectorConfig, }; +use revm_primitives::TxEnv; use tokio::sync::{AcquireError, OwnedSemaphorePermit}; /// `debug` API implementation. @@ -99,9 +101,17 @@ where let mut transactions = transactions.into_iter().enumerate().peekable(); while let Some((index, tx)) = transactions.next() { let tx_hash = tx.hash; - let tx = tx_env_with_recovered(&tx); + + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(this.eth_api()).fill_tx_env( + &mut tx_env, + &tx.clone().into_signed(), + signer, + ); + let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx), + env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env), handler_cfg: cfg.handler_cfg, }; let (result, state_changes) = this.trace_transaction( @@ -239,8 +249,16 @@ where tx.hash, )?; + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(this.eth_api()).fill_tx_env( + &mut tx_env, + &tx.clone().into_signed(), + signer, + ); + let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env, tx_env_with_recovered(&tx)), + env: Env::boxed(cfg.cfg_env.clone(), block_env, tx_env), handler_cfg: cfg.handler_cfg, }; @@ -453,6 +471,7 @@ where } let this = self.clone(); + self.inner .eth_api .spawn_with_state_at_block(at.into(), move |state| { @@ -467,9 +486,15 @@ where // Execute all transactions until index for tx in transactions { - let tx = tx_env_with_recovered(&tx); + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(this.eth_api()).fill_tx_env( + &mut tx_env, + &tx.into_signed(), + signer, + ); let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx), + env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env), handler_cfg: cfg.handler_cfg, }; let (res, _) = this.inner.eth_api.transact(&mut db, env)?; diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index 110f35dbd1eb..9f6d681cd5f2 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -6,11 +6,12 @@ use reth_chainspec::EthereumHardforks; use reth_consensus_common::calc::{ base_block_reward, base_block_reward_pre_merge, block_reward, ommer_reward, }; -use reth_primitives::{revm::env::tx_env_with_recovered, BlockId, Bytes, Header, B256, U256}; +use reth_evm::ConfigureEvmEnv; +use reth_primitives::{BlockId, Bytes, Header, B256, U256}; use reth_provider::{BlockReader, ChainSpecProvider, EvmEnvProvider, StateProviderFactory}; use reth_revm::database::StateProviderDatabase; use reth_rpc_api::TraceApiServer; -use reth_rpc_eth_api::helpers::TraceExt; +use reth_rpc_eth_api::helpers::{Call, TraceExt}; use reth_rpc_eth_types::{ error::{EthApiError, EthResult}, revm_utils::prepare_call_env, @@ -35,6 +36,7 @@ use revm_inspectors::{ opcode::OpcodeGasInspector, tracing::{parity::populate_state_diff, TracingInspector, TracingInspectorConfig}, }; +use revm_primitives::TxEnv; use tokio::sync::{AcquireError, OwnedSemaphorePermit}; /// `trace` API implementation. @@ -113,8 +115,16 @@ where let tx = recover_raw_transaction(tx)?; let (cfg, block, at) = self.inner.eth_api.evm_env_at(block_id.unwrap_or_default()).await?; - let tx = tx_env_with_recovered(&tx.into_ecrecovered_transaction()); - let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block, tx); + + let mut tx_env = TxEnv::default(); + let signer = tx.signer(); + Call::evm_config(self.eth_api()).fill_tx_env( + &mut tx_env, + &tx.into_ecrecovered_transaction().into_signed(), + signer, + ); + + let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block, tx_env); let config = TracingInspectorConfig::from_parity_config(&trace_types); From 37c411ebd21e35b55e300c7ae61c7c293a9008f1 Mon Sep 17 00:00:00 2001 From: joshieDo <93316087+joshieDo@users.noreply.github.com> Date: Thu, 27 Jun 2024 22:50:10 +0200 Subject: [PATCH 2/4] clippy --- crates/rpc/rpc-eth-api/src/helpers/pending_block.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs index 41c0d9cc2ec2..1a78b8961306 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs @@ -293,7 +293,7 @@ pub trait LoadPendingBlock { let mut tx_env = TxEnv::default(); let signer = tx.signer(); - Self::evm_config(&self).fill_tx_env(&mut tx_env, &tx.clone().into_signed(), signer); + Self::evm_config(self).fill_tx_env(&mut tx_env, &tx.clone().into_signed(), signer); // Configure the environment for the block. let env = Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env); From 23539164492aa83cac74d8f5bbee733ea02a682b Mon Sep 17 00:00:00 2001 From: joshieDo <93316087+joshieDo@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:05:15 +0200 Subject: [PATCH 3/4] simplify --- crates/evm/src/lib.rs | 11 ++++- crates/rpc/rpc-eth-api/src/helpers/call.rs | 16 +++---- .../rpc-eth-api/src/helpers/pending_block.rs | 11 +++-- crates/rpc/rpc-eth-api/src/helpers/trace.rs | 20 ++++----- crates/rpc/rpc/src/debug.rs | 42 +++++++------------ crates/rpc/rpc/src/trace.rs | 13 ++---- 6 files changed, 47 insertions(+), 66 deletions(-) diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index f86219eec7fa..e9b234147663 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -12,10 +12,12 @@ #[cfg(not(feature = "std"))] extern crate alloc; +use core::ops::Deref; + use reth_chainspec::ChainSpec; use reth_primitives::{ revm::env::{fill_block_env, fill_tx_env}, - Address, Header, TransactionSigned, U256, + Address, Header, TransactionSigned, TransactionSignedEcRecovered, U256, }; use revm::{inspector_handle_register, Database, Evm, EvmBuilder, GetInspector}; use revm_primitives::{BlockEnv, CfgEnvWithHandlerCfg, EnvWithHandlerCfg, SpecId, TxEnv}; @@ -106,6 +108,13 @@ pub trait ConfigureEvm: ConfigureEvmEnv { /// Default trait method implementation is done w.r.t. L1. #[auto_impl::auto_impl(&, Arc)] pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static { + /// Returns a [`TxEnv`] from a [`TransactionSignedEcRecovered`]. + fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv { + let mut tx_env = TxEnv::default(); + fill_tx_env(&mut tx_env, transaction.deref(), transaction.signer()); + tx_env + } + /// Fill transaction environment from a [`TransactionSigned`] and the given sender address. fn fill_tx_env(&self, tx_env: &mut TxEnv, transaction: &TransactionSigned, sender: Address) { fill_tx_env(tx_env, transaction, sender) diff --git a/crates/rpc/rpc-eth-api/src/helpers/call.rs b/crates/rpc/rpc-eth-api/src/helpers/call.rs index 25b9fe850a76..5f6aebaa85b3 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/call.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/call.rs @@ -29,7 +29,6 @@ use reth_rpc_types::{ }; use revm::{Database, DatabaseCommit}; use revm_inspectors::access_list::AccessListInspector; -use revm_primitives::TxEnv; use tracing::trace; use super::{LoadBlock, LoadPendingBlock, LoadState, LoadTransaction, SpawnBlocking, Trace}; @@ -119,13 +118,10 @@ pub trait EthCall: Call + LoadPendingBlock { // to be replayed let transactions = block.into_transactions_ecrecovered().take(num_txs); for tx in transactions { - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); let env = EnvWithHandlerCfg::new_with_cfg_env( cfg.clone(), block_env.clone(), - tx_env, + Call::evm_config(&this).tx_env(&tx), ); let (res, _) = this.transact(&mut db, env)?; db.commit(res.state); @@ -427,11 +423,11 @@ pub trait Call: LoadState + SpawnBlocking { tx.hash, )?; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); - - let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env); + let env = EnvWithHandlerCfg::new_with_cfg_env( + cfg, + block_env, + Call::evm_config(&this).tx_env(&tx), + ); let (res, _) = this.transact(&mut db, env)?; f(tx_info, res, db) diff --git a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs index 1a78b8961306..8f3e38817695 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs @@ -30,7 +30,6 @@ use reth_rpc_eth_types::{ }; use reth_transaction_pool::{BestTransactionsAttributes, TransactionPool}; use revm::{db::states::bundle_state::BundleRetention, DatabaseCommit, State}; -use revm_primitives::TxEnv; use tokio::sync::Mutex; use tracing::debug; @@ -291,12 +290,12 @@ pub trait LoadPendingBlock { } } - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Self::evm_config(self).fill_tx_env(&mut tx_env, &tx.clone().into_signed(), signer); - // Configure the environment for the block. - let env = Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env); + let env = Env::boxed( + cfg.cfg_env.clone(), + block_env.clone(), + Self::evm_config(self).tx_env(&tx), + ); let mut evm = revm::Evm::builder().with_env(env).with_db(&mut db).build(); diff --git a/crates/rpc/rpc-eth-api/src/helpers/trace.rs b/crates/rpc/rpc-eth-api/src/helpers/trace.rs index b8b8d24c92c2..d48e566ed51d 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/trace.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/trace.rs @@ -11,7 +11,7 @@ use reth_rpc_eth_types::{ use reth_rpc_types::{BlockId, TransactionInfo}; use revm::{db::CacheDB, Database, DatabaseCommit, GetInspector, Inspector}; use revm_inspectors::tracing::{TracingInspector, TracingInspectorConfig}; -use revm_primitives::{EnvWithHandlerCfg, EvmState, ExecutionResult, ResultAndState, TxEnv}; +use revm_primitives::{EnvWithHandlerCfg, EvmState, ExecutionResult, ResultAndState}; use super::{Call, LoadBlock, LoadPendingBlock, LoadState, LoadTransaction}; @@ -196,11 +196,11 @@ pub trait Trace: LoadState { tx.hash, )?; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(&this).fill_tx_env(&mut tx_env, &tx.into_signed(), signer); - - let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env); + let env = EnvWithHandlerCfg::new_with_cfg_env( + cfg, + block_env, + Call::evm_config(&this).tx_env(&tx), + ); let (res, _) = this.inspect(StateCacheDbRefMutWrapper(&mut db), env, &mut inspector)?; f(tx_info, inspector, res, db) @@ -311,13 +311,7 @@ pub trait Trace: LoadState { block_number: Some(block_number), base_fee: Some(base_fee), }; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Trace::evm_config(&this).fill_tx_env( - &mut tx_env, - &tx.into_signed(), - signer, - ); + let tx_env = Trace::evm_config(&this).tx_env(&tx); (tx_info, tx_env) }) .peekable(); diff --git a/crates/rpc/rpc/src/debug.rs b/crates/rpc/rpc/src/debug.rs index 42c6114d9cbe..67363dff31c1 100644 --- a/crates/rpc/rpc/src/debug.rs +++ b/crates/rpc/rpc/src/debug.rs @@ -35,7 +35,6 @@ use revm_inspectors::tracing::{ js::{JsInspector, TransactionContext}, FourByteInspector, MuxInspector, TracingInspector, TracingInspectorConfig, }; -use revm_primitives::TxEnv; use tokio::sync::{AcquireError, OwnedSemaphorePermit}; /// `debug` API implementation. @@ -102,16 +101,12 @@ where while let Some((index, tx)) = transactions.next() { let tx_hash = tx.hash; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(this.eth_api()).fill_tx_env( - &mut tx_env, - &tx.clone().into_signed(), - signer, - ); - let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env), + env: Env::boxed( + cfg.cfg_env.clone(), + block_env.clone(), + Call::evm_config(this.eth_api()).tx_env(&tx), + ), handler_cfg: cfg.handler_cfg, }; let (result, state_changes) = this.trace_transaction( @@ -249,16 +244,12 @@ where tx.hash, )?; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(this.eth_api()).fill_tx_env( - &mut tx_env, - &tx.clone().into_signed(), - signer, - ); - let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env, tx_env), + env: Env::boxed( + cfg.cfg_env.clone(), + block_env, + Call::evm_config(this.eth_api()).tx_env(&tx), + ), handler_cfg: cfg.handler_cfg, }; @@ -486,15 +477,12 @@ where // Execute all transactions until index for tx in transactions { - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(this.eth_api()).fill_tx_env( - &mut tx_env, - &tx.into_signed(), - signer, - ); let env = EnvWithHandlerCfg { - env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env), + env: Env::boxed( + cfg.cfg_env.clone(), + block_env.clone(), + Call::evm_config(this.eth_api()).tx_env(&tx), + ), handler_cfg: cfg.handler_cfg, }; let (res, _) = this.inner.eth_api.transact(&mut db, env)?; diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index 9f6d681cd5f2..ff98194b91fb 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -36,7 +36,6 @@ use revm_inspectors::{ opcode::OpcodeGasInspector, tracing::{parity::populate_state_diff, TracingInspector, TracingInspectorConfig}, }; -use revm_primitives::TxEnv; use tokio::sync::{AcquireError, OwnedSemaphorePermit}; /// `trace` API implementation. @@ -116,16 +115,12 @@ where let (cfg, block, at) = self.inner.eth_api.evm_env_at(block_id.unwrap_or_default()).await?; - let mut tx_env = TxEnv::default(); - let signer = tx.signer(); - Call::evm_config(self.eth_api()).fill_tx_env( - &mut tx_env, - &tx.into_ecrecovered_transaction().into_signed(), - signer, + let env = EnvWithHandlerCfg::new_with_cfg_env( + cfg, + block, + Call::evm_config(self.eth_api()).tx_env(&tx.into_ecrecovered_transaction()), ); - let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block, tx_env); - let config = TracingInspectorConfig::from_parity_config(&trace_types); self.inner From 57eb3616b34a1544de372c61f94efc74a03e1ce2 Mon Sep 17 00:00:00 2001 From: joshieDo <93316087+joshieDo@users.noreply.github.com> Date: Fri, 28 Jun 2024 17:31:17 +0200 Subject: [PATCH 4/4] use self.fill_tx_env instead --- crates/evm/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index e9b234147663..20d2f67ed6f2 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -111,7 +111,7 @@ pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static { /// Returns a [`TxEnv`] from a [`TransactionSignedEcRecovered`]. fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv { let mut tx_env = TxEnv::default(); - fill_tx_env(&mut tx_env, transaction.deref(), transaction.signer()); + self.fill_tx_env(&mut tx_env, transaction.deref(), transaction.signer()); tx_env }