revm_inspector/
mainnet_inspect.rs1use context::{ContextSetters, ContextTr, Evm, JournalOutput, JournalTr};
2use database_interface::DatabaseCommit;
3use handler::{
4 instructions::EthInstructions, EthFrame, EvmTr, EvmTrError, Frame, FrameResult, Handler,
5 MainnetHandler, PrecompileProvider,
6};
7use interpreter::{interpreter::EthInterpreter, FrameInput, InterpreterResult};
8
9use crate::{
10 inspect::{InspectCommitEvm, InspectEvm},
11 Inspector, InspectorEvmTr, InspectorFrame, InspectorHandler, JournalExt,
12};
13
14impl<EVM, ERROR, FRAME> InspectorHandler for MainnetHandler<EVM, ERROR, FRAME>
15where
16 EVM: InspectorEvmTr<
17 Context: ContextTr<Journal: JournalTr<FinalOutput = JournalOutput>>,
18 Inspector: Inspector<<<Self as Handler>::Evm as EvmTr>::Context, EthInterpreter>,
19 >,
20 ERROR: EvmTrError<EVM>,
21 FRAME: Frame<Evm = EVM, Error = ERROR, FrameResult = FrameResult, FrameInit = FrameInput>
22 + InspectorFrame<IT = EthInterpreter>,
23{
24 type IT = EthInterpreter;
25}
26
27impl<CTX, INSP, PRECOMPILES> InspectEvm
28 for Evm<CTX, INSP, EthInstructions<EthInterpreter, CTX>, PRECOMPILES>
29where
30 CTX: ContextSetters + ContextTr<Journal: JournalTr<FinalOutput = JournalOutput> + JournalExt>,
31 INSP: Inspector<CTX, EthInterpreter>,
32 PRECOMPILES: PrecompileProvider<CTX, Output = InterpreterResult>,
33{
34 type Inspector = INSP;
35
36 fn set_inspector(&mut self, inspector: Self::Inspector) {
37 self.data.inspector = inspector;
38 }
39
40 fn inspect_replay(&mut self) -> Self::Output {
41 let mut t = MainnetHandler::<_, _, EthFrame<_, _, _>> {
42 _phantom: core::marker::PhantomData,
43 };
44
45 t.inspect_run(self)
46 }
47}
48
49impl<CTX, INSP, PRECOMPILES> InspectCommitEvm
50 for Evm<CTX, INSP, EthInstructions<EthInterpreter, CTX>, PRECOMPILES>
51where
52 CTX: ContextSetters
53 + ContextTr<Journal: JournalTr<FinalOutput = JournalOutput> + JournalExt, Db: DatabaseCommit>,
54 INSP: Inspector<CTX, EthInterpreter>,
55 PRECOMPILES: PrecompileProvider<CTX, Output = InterpreterResult>,
56{
57 fn inspect_commit_previous(&mut self) -> Self::CommitOutput {
58 self.inspect_replay().map(|r| {
59 self.ctx().db().commit(r.state);
60 r.result
61 })
62 }
63}