mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(executor): add init methods to set TxEnv overrides (#12551)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -18,7 +18,7 @@ use reth_evm::{
|
||||
},
|
||||
state_change::post_block_balance_increments,
|
||||
system_calls::{OnStateHook, SystemCaller},
|
||||
ConfigureEvm,
|
||||
ConfigureEvm, TxEnvOverrides,
|
||||
};
|
||||
use reth_primitives::{BlockWithSenders, Receipt};
|
||||
use reth_revm::db::State;
|
||||
@ -83,6 +83,8 @@ where
|
||||
chain_spec: Arc<ChainSpec>,
|
||||
/// How to create an EVM.
|
||||
evm_config: EvmConfig,
|
||||
/// Optional overrides for the transactions environment.
|
||||
tx_env_overrides: Option<Box<dyn TxEnvOverrides>>,
|
||||
/// Current state for block execution.
|
||||
state: State<DB>,
|
||||
/// Utility to call system smart contracts.
|
||||
@ -96,7 +98,7 @@ where
|
||||
/// Creates a new [`EthExecutionStrategy`]
|
||||
pub fn new(state: State<DB>, chain_spec: Arc<ChainSpec>, evm_config: EvmConfig) -> Self {
|
||||
let system_caller = SystemCaller::new(evm_config.clone(), chain_spec.clone());
|
||||
Self { state, chain_spec, evm_config, system_caller }
|
||||
Self { state, chain_spec, evm_config, system_caller, tx_env_overrides: None }
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,6 +132,10 @@ where
|
||||
{
|
||||
type Error = BlockExecutionError;
|
||||
|
||||
fn init(&mut self, tx_env_overrides: Box<dyn TxEnvOverrides>) {
|
||||
self.tx_env_overrides = Some(tx_env_overrides);
|
||||
}
|
||||
|
||||
fn apply_pre_execution_changes(
|
||||
&mut self,
|
||||
block: &BlockWithSenders,
|
||||
@ -172,6 +178,10 @@ where
|
||||
|
||||
self.evm_config.fill_tx_env(evm.tx_mut(), transaction, *sender);
|
||||
|
||||
if let Some(tx_env_overrides) = &mut self.tx_env_overrides {
|
||||
tx_env_overrides.apply(evm.tx_mut());
|
||||
}
|
||||
|
||||
// Execute transaction.
|
||||
let result_and_state = evm.transact().map_err(move |err| {
|
||||
let new_err = err.map_db_err(|e| e.into());
|
||||
|
||||
Reference in New Issue
Block a user