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 frame_tx;
13pub mod keccak;
14pub mod logging;
15pub mod push;
16pub mod stack_memory_storage_flow;
17pub mod system;
18
19pub trait OpcodeHandler {
20    fn eval(vm: &mut VM<'_>) -> Result<OpcodeResult, VMError>;
21}
22
23pub struct OpStopHandler;
24impl OpcodeHandler for OpStopHandler {
25    fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
26        Ok(OpcodeResult::Halt)
27    }
28}
29
30pub struct OpInvalidHandler;
31impl OpcodeHandler for OpInvalidHandler {
32    fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
33        Err(ExceptionalHalt::InvalidOpcode.into())
34    }
35}