1use crate::ConfigureEvm;
4use alloy_evm::{
5 block::{BlockExecutorFactory, BlockExecutorFor},
6 Database, EvmEnv, EvmFactory,
7};
8use revm::{database::State, inspector::NoOpInspector, Inspector};
9
10pub type EvmFactoryFor<Evm> =
12 <<Evm as ConfigureEvm>::BlockExecutorFactory as BlockExecutorFactory>::EvmFactory;
13
14pub type SpecFor<Evm> = <EvmFactoryFor<Evm> as EvmFactory>::Spec;
16
17pub type BlockEnvFor<Evm> = <EvmFactoryFor<Evm> as EvmFactory>::BlockEnv;
19
20pub type EvmFor<Evm, DB, I = NoOpInspector> = <EvmFactoryFor<Evm> as EvmFactory>::Evm<DB, I>;
22
23pub type EvmErrorFor<Evm, DB> = <EvmFactoryFor<Evm> as EvmFactory>::Error<DB>;
25
26pub type EvmContextFor<Evm, DB> = <EvmFactoryFor<Evm> as EvmFactory>::Context<DB>;
28
29pub type HaltReasonFor<Evm> = <EvmFactoryFor<Evm> as EvmFactory>::HaltReason;
31
32pub type TxEnvFor<Evm> = <EvmFactoryFor<Evm> as EvmFactory>::Tx;
34
35pub type TxExecutionResultFor<Evm> =
37 <<Evm as ConfigureEvm>::BlockExecutorFactory as BlockExecutorFactory>::TxExecutionResult;
38
39pub type ExecutionCtxFor<'a, Evm> =
41 <<Evm as ConfigureEvm>::BlockExecutorFactory as BlockExecutorFactory>::ExecutionCtx<'a>;
42
43pub type BlockExecutorForEvm<'a, Evm, DB, I = NoOpInspector> =
45 BlockExecutorFor<'a, <Evm as ConfigureEvm>::BlockExecutorFactory, &'a mut State<DB>, I>;
46
47pub type EvmEnvFor<Evm> = EvmEnv<SpecFor<Evm>, BlockEnvFor<Evm>>;
49
50pub trait InspectorFor<Evm: ConfigureEvm, DB: Database>: Inspector<EvmContextFor<Evm, DB>> {}
52impl<T, Evm, DB> InspectorFor<Evm, DB> for T
53where
54 Evm: ConfigureEvm,
55 DB: Database,
56 T: Inspector<EvmContextFor<Evm, DB>>,
57{
58}