Skip to main content

ethrex_levm/opcode_handlers/
mod.rs

1use crate::{
2    errors::{ExceptionalHalt, OpcodeResult, VMError},
3    vm::VM,
4};
5
6pub mod arithmetic;
7pub mod bitwise_comparison;
8pub mod block;
9pub mod dup;
10pub mod environment;
11pub mod exchange;
12pub mod keccak;
13pub mod logging;
14pub mod push;
15pub mod stack_memory_storage_flow;
16pub mod system;
17
18pub trait OpcodeHandler {
19    fn eval(vm: &mut VM<'_>) -> Result<OpcodeResult, VMError>;
20}
21
22pub struct OpStopHandler;
23impl OpcodeHandler for OpStopHandler {
24    fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
25        Ok(OpcodeResult::Halt)
26    }
27}
28
29pub struct OpInvalidHandler;
30impl OpcodeHandler for OpInvalidHandler {
31    fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
32        Err(ExceptionalHalt::InvalidOpcode.into())
33    }
34}