Skip to content

Commit b24ca76

Browse files
authored
chore: remove tx_env_with_recovered from rpc crates (#9158)
1 parent 5416adf commit b24ca76

File tree

6 files changed

+64
-28
lines changed

6 files changed

+64
-28
lines changed

crates/evm/src/lib.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
#[cfg(not(feature = "std"))]
1313
extern crate alloc;
1414

15+
use core::ops::Deref;
16+
1517
use reth_chainspec::ChainSpec;
1618
use reth_primitives::{
1719
revm::env::{fill_block_env, fill_tx_env},
18-
Address, Header, TransactionSigned, U256,
20+
Address, Header, TransactionSigned, TransactionSignedEcRecovered, U256,
1921
};
2022
use revm::{inspector_handle_register, Database, Evm, EvmBuilder, GetInspector};
2123
use revm_primitives::{BlockEnv, CfgEnvWithHandlerCfg, EnvWithHandlerCfg, SpecId, TxEnv};
@@ -106,6 +108,13 @@ pub trait ConfigureEvm: ConfigureEvmEnv {
106108
/// Default trait method implementation is done w.r.t. L1.
107109
#[auto_impl::auto_impl(&, Arc)]
108110
pub trait ConfigureEvmEnv: Send + Sync + Unpin + Clone + 'static {
111+
/// Returns a [`TxEnv`] from a [`TransactionSignedEcRecovered`].
112+
fn tx_env(&self, transaction: &TransactionSignedEcRecovered) -> TxEnv {
113+
let mut tx_env = TxEnv::default();
114+
self.fill_tx_env(&mut tx_env, transaction.deref(), transaction.signer());
115+
tx_env
116+
}
117+
109118
/// Fill transaction environment from a [`TransactionSigned`] and the given sender address.
110119
fn fill_tx_env(&self, tx_env: &mut TxEnv, transaction: &TransactionSigned, sender: Address) {
111120
fill_tx_env(tx_env, transaction, sender)

crates/rpc/rpc-eth-api/src/helpers/call.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use futures::Future;
55
use reth_evm::{ConfigureEvm, ConfigureEvmEnv};
66
use reth_primitives::{
7-
revm::env::tx_env_with_recovered,
87
revm_primitives::{
98
BlockEnv, CfgEnvWithHandlerCfg, EnvWithHandlerCfg, ExecutionResult, HaltReason,
109
ResultAndState, TransactTo,
@@ -119,9 +118,11 @@ pub trait EthCall: Call + LoadPendingBlock {
119118
// to be replayed
120119
let transactions = block.into_transactions_ecrecovered().take(num_txs);
121120
for tx in transactions {
122-
let tx = tx_env_with_recovered(&tx);
123-
let env =
124-
EnvWithHandlerCfg::new_with_cfg_env(cfg.clone(), block_env.clone(), tx);
121+
let env = EnvWithHandlerCfg::new_with_cfg_env(
122+
cfg.clone(),
123+
block_env.clone(),
124+
Call::evm_config(&this).tx_env(&tx),
125+
);
125126
let (res, _) = this.transact(&mut db, env)?;
126127
db.commit(res.state);
127128
}
@@ -422,8 +423,11 @@ pub trait Call: LoadState + SpawnBlocking {
422423
tx.hash,
423424
)?;
424425

425-
let env =
426-
EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env_with_recovered(&tx));
426+
let env = EnvWithHandlerCfg::new_with_cfg_env(
427+
cfg,
428+
block_env,
429+
Call::evm_config(&this).tx_env(&tx),
430+
);
427431

428432
let (res, _) = this.transact(&mut db, env)?;
429433
f(tx_info, res, db)

crates/rpc/rpc-eth-api/src/helpers/pending_block.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ use std::time::{Duration, Instant};
55

66
use futures::Future;
77
use reth_chainspec::EthereumHardforks;
8-
use reth_evm::ConfigureEvm;
8+
use reth_evm::{ConfigureEvm, ConfigureEvmEnv};
99
use reth_execution_types::ExecutionOutcome;
1010
use reth_primitives::{
1111
constants::{eip4844::MAX_DATA_GAS_PER_BLOCK, BEACON_NONCE, EMPTY_ROOT_HASH},
1212
proofs::calculate_transaction_root,
13-
revm::env::tx_env_with_recovered,
1413
revm_primitives::{
1514
BlockEnv, CfgEnv, CfgEnvWithHandlerCfg, EVMError, Env, ExecutionResult, InvalidTransaction,
1615
ResultAndState, SpecId,
@@ -292,8 +291,11 @@ pub trait LoadPendingBlock {
292291
}
293292

294293
// Configure the environment for the block.
295-
let env =
296-
Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx_env_with_recovered(&tx));
294+
let env = Env::boxed(
295+
cfg.cfg_env.clone(),
296+
block_env.clone(),
297+
Self::evm_config(self).tx_env(&tx),
298+
);
297299

298300
let mut evm = revm::Evm::builder().with_env(env).with_db(&mut db).build();
299301

crates/rpc/rpc-eth-api/src/helpers/trace.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
//! Loads a pending block from database. Helper trait for `eth_` call and trace RPC methods.
22
33
use futures::Future;
4-
use reth_evm::ConfigureEvm;
5-
use reth_primitives::{revm::env::tx_env_with_recovered, B256};
4+
use reth_evm::{ConfigureEvm, ConfigureEvmEnv};
5+
use reth_primitives::B256;
66
use reth_revm::database::StateProviderDatabase;
77
use reth_rpc_eth_types::{
88
cache::db::{StateCacheDb, StateCacheDbRefMutWrapper, StateProviderTraitObjWrapper},
@@ -196,8 +196,11 @@ pub trait Trace: LoadState {
196196
tx.hash,
197197
)?;
198198

199-
let env =
200-
EnvWithHandlerCfg::new_with_cfg_env(cfg, block_env, tx_env_with_recovered(&tx));
199+
let env = EnvWithHandlerCfg::new_with_cfg_env(
200+
cfg,
201+
block_env,
202+
Call::evm_config(&this).tx_env(&tx),
203+
);
201204
let (res, _) =
202205
this.inspect(StateCacheDbRefMutWrapper(&mut db), env, &mut inspector)?;
203206
f(tx_info, inspector, res, db)
@@ -308,7 +311,7 @@ pub trait Trace: LoadState {
308311
block_number: Some(block_number),
309312
base_fee: Some(base_fee),
310313
};
311-
let tx_env = tx_env_with_recovered(&tx);
314+
let tx_env = Trace::evm_config(&this).tx_env(&tx);
312315
(tx_info, tx_env)
313316
})
314317
.peekable();

crates/rpc/rpc/src/debug.rs

+21-8
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ use alloy_rlp::{Decodable, Encodable};
44
use async_trait::async_trait;
55
use jsonrpsee::core::RpcResult;
66
use reth_chainspec::EthereumHardforks;
7+
use reth_evm::ConfigureEvmEnv;
78
use reth_primitives::{
8-
revm::env::tx_env_with_recovered, Address, Block, BlockId, BlockNumberOrTag, Bytes,
9-
TransactionSignedEcRecovered, Withdrawals, B256, U256,
9+
Address, Block, BlockId, BlockNumberOrTag, Bytes, TransactionSignedEcRecovered, Withdrawals,
10+
B256, U256,
1011
};
1112
use reth_provider::{
1213
BlockReaderIdExt, ChainSpecProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory,
1314
TransactionVariant,
1415
};
1516
use reth_revm::database::StateProviderDatabase;
1617
use reth_rpc_api::DebugApiServer;
17-
use reth_rpc_eth_api::helpers::{EthApiSpec, EthTransactions, TraceExt};
18+
use reth_rpc_eth_api::helpers::{Call, EthApiSpec, EthTransactions, TraceExt};
1819
use reth_rpc_eth_types::{revm_utils::prepare_call_env, EthApiError, EthResult, StateCacheDb};
1920
use reth_rpc_server_types::{result::internal_rpc_err, ToRpcResult};
2021
use reth_rpc_types::{
@@ -99,9 +100,13 @@ where
99100
let mut transactions = transactions.into_iter().enumerate().peekable();
100101
while let Some((index, tx)) = transactions.next() {
101102
let tx_hash = tx.hash;
102-
let tx = tx_env_with_recovered(&tx);
103+
103104
let env = EnvWithHandlerCfg {
104-
env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx),
105+
env: Env::boxed(
106+
cfg.cfg_env.clone(),
107+
block_env.clone(),
108+
Call::evm_config(this.eth_api()).tx_env(&tx),
109+
),
105110
handler_cfg: cfg.handler_cfg,
106111
};
107112
let (result, state_changes) = this.trace_transaction(
@@ -240,7 +245,11 @@ where
240245
)?;
241246

242247
let env = EnvWithHandlerCfg {
243-
env: Env::boxed(cfg.cfg_env.clone(), block_env, tx_env_with_recovered(&tx)),
248+
env: Env::boxed(
249+
cfg.cfg_env.clone(),
250+
block_env,
251+
Call::evm_config(this.eth_api()).tx_env(&tx),
252+
),
244253
handler_cfg: cfg.handler_cfg,
245254
};
246255

@@ -453,6 +462,7 @@ where
453462
}
454463

455464
let this = self.clone();
465+
456466
self.inner
457467
.eth_api
458468
.spawn_with_state_at_block(at.into(), move |state| {
@@ -467,9 +477,12 @@ where
467477

468478
// Execute all transactions until index
469479
for tx in transactions {
470-
let tx = tx_env_with_recovered(&tx);
471480
let env = EnvWithHandlerCfg {
472-
env: Env::boxed(cfg.cfg_env.clone(), block_env.clone(), tx),
481+
env: Env::boxed(
482+
cfg.cfg_env.clone(),
483+
block_env.clone(),
484+
Call::evm_config(this.eth_api()).tx_env(&tx),
485+
),
473486
handler_cfg: cfg.handler_cfg,
474487
};
475488
let (res, _) = this.inner.eth_api.transact(&mut db, env)?;

crates/rpc/rpc/src/trace.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ use reth_chainspec::EthereumHardforks;
66
use reth_consensus_common::calc::{
77
base_block_reward, base_block_reward_pre_merge, block_reward, ommer_reward,
88
};
9-
use reth_primitives::{revm::env::tx_env_with_recovered, BlockId, Bytes, Header, B256, U256};
9+
use reth_evm::ConfigureEvmEnv;
10+
use reth_primitives::{BlockId, Bytes, Header, B256, U256};
1011
use reth_provider::{BlockReader, ChainSpecProvider, EvmEnvProvider, StateProviderFactory};
1112
use reth_revm::database::StateProviderDatabase;
1213
use reth_rpc_api::TraceApiServer;
13-
use reth_rpc_eth_api::helpers::TraceExt;
14+
use reth_rpc_eth_api::helpers::{Call, TraceExt};
1415
use reth_rpc_eth_types::{
1516
error::{EthApiError, EthResult},
1617
revm_utils::prepare_call_env,
@@ -113,8 +114,12 @@ where
113114
let tx = recover_raw_transaction(tx)?;
114115

115116
let (cfg, block, at) = self.inner.eth_api.evm_env_at(block_id.unwrap_or_default()).await?;
116-
let tx = tx_env_with_recovered(&tx.into_ecrecovered_transaction());
117-
let env = EnvWithHandlerCfg::new_with_cfg_env(cfg, block, tx);
117+
118+
let env = EnvWithHandlerCfg::new_with_cfg_env(
119+
cfg,
120+
block,
121+
Call::evm_config(self.eth_api()).tx_env(&tx.into_ecrecovered_transaction()),
122+
);
118123

119124
let config = TracingInspectorConfig::from_parity_config(&trace_types);
120125

0 commit comments

Comments
 (0)