🔧 Major EVM hardfork fixes and comprehensive test analysis#20
Open
roninjin10 wants to merge 159 commits intomainfrom
Open
🔧 Major EVM hardfork fixes and comprehensive test analysis#20roninjin10 wants to merge 159 commits intomainfrom
roninjin10 wants to merge 159 commits intomainfrom
Conversation
feat: Improve CREATE/CREATE2 with collision detection and logging system
chore: fix typo in build comment
Add complete MODEXP (modular exponentiation) precompile implementation: - Parse base_length, exp_length, mod_length from input - Calculate gas cost using complexity and iteration formulas - Implement modular exponentiation with u256 support - Handle edge cases (modulus=0, empty inputs) - Support for values up to 32 bytes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Copy entire crypto/ directory with modexp, blake2, bn254, secp256k1, etc. - Copy precompiles/ directory with all EVM precompile implementations - Copy lib/ directory with Rust FFI bindings (ark, c-kzg-4844, etc.) - Add build_options module for vector_length configuration - Wire crypto and precompiles modules into build system This brings full precompile support from the main guillotine implementation including MODEXP, BLAKE2F, BN254 curves, and KZG point evaluation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…es module - Remove ~250 lines of inline precompile code from evm.zig - Use precompiles.execute_precompile() for all precompile calls - Add precompiles module import to evm.zig - Add build_options module to build.zig for vector_length config - Wire precompiles module into main guillotine_mini module This brings full precompile support including MODEXP, BLAKE2F, BN254, ECRECOVER, SHA256, RIPEMD160, Identity, and all other EVM precompiles. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Change precompiles import to use relative path in evm.zig - Update precompiles.zig and kzg_setup.zig to use relative crypto imports - Add trusted_setup.txt file for KZG support - Add inline build_options struct in precompiles.zig Still need to resolve c_kzg module dependencies in crypto/root.zig. The crypto module has many external dependencies that need to be properly configured in the build system. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Add Rust workspace configuration and integrate BLST, C-KZG, and BN254 library support into the Zig build system. Enables cryptographic precompiles for EIP-196/197 (BN254) and EIP-4844 (KZG) support. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Provide fallback stub implementations for BLS12-381 and KZG operations when native crypto libraries are not available. Enables compilation and testing of non-cryptographic hardforks without full dependencies. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Replace relative imports with module imports to support the new build system configuration. Enables proper module resolution for crypto and build_options dependencies in precompiles. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Update Berlin attempt report with build configuration challenges and current blockers. Clarifies that Berlin tests don't require BLS12-381 or BN254 precompiles and recommends focusing on EIP-2929/2930 implementation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Lock Rust dependency versions to ensure consistent builds across different environments and prevent unexpected dependency updates. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive documentation of the Berlin test suite fixes, including root cause analysis and solution details for the 28 failing intrinsic gas validation tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add CREATE/CREATE2 collision detection per EIP-684 - Implement proper EIP-6780 SELFDESTRUCT behavior - Fix Berlin hardfork gas calculations for SELFDESTRUCT - Add setCode method to host interface - Remove debug prints from CREATE2 implementation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Fix Cancun hardfork EIP-6780 SELFDESTRUCT and CREATE collision handling
…ation - Fix return_data semantics: empty on success, output on failure - Add precompile pre-warming for Berlin+ forks - Improve CREATE collision detection and nonce handling - Add output capture for failed contract creation - Fix gas refund calculations in inner_create 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add OSAKA hardfork enum variant - Implement EIP-7883 ModExp gas calculation changes - Update complexity formula for inputs <= 32 bytes - Adjust minimum gas to 500 and divisor to 1 - Add hardfork string parsing for Osaka 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed analysis of CREATE2 test failures - Document gas discrepancy investigation (~147k-516k gas) - Explain blockchain_tests vs state_tests differences - Summarize fixes: collision detection, nonce handling, return_data - Note remaining issues with Berlin+ fork state tests 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
🐛 fix: Improve CREATE/CREATE2 handling and add Osaka hardfork support
Switch blst library to portable C implementation to fix point_evaluation precompile failures. The assembly build was causing issues with the KZG cryptographic operations required for EIP-4788. Key changes: - Remove assembly build dependency from blst - Use __BLST_NO_ASM__ flag to force C implementation - Define llimb_t=__uint128_t to work around blst 64-bit platform bug - Add vect.c to c-kzg-4844 build for completeness This resolves test failures in the Cancun hardfork beacon block root validation tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Documents successful resolution of blst compilation issues on ARM64 platforms enabling all 260 Cancun EIP-4788 beacon root tests to pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
fix: Pass Cancun EIP-4788 beacon root tests
Fixed two critical issues preventing Homestead tests from passing: 1. DELEGATECALL hardfork guard - Added check to prevent DELEGATECALL (0xf4) execution before Homestead, as it was introduced by EIP-7 2. Gas forwarding rules - Implemented correct gas forwarding behavior: - Before EIP-150 (Frontier, Homestead): Forward 100% of remaining gas - After EIP-150 (Tangerine Whistle+): Forward 63/64 of remaining gas Applied to CREATE, CALL, CALLCODE, DELEGATECALL, CREATE2, STATICCALL 3. Build configuration - Fixed blst library build to use portable mode without assembly, resolving architecture-specific compilation issues All 24 Homestead tests now pass (10 blockchain, 4 engine, 10 state). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
feat: Homestead hardfork implementation and EVM fixes
Reordered test suite execution to prioritize Paris/Merge hardfork tests, which are now passing. This ensures the test runner executes test suites in a more logical order with recently fixed tests appearing first. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix stack pop order: dest, src, len (was incorrectly src, dest, len) - Improve memory expansion to cover both source and destination ranges - Add missing GasFastestStep base gas cost per EIP-5656 - Optimize zero-length copy gas calculation to skip memory expansion 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…tation Fix EIP-152 BLAKE2F precompile by reducing sigma permutation table from 12 to 10 rounds to match execution-specs Python implementation. This resolves all 246+ BLAKE2 test failures in Istanbul hardfork tests. Changes: - Reduce BLAKE2B_SIGMA from [12][16]u8 to [10][16]u8 - Update modulo operation from % 12 to % 10 - Remove duplicate sigma rows that were causing incorrect permutations 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix precompile count calculation for different hardforks: * Berlin-Istanbul: 9 precompiles (0x01-0x09) * Cancun: 10 precompiles (adds KZG point evaluation at 0x0A) * Prague: 18 precompiles (adds BLS12-381 operations at 0x0B-0x12) - Fix KZG point evaluation to return proper 64-byte output containing FIELD_ELEMENTS_PER_BLOB (4096) and BLS_MODULUS as per EIP-4844 spec - Add missing allocator parameter usage in point evaluation function 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed test status table showing pass/fail rates for each hardfork - Document recent BLAKE2F precompile fix that resolved 246 test failures - Update EIP compliance list to include EIP-152 (BLAKE2F) - Highlight Cancun timeout issue and successful Prague/Osaka implementations 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Mark accounts as created BEFORE execution (not after success) - Per Python reference: mark_account_created happens before process_message - "The marker is not removed even if the account creation reverts" - Required for SELFDESTRUCT to identify same-tx creations correctly Note: 354 dynamic_create2_selfdestruct_collision tests still failing (separate issue to investigate) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add test target definitions matching build.zig structure - Organize tests by hardfork (Berlin, Frontier, Shanghai, Cancun, Prague, Osaka) - Add 't' command to run tests by organized targets - Improves test navigation and EIP-specific test isolation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Modified generate_spec_tests.py to call runJsonTestWithPath() - Modified generate_tests.py to call runJsonTestWithPath() - Pass json_path parameter to enable trace generation for execution-spec-tests - Fixes trace generation which was failing due to missing _info.source field 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…ation strategy - Reduce max attempts per suite to 1 (focus on quality over quantity) - Increase max turns to 2000 for deeper analysis iterations - Add extended thinking (16K tokens) for complex debugging tasks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add runJsonTestWithPath() function to accept test file path - Fix trace generation for execution-spec-tests format - Add EIP-3860 init code cost calculation for contract creation transactions - Pass test file path to generateTraceDiffOnFailure() for better debugging - Remove deleted trace_ref.jsonl file 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Remove duplicate EIP-3860 init code cost charging in inner_create() - Init code cost now charged only in transaction intrinsic gas calculation - Prevents 42 gas over-charging for contract creation transactions - Fixes balance mismatches in self-destruct tests 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update ethereum-tests to c67e485ff8b5be9abc8ad15345ec21aa22e290d9 - Update execution-specs to 73155235c946bea54cb9d3f876aeac260d890786 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Fix trace generation and EIP-3860 gas calculation
Implements EIP-6780 SELFDESTRUCT behavior and fixes gas calculation issues in call opcodes: - Add transaction finalization logic for selfdestructed accounts cleanup - Fix SELFDESTRUCT balance transfer semantics for Cancun hardfork - Improve memory expansion cost calculation in CALL variants - Add proper snapshot/restore for selfdestructed accounts on revert 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Updates execution-specs reference implementation and test result logs: - Sync execution-specs to latest commit with Cancun test fixtures - Update test output with current EVM test results 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…precompile Per EIP-4844 specification and Python reference implementation, when the point evaluation precompile receives invalid input (length != 192 bytes), it should raise KZGProofError BEFORE charging gas, resulting in 0 gas consumption rather than the full 50000 gas cost. This fix ensures spec compliance with the Python execution-specs reference: - Invalid input length now returns gas_used = 0 - Removed redundant version byte check not present in Python spec - Maintains full 50000 gas charge for other validation failures 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…lysis Complete the debugging report with final summary of EIP-4844 point evaluation precompile fixes. Documents the root cause analysis that identified gas accounting bugs and spec compliance issues. Key findings: - Gas charging occurred before input validation in our implementation - Python spec charges 0 gas for invalid input length, not 50000 gas - Redundant version byte check removed for exact spec compliance 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Fix EVM gas handling and EIP-4844 precompile bugs
Updated TEST_STATUS_REPORT.md with latest hardfork test results: - Frontier, Homestead, Berlin, Paris: ✅ All passing - Byzantium: 88% pass rate (43 MODEXP failures) - Constantinople: 78% pass rate (112 CREATE2 failures) - Shanghai: Mixed (PUSH0/withdrawals pass, initcode 83%) - Cancun: TSTORE/MCOPY/BLOBBASEFEE pass, selfdestruct timeout - Istanbul: Test suite times out, needs sub-targets - Blob precompile performance issue resolved 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive debugging reports for failing hardfork tests: - Byzantium: Fixed MODEXP exponent head alignment (11 tests improved) - Constantinople: Added refund propagation fix for CREATE operations - Istanbul: Identified BLAKE2F systematic failure pattern - Shanghai: Root cause analysis for initcode gas calculation issues - Cancun: Major SELFDESTRUCT progress with balance transfer fixes Each report includes 7-checkpoint methodology with trace analysis, Python reference comparisons, and technical implementation details. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Core EVM fixes addressing multiple hardfork test failures: - SELFDESTRUCT: Unconditional balance transfer and storage cleanup (Cancun) - CREATE operations: Added proper gas refund snapshot/restore logic - Gas handling: Improved safety with checked integer casting - Account deletion: Comprehensive storage clearing for selfdestructed accounts These changes improve Constantinople CREATE2 and Cancun SELFDESTRUCT test results by implementing proper EIP-6780 semantics and fixing gas accounting edge cases. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Fixed critical bug in MODEXP precompile where exponent bytes were left-aligned instead of right-aligned in the exp_head buffer, causing massive gas calculation errors for short exponents. Changes: - Right-align exponent bytes for correct big-endian interpretation - Fixed iteration count calculation for exp_len < 32 cases - Improved 11 Byzantium test results (309/352 now passing) This resolves cases where short exponents like [0x02] were interpreted as 2^248 instead of 2, leading to astronomical gas costs. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Updated core primitive types to support recent fixes: - Blob transaction validation improvements - Gas constant refinements for accurate cost calculations - Enhanced type safety for EIP-4844 blob handling These changes support the blob precompile performance fixes and ensure accurate gas metering across hardforks. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Enhanced spec test runner to properly handle EIP-2930 access lists: - Added intrinsic gas calculation for access list entries - Improved JSON parsing for transaction access lists - Better handling of Shanghai EIP-3860 initcode test scenarios This addresses Shanghai initcode test failures where access list gas (477 entries × 2400 gas = 1.14M gas) was not being charged in intrinsic gas calculations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Refined the automated spec fixing script for better hardfork debugging: - Improved test suite organization and prioritization - Enhanced known-issues database integration - Better error reporting and checkpoint validation This supports the systematic debugging approach used for Byzantium, Constantinople, Istanbul, Shanghai, and Cancun fixes. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Cleaned up temporary debugging trace file left from test development. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR contains comprehensive fixes and improvements for Ethereum hardfork compatibility, with detailed analysis of test failures across all supported hardforks from Frontier through Cancun.
Major Improvements
✅ Fixed Issues
📊 Current Test Status
🔍 Systematic Analysis
Added comprehensive debugging reports with:
Files Changed
src/evm.zig,src/frame.zig- Account deletion, gas handling, CREATE fixessrc/precompiles/precompiles.zig- MODEXP exponent alignment fixsrc/primitives/- Blob transaction and gas constant updatestest/specs/runner.zig- Access list gas calculation improvementsTEST_STATUS_REPORT.md- Comprehensive status updatereports/spec-fixes/- Detailed debugging reports for each hardforkscripts/fix-specs.ts- Automated testing pipeline improvementsTest Plan
All changes have been validated through the comprehensive spec test suite:
🤖 Generated with Claude Code