A high-performance Ethereum Virtual Machine (EVM) implementation in Mojo with reference-driven validation against py-evm.
- Modular design: Clean separation between core VM (
vm/computation.mojo), pure opcode functions (vm/logic/), and testing infrastructure - Reference-driven development: Uses py-evm as ground truth for all implementations
- Pure functional opcodes: Arithmetic, comparison, and bitwise operations implemented as side-effect-free functions
- SIMD-optimized crypto: High-performance Keccak256 and SHA256 with 21-739x performance improvements
- Comprehensive test infrastructure: Multiple validators (
run_official_tests.py,pyevm_validator.py,fork_validator.py)
β Passing Categories:
- Basic arithmetic (ADD, SUB, MUL, MOD, etc.)
- Comparison operations (LT, GT, EQ, etc.)
- Bitwise operations (AND, OR, XOR, etc.)
- Simple flow control (JUMP, JUMPI)
- Basic I/O operations
- EXP operations (with correct gas costs)
β Known Failing Tests:
div.json: Gas mismatch (Mojo: 20744 vs py-evm: 5744)fib.json: Large gas discrepancy (Mojo: 203016 vs py-evm: 204916)twoOps.json: Massive gas difference (Mojo: 13904664 vs py-evm: 14681628)
- Arithmetic: ADD, SUB, MUL, DIV, SDIV, MOD, SMOD, ADDMOD, MULMOD, EXP, SIGNEXTEND
- Comparison: LT, GT, SLT, SGT, EQ, ISZERO
- Bitwise: AND, OR, XOR, NOT, BYTE, SHL, SHR, SAR
- Stack: PUSH1-PUSH32, DUP1-DUP16, SWAP1-SWAP16, POP
- Memory: MLOAD, MSTORE
- Storage: SLOAD, SSTORE
- Flow: JUMP, JUMPI, JUMPDEST, STOP
- I/O: CALLDATALOAD, CALLDATASIZE, CALLDATACOPY, RETURN, REVERT
- Context: ADDRESS, CALLER, ORIGIN, GASPRICE, CODESIZE, COINBASE, TIMESTAMP, NUMBER, DIFFICULTY, GASLIMIT
- Logging: LOG0-LOG4
- Hashing: KECCAK256/SHA3
-
Complex State Operations:
- BALANCE, EXTCODESIZE, EXTCODEHASH, EXTCODECOPY (read-only state access)
- No multi-account transaction simulation
-
CALL Family Operations:
- CALL, DELEGATECALL, CALLCODE, STATICCALL
- CREATE, CREATE2
- No inter-contract interaction capability
-
Advanced Features:
- Pre-compiled contracts
- Error handling and exception propagation
- Complete gas metering edge cases
- Full transaction context simulation
-
Fork Compatibility:
- Implementation exists but has execution issues
- Multi-fork testing not fully operational
# Test all VMTests (basic EVM operations)
pixi run python run_official_tests.py vm
# Test a specific bytecode against py-evm
pixi run python pyevm_validator.py 600160019001
# Multi-fork validation (when working)
pixi run python fork_validator.py 600160019001 Berlinmojo_evm/
βββ vm/ # Mojo EVM implementation
β βββ computation.mojo # Main execution engine
β βββ state.mojo # EVM state management
β βββ execution_frame.mojo # Execution context
β βββ message.mojo # Message handling
β βββ gas.mojo # Gas calculations
β βββ logic/ # Pure function opcode implementations
β βββ arithmetic.mojo # ADD, SUB, MUL, DIV, MOD, EXP
β βββ comparison.mojo # LT, GT, EQ, ISZERO, SLT, SGT
β βββ bitwise.mojo # AND, OR, XOR, NOT, SHL, SHR, SAR
β βββ keccak256.mojo # Keccak256 hash function
β βββ keccak256_optimized.mojo # SIMD-optimized Keccak256
β βββ sha256.mojo # SHA256 hash function
β βββ sha256_optimized.mojo # SIMD-optimized SHA256
β βββ sha3.mojo # SHA3/Keccak interface
β βββ call.mojo # Call operations
β βββ context.mojo # Context operations
β βββ system.mojo # System operations
βββ run_official_tests.py # Main test runner with full state validation
βββ single_test_runner.mojo # Mojo helper for run_official_tests.py
βββ pyevm_validator.py # Standalone py-evm reference execution
βββ fork_validator.py # Multi-fork validation tool (needs fixes)
βββ reference/ # Reference implementations
β βββ py-evm/ # Complete py-evm source code
β βββ revm/ # Rust EVM for optimization ideas
βββ docs/ # Detailed documentation
This project implements basic EVM opcodes with ~75% pass rate on VMTests. While core arithmetic, bitwise, and stack operations work correctly, significant gaps remain in:
- Complex state operations (BALANCE, EXTCODE*)
- Inter-contract calls (CALL, DELEGATECALL, CREATE)
- Gas accounting edge cases
- Complete transaction simulation
- Gas Discrepancies: Some tests show gas calculation differences with py-evm
- State Management: Limited to single-contract execution
- Fork Compatibility: Multi-fork testing infrastructure needs fixes
This project follows reference-driven development:
- Check py-evm implementation in
reference/py-evm/eth/vm/logic/ - Study exact behavior including gas costs and edge cases
- Implement in Mojo following existing patterns
- Validate against py-evm using the test infrastructure
This project uses reference implementations with their respective licenses:
- py-evm components under MIT License
- Original Mojo implementation code follows the same MIT License
This is an experimental implementation in active development. It is not suitable for production use. The project serves as:
- A learning exercise for Mojo language capabilities
- A performance exploration of SIMD-optimized EVM operations
- A foundation for future high-performance EVM implementations
-
py-evm: Python Implementation of the Ethereum protocol
-
revm: Revm is a highly efficient and stable implementation of the Ethereum Virtual Machine (EVM) written in Rust.
-
guillotine: Guillotine is a new EVM implementation built in Zig by @FUCORY, the creator of Tevm
