use super::HlEvmInner; use crate::evm::{spec::HlSpecId, transaction::HlTxTr}; use revm::{ DatabaseCommit, ExecuteCommitEvm, ExecuteEvm, context::{ContextSetters, result::HaltReason}, context_interface::{ Cfg, ContextTr, Database, JournalTr, result::{EVMError, ExecutionResult, ResultAndState}, }, handler::{PrecompileProvider, instructions::EthInstructions}, inspector::{InspectCommitEvm, InspectEvm, Inspector, JournalExt}, interpreter::{InterpreterResult, interpreter::EthInterpreter}, state::EvmState, }; // Type alias for HL context pub trait HlContextTr: ContextTr, Tx: HlTxTr, Cfg: Cfg> { } impl HlContextTr for T where T: ContextTr, Tx: HlTxTr, Cfg: Cfg> { } /// Type alias for the error type of the HlEvm. type HlError = EVMError<<::Db as Database>::Error>; impl ExecuteEvm for HlEvmInner, PRECOMPILE> where CTX: HlContextTr + ContextSetters, PRECOMPILE: PrecompileProvider, { type ExecutionResult = ExecutionResult; type State = EvmState; type Error = HlError; type Tx = ::Tx; type Block = ::Block; #[inline] fn transact_one(&mut self, tx: Self::Tx) -> Result { self.0.transact_one(tx) } #[inline] fn finalize(&mut self) -> Self::State { self.0.finalize() } #[inline] fn set_block(&mut self, block: Self::Block) { self.0.set_block(block); } #[inline] fn replay(&mut self) -> Result, Self::Error> { self.0.replay() } } impl ExecuteCommitEvm for HlEvmInner, PRECOMPILE> where CTX: HlContextTr + ContextSetters, PRECOMPILE: PrecompileProvider, { fn commit(&mut self, state: Self::State) { self.0.commit(state); } } impl InspectEvm for HlEvmInner, PRECOMPILE> where CTX: HlContextTr + ContextSetters, INSP: Inspector, PRECOMPILE: PrecompileProvider, { type Inspector = INSP; fn set_inspector(&mut self, inspector: Self::Inspector) { self.0.set_inspector(inspector); } fn inspect_one_tx(&mut self, tx: Self::Tx) -> Result { self.0.inspect_one_tx(tx) } } impl InspectCommitEvm for HlEvmInner, PRECOMPILE> where CTX: HlContextTr + ContextSetters, INSP: Inspector, PRECOMPILE: PrecompileProvider, { }