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