All notable changes to ZEVM will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Nothing yet
- Nothing yet
- Nothing yet
- Nothing yet
- Nothing yet
- Nothing yet
- PrecompileId.Custom variant: Added support for custom precompile identifiers via
PrecompileId.custom("id") - PrecompileId.name() method: Returns EIP-7910 standardized names for all precompiles (e.g., "SHA256", "BN254_ADD")
- PrecompileId.precompile() method: Convenience method to get the appropriate precompile implementation for a given spec, handling spec-specific variants automatically
- ModExp Osaka gas calculation: Fixed gas calculation formula to use
max(500, complexity * iteration_count)instead of500 + complexity * iteration_countto match EIP-7883 specification - ModExp Osaka complexity calculation: Fixed to use
max(base_len, mod_len)instead ofmax(base_len, exp_len, mod_len)for complexity calculation - EIP-7823 input size limit: Corrected ModExp input size limit from 32768 bytes to 1024 bytes per parameter as specified in EIP-7823
- PrecompileId type: Changed from
enumtounion(enum)to support Custom variant while maintaining backward compatibility with all existing precompile IDs
- Cross-Platform Makefile: Comprehensive build system with OS detection and automated dependency installation
- Static Linking Support: All binaries now statically link
blstandmcllibraries for self-contained deployment - Automated Dependency Management: Makefile targets for installing dependencies on macOS, Linux, and Windows
- Source-Based Library Installation: Automatic cloning and building of
blstandmclfrom source if not found - Dependency Verification:
make check-depstarget to verify all required dependencies before building - CROSS_PLATFORM.md: Comprehensive guide for building on all supported platforms
- PRECOMPILE_FEATURE_PARITY.md: Detailed feature parity comparison with Rust revm implementation
- Build System: Enhanced
build.zigto support static linking with proper C++ standard library handling - CI Workflow: Simplified CI to use Makefile for consistent builds across platforms
- Library Linking: Improved library detection and linking order for static libraries
- Documentation: Updated README with new Makefile-based build instructions
- Linux Static Linking: Fixed C++ standard library linking to use
libstdc++instead oflibc++on Linux - Ubuntu CI Build: Resolved undefined symbol errors related to C++ standard library on Ubuntu CI runners
- macOS Dynamic Library Loading: Fixed runtime library path issues on macOS CI
- Library Path Handling: Improved handling of absolute vs relative library paths in build system
- Static Linking: Improved security posture with self-contained binaries that don't depend on system libraries
- Initial Release: Complete EVM implementation ported from Rust revm
- Core EVM Interpreter: Full implementation with all standard opcodes
- Gas Tracking System: Comprehensive gas metering and tracking
- Stack-based Execution: Efficient interpreter with proper overflow/underflow handling
- Memory Management: Dynamic memory allocation with bounds checking
- Ethereum Protocol Support: All hardforks from Frontier to Prague
- EIP-1559 Support: Transaction types and fee market implementation
- EIP-2930 Support: Access list support for gas optimization
- EIP-4844 Support: Blob transaction support (Cancun upgrade)
- EIP-7702 Support: Initial EOF (Ethereum Object Format) support
- U256 Type: 256-bit unsigned integer implementation
- Address Type: 20-byte Ethereum address type
- Hash Type: 32-byte hash type (Keccak-256)
- Hardfork Definitions: All Ethereum hardforks from Frontier to Prague
- Constants: EVM constants and magic numbers
- Specification IDs: Hardfork specification management
- Opcode Definitions: All EVM opcodes with metadata
- OpCodeInfo: Opcode information (gas cost, stack inputs/outputs)
- Bytecode Analysis: Jump destination analysis
- Legacy Bytecode: Traditional bytecode format support
- EOF Bytecode: Ethereum Object Format support
- EIP-7702: Delegated bytecode support
- AccountInfo: Account state management (balance, nonce, code hash)
- Account: Complete account representation
- Storage: Key-value storage implementation
- State Transitions: Proper state change handling
- Database Interface: Pluggable database abstraction
- InMemoryDB: High-performance in-memory database implementation
- Account Operations: Insert, retrieve, and update account data
- Code Operations: Bytecode storage and retrieval
- Storage Operations: Storage slot management
- Block Hash Storage: Historical block hash storage
- BlockEnv: Block environment (number, timestamp, gas limit, etc.)
- TxEnv: Transaction environment (caller, gas limit, value, etc.)
- CfgEnv: Configuration environment (hardfork, chain ID, etc.)
- LocalContext: Local execution context
- Journal: State change tracking and rollback support
- Context: Main EVM context combining all environments
- Interpreter: Core EVM execution engine
- Gas: Gas tracking and metering system
- Stack: EVM stack implementation with overflow protection
- Memory: Dynamic memory management
- InstructionResult: Execution result handling
- InterpreterAction: Call and create action support
- InstructionContext: Context for instruction execution
- ExtBytecode: Extended bytecode with EOF support
- Precompile Framework: Generic precompile implementation framework
- Identity Precompile (0x04): Data copy operation
- SHA256 Precompile (0x02): SHA-256 cryptographic hash function
- RIPEMD160 Precompile (0x03): RIPEMD-160 cryptographic hash function
- ECRECOVER Precompile (0x01): Elliptic curve signature recovery
- ModExp Precompile (0x05): Modular exponentiation (placeholder)
- BN254 Precompiles (0x06-0x08): BN254 curve operations (placeholder)
- Blake2F Precompile (0x09): Blake2 compression function (placeholder)
- KZG Point Evaluation (0x0A): KZG commitment verification (placeholder)
- BLS12-381 Precompiles (0x0B-0x11): BLS12-381 curve operations (placeholder)
- Precompile Collection: Management of multiple precompiles
- Gas Calculation: Linear cost calculation for precompiles
- ExecutionResult: Transaction execution result handling
- Frame Management: Execution frame stack management
- Instructions: EVM instruction set
- Precompiles: Precompile collection management
- Mainnet Builder: Mainnet EVM instance builder
- Execution Orchestration: Transaction execution coordination
- Validation: Transaction and environment validation
- Gas Calculation: Initial gas and refund calculation
- Inspector Framework: Generic inspection and debugging framework
- GasInspector: Real-time gas consumption tracking
- CountInspector: Execution metrics and statistics
- NoOpInspector: Minimal overhead debugging option
- InspectorHandler: Inspector integration with execution flow
- Call/Create Tracking: Function call and contract creation tracking
- Log Tracking: Event log tracking
- Selfdestruct Tracking: Contract destruction tracking
- Comprehensive Test Suite: 100% test coverage across all modules
- Unit Tests: Individual module testing
- Integration Tests: End-to-end EVM execution testing
- Example Verification: All examples tested and working
- Test Framework: Structured testing with proper assertions
- Simple Contract Example: Basic contract execution demonstration
- Gas Inspector Example: Gas tracking and profiling demonstration
- Precompile Example: Precompiled contract usage demonstration
- Simple EVM Example: Basic EVM setup and execution
- Benchmark Example: Performance testing framework
- Zig Build System: Complete build configuration for Zig 0.15.1+
- Modular Builds: Individual modules can be built separately
- Cross-platform Support: Works on all platforms supported by Zig
- Dependency Management: Proper module dependency handling
- Example Builds: All examples built as separate executables
- Comprehensive README: Complete project documentation
- API Documentation: Inline documentation for all public APIs
- Usage Examples: Detailed usage examples for all modules
- Build Instructions: Clear build and installation instructions
- Architecture Documentation: Detailed architecture overview
- Zero-cost Abstractions: Compile-time optimizations
- Efficient Memory Usage: Minimal runtime allocations
- Fast Execution: Optimized opcode dispatch
- Gas Efficiency: Accurate gas metering with minimal overhead
- Compile-time Guarantees: Leverages Zig's compile-time features
- Memory Safety: No undefined behavior or memory leaks
- Error Handling: Comprehensive error handling with proper propagation
- Type-safe APIs: All public APIs are type-safe
- Memory Safety: No buffer overflows or memory leaks
- Integer Overflow Protection: Proper handling of arithmetic operations
- Stack Overflow Protection: EVM stack bounds checking
- Gas Limit Enforcement: Proper gas limit checking and enforcement
- v0.1.0 (2024-10-27): Initial release with complete EVM implementation
When adding new features or making changes, please update this changelog following the format above. Include:
- Clear description of what was added/changed/fixed
- Reference to relevant issues or pull requests
- Breaking changes should be clearly marked
- Security-related changes should be highlighted
- Use present tense ("Add feature" not "Added feature")
- Use imperative mood ("Move" not "Moves" or "Moved")
- Group changes by type (Added, Changed, Deprecated, Removed, Fixed, Security)
- Use bullet points for multiple changes
- Include version numbers and dates
- Link to relevant issues and pull requests
- Mark breaking changes clearly