example_erc20_gas/
exec.rs1use crate::handler::Erc20MainetHandler;
2use revm::{
3 context::JournalOutput,
4 context_interface::{
5 result::{EVMError, ExecutionResult, HaltReason, InvalidTransaction, ResultAndState},
6 ContextTr, JournalTr,
7 },
8 database_interface::DatabaseCommit,
9 handler::{
10 instructions::InstructionProvider, ContextTrDbError, EthFrame, EvmTr, Handler,
11 PrecompileProvider,
12 },
13 interpreter::{interpreter::EthInterpreter, InterpreterResult},
14};
15
16pub fn transact_erc20evm<EVM>(
17 evm: &mut EVM,
18) -> Result<ResultAndState<HaltReason>, EVMError<ContextTrDbError<EVM::Context>, InvalidTransaction>>
19where
20 EVM: EvmTr<
21 Context: ContextTr<Journal: JournalTr<FinalOutput = JournalOutput>>,
22 Precompiles: PrecompileProvider<EVM::Context, Output = InterpreterResult>,
23 Instructions: InstructionProvider<
24 Context = EVM::Context,
25 InterpreterTypes = EthInterpreter,
26 >,
27 >,
28{
29 Erc20MainetHandler::<EVM, _, EthFrame<EVM, _, EthInterpreter>>::new().run(evm)
30}
31
32pub fn transact_erc20evm_commit<EVM>(
33 evm: &mut EVM,
34) -> Result<ExecutionResult<HaltReason>, EVMError<ContextTrDbError<EVM::Context>, InvalidTransaction>>
35where
36 EVM: EvmTr<
37 Context: ContextTr<Journal: JournalTr<FinalOutput = JournalOutput>, Db: DatabaseCommit>,
38 Precompiles: PrecompileProvider<EVM::Context, Output = InterpreterResult>,
39 Instructions: InstructionProvider<
40 Context = EVM::Context,
41 InterpreterTypes = EthInterpreter,
42 >,
43 >,
44{
45 transact_erc20evm(evm).map(|r| {
46 evm.ctx().db().commit(r.state);
47 r.result
48 })
49}