-
Notifications
You must be signed in to change notification settings - Fork 347
Move eest to its own package (and update subtrees) #1449
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: forks/osaka
Are you sure you want to change the base?
Conversation
* feat(tests): enhance eip7823 coverage * feat(tests): add eip7823 checklist items for coverage * refactor(tests): update modexp upper bounds framework * feat(tests): expand checklist item and enhance test coverage
* feat: update checklist item for clz * feat: add new checklist items * refactor: update checklist items for eip7939 * refactor: update checklist not applicable itemss * feat(checklist): Add checklist warnings * feat(checklist): ad coverage and reentry notes to eip7939 checklist * fix linting issue * refactor(checklist): remove duplicate ban check items --------- Co-authored-by: Mario Vega <[email protected]>
* feat: update checklist item for clz * feat: add new checklist items * refactor: update checklist items for eip7939 * refactor: update checklist not applicable itemss * feat(checklist): Add checklist warnings * feat(checklist): ad coverage and reentry notes to eip7939 checklist * fix linting issue * refactor(checklist): remove duplicate ban check items --------- Co-authored-by: Mario Vega <[email protected]>
* chore: add max quotient for gas refund logic * refactor: update the eip checklist items * feat: label eip checklist and add new cases * refactor: update fork transition case * fix typo * refactor: update external coverage * refactor: update ref spec and comment
* chore: add max quotient for gas refund logic * refactor: update the eip checklist items * feat: label eip checklist and add new cases * refactor: update fork transition case * fix typo * refactor: update external coverage * refactor: update ref spec and comment
* refactor: add checklist marker for eip7883 * doc: update eip checklist template * refactor: update modexp test and add checklist marker * chore: update checklist rules * refactor: enhance modexp checklist descriptions for clarity * refactor: update coverage table and check gas usage * fix rebase issue * chore: remove outdated entry from modexp checklist * refactor: expand modexp checklist with external coverage entries * refactor: adjust gas usage assertion for only Osaka fork * refactor: overwrite id and add comment
* fix(tests): Validate order for BAL coming from t8n The specs are currently correctly written, but we were not validating all of the ordering according to EIP-7928: - Addresses: lexicographic (bytewise). - Storage keys: lexicographic within each account. - Block access indices: ascending within each change list. This change validates the order of the BAL before we even begin to compare against our expectation. We also now validate that the expectations we define are subsequences within the BAL (expected order). - refactor: Explicit check for the fields we care about up front for `model_fields_set` - refactor: awkward comparison method should just be a validation method (_validate_change_lists) * chore: Unit test BAL ordering validation checks * chore: Add note to CHANGELOG * fix: ``Number`` -> ``HexNumber`` for BAL types - This becomes an issue when JSON-serializing the BAL object and then re-filling from the fixture. We should use `HexNumber` for any Number fields as this correctly serializes to JSON as hex representation. * chore: move release note up to unreleased * refactor: apply changes from comments on PR #2138
* erigon requested increase of retries * do not wait after failure in last attempt
…2124) * fix(tests): Validate order for BAL coming from t8n The specs are currently correctly written, but we were not validating all of the ordering according to EIP-7928: - Addresses: lexicographic (bytewise). - Storage keys: lexicographic within each account. - Block access indices: ascending within each change list. This change validates the order of the BAL before we even begin to compare against our expectation. We also now validate that the expectations we define are subsequences within the BAL (expected order). - refactor: Explicit check for the fields we care about up front for `model_fields_set` - refactor: awkward comparison method should just be a validation method (_validate_change_lists) * chore: Unit test BAL ordering validation checks * chore: Add note to CHANGELOG * chore: move release note up to unreleased * feat(tests): Add flexibility to expected absent scenarios for BALs - We should have flexibility in defining the absence cases we expect for block-level access lists. This allows us to define absence validators for any case we might want to validate against. I don't expect these to grow very much but this does provide some flexibility. * feat: Validate all validators use @validate_call appropriately * chore: changelog note for #2124 * fix: no need to raise from any parsing errors; raise general case * feat: add sanity checks to modifiers; abstract common logic
* enforce c420 * enforce ruff rule c420 * Update tests/prague/eip7702_set_code_tx/test_gas.py Co-authored-by: danceratopz <[email protected]> * Update tests/cancun/eip1153_tstore/test_tstorage.py Co-authored-by: danceratopz <[email protected]> * Update tests/cancun/eip1153_tstore/test_tstorage.py Co-authored-by: danceratopz <[email protected]> * Update tests/cancun/eip1153_tstore/test_tstorage.py Co-authored-by: danceratopz <[email protected]> --------- Co-authored-by: danceratopz <[email protected]>
…#2155) * refactor: update expected gas usage rule for flexibility * docs(benchmarks): clarify gas usage check flexibility * feat(tests): introduce skip_gas_used_validation flag for flexible gas checks * docs(benchmarks): update gas usage check to use skip_gas_used_validation flag
* fix: use engine_newPayloadV5 for Amsterdam * fix: update exception mapper for geth * fix: We should update BAL hash in fixture for invalid tests * Clean up extraneous BAL exceptions * refactor: use fork check for BAL in engine payload
* fix: use engine_newPayloadV5 for Amsterdam * fix: update exception mapper for geth * fix: We should update BAL hash in fixture for invalid tests * Clean up extraneous BAL exceptions * refactor: use fork check for BAL in engine payload
Add test cases for the `p256_verify` precompile from EIP-7951 where the input point representing the public key is from different curve or simply some random bytes. The other parameters of the input: h, r, s are computed in a way that the signature verification succeeds in case the curve check is missing in the implementation. The previous test cases "invalid_curve_attack" added in #2082 are ineffective: the signature verification fails even without the curve check because the final check `R.x == r` fails.
Co-authored-by: danceratopz <[email protected]>
…2184) * Separate first three secp256r1 vector topic files * Extract another two topic files * Three more topic separations * Generalize infinity point topic, add test cases * Additional grouping * More sorting * Final test cases sorted * Delete original file * Apply suggestions from code review Co-authored-by: spencer <[email protected]> * Small fixes * Linting --------- Co-authored-by: spencer <[email protected]>
* refactor(bal): absence validators -> BalAccountAbsentValues * feat: raise for empty lists on BAL absence checks * refactor: changes from comments on PR #2175
* feat: wrap blockchain test for benchmark * feat: wrap state test for benchmark * feat(benchmark): add code generator to generate transaction * fix: resolve typing issue * refactor: update benchmark code generator and test wrapper * fix: udpate example changes * refactor: resolve typing and update func interface * refactor: remove benchmark state test wrapper * fix: pydantic model validation for benchmark manager * refactor synatx and parameter * refactor: remove benchmark manager feature * refactor: update logic and add benchmark tests * refactor: enforce single property requirement in blockchain test generation * refactor: update Bytecode serialization schema to use format_ser_schema * refactor: update import paths * refactor: update serialization schema * refactor: remove unused parameters * doc: add changelog entry * fix typo
* feat: wrap blockchain test for benchmark * feat: wrap state test for benchmark * feat(benchmark): add code generator to generate transaction * fix: resolve typing issue * refactor: update benchmark code generator and test wrapper * fix: udpate example changes * refactor: resolve typing and update func interface * refactor: remove benchmark state test wrapper * fix: pydantic model validation for benchmark manager * refactor synatx and parameter * refactor: remove benchmark manager feature * refactor: update logic and add benchmark tests * refactor: enforce single property requirement in blockchain test generation * refactor: update Bytecode serialization schema to use format_ser_schema * refactor: update import paths * refactor: update serialization schema * refactor: remove unused parameters * doc: add changelog entry * fix typo
…ent (#2150) * feat(pre_alloc): Add maximum bytecode size limit for contract deployment * refactor(benchmark): resolve contract size limit failing cases * feat(pre_alloc): integrate fork dependency for dynamic bytecode size limit * refactor: remove hardcoded value
…ent (#2150) * feat(pre_alloc): Add maximum bytecode size limit for contract deployment * refactor(benchmark): resolve contract size limit failing cases * feat(pre_alloc): integrate fork dependency for dynamic bytecode size limit * refactor: remove hardcoded value
* ✨ feat(tests): EIP-7928 test_bal_self_transfer * ✨ feat(tests): EIP-7928 test_bal_zero_value_transfer * ✨ feat(tests): EIP-7928 test_bal_self_transfer * 🚧 wip: noop reverts * 🚧 wip: noop reverts * 🚧 wip: aborted account access * 🥢 nit: * ✨ feat(tests): test_bal_fully_unmutated_account * fix: issues after rebase * feat: Use `BalAccountExpectation.empty()` for explicit empty checks * refactor: remove duplicate test for BAL noop * chore: move noop tests into main bal test file * chore: add changelog entry * 🥢 nit: Add call value * feat: add back unmutated test with explicit no balance change check --------- Co-authored-by: raxhvl <[email protected]> Co-authored-by: fselmo <[email protected]>
* ✨ feat(tests): EIP-7928 test_bal_self_transfer * ✨ feat(tests): EIP-7928 test_bal_zero_value_transfer * ✨ feat(tests): EIP-7928 test_bal_self_transfer * 🚧 wip: noop reverts * 🚧 wip: noop reverts * 🚧 wip: aborted account access * 🥢 nit: * ✨ feat(tests): test_bal_fully_unmutated_account * fix: issues after rebase * feat: Use `BalAccountExpectation.empty()` for explicit empty checks * refactor: remove duplicate test for BAL noop * chore: move noop tests into main bal test file * chore: add changelog entry * 🥢 nit: Add call value * feat: add back unmutated test with explicit no balance change check --------- Co-authored-by: raxhvl <[email protected]> Co-authored-by: fselmo <[email protected]>
* feat(benchmark): add eip7702 case * refactor: update nonce management * refactor: consider gas refund logic
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## forks/osaka #1449 +/- ##
============================================
Coverage 86.08% 86.08%
============================================
Files 743 743
Lines 44072 44072
Branches 3891 3891
============================================
Hits 37938 37938
Misses 5656 5656
Partials 478 478
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
* chore(cli): reth 6110 exception mapper. * chore(cli): lint me baby one more time. * chore(cli): bump geth 6110 as well. * Update src/ethereum_clis/clis/reth.py --------- Co-authored-by: Mario Vega <[email protected]>
… tests in `execute remote` (#2266) * Fix storage slot of expected value Signed-off-by: Luis Mastrangelo <[email protected]> * Fix test for `fill` mode Signed-off-by: Luis Mastrangelo <[email protected]> * Apply reviewer's suggestion to rename parameter Signed-off-by: Luis Mastrangelo <[email protected]> * Apply suggestion to use `SELFBALANCE` as result slot Signed-off-by: Luis Mastrangelo <[email protected]> --------- Signed-off-by: Luis Mastrangelo <[email protected]>
… (#2243) * feat(consume): `consume direct` using evmone-statetest * feat(consume): `consume direct` using evmone-blockchaintest
* Port test for swap opcode * Swap-test-update * store_next_update * Storage update * Fix underflow test by reducing unnecessary stack pushes * Update uv.lock * Lint, add ported_from marker * Add more storage slots to improve coverage * Add coverage_missed_reason * Remove static test swapFiller.yml --------- Co-authored-by: kclowes <[email protected]>
* Temp: Gather opcode counts in fixtures * feat(cli): Add diff_opcode_counts command * fix: Tox * fix imports * fix comments
* Initial commit * Some refactoring * Add batch mode * Support blob gas fields in genesis * Don't default to gasPrice=1 to not error on blob tx * Fix setcodetx translation * Parallelize * Per file progress meter * Fix auth translation * refactor(fuzzer-bridge): address PR feedback and improve architecture - Remove incorrect venv activation instructions from CLAUDE.md - Replace ASCII art with Mermaid diagram in README - Add fuzzer_bridge as CLI entry point in pyproject.toml - Create comprehensive documentation in docs/writing_tests/ - Add Pydantic models for type-safe fuzzer output parsing - Add BlockchainTest.from_fuzzer() classmethod for better integration - Simplify BlocktestBuilder to use new architecture - Fix README inconsistencies (punctuation, references, sections) This refactoring aligns the fuzzer bridge with EEST code standards and makes it more maintainable and future-proof. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * fix(fuzzer-bridge): apply linting and formatting fixes - Add ruff noqa comment for mixedCase variables in Pydantic models - Fix line length issues in performance_utils.py - Replace bare except with specific Exception handling - Apply automated formatting from ruff 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * fix: resolve CI errors for linting, formatting, and type checking - Fix markdown linting errors in fuzzer_bridge.md documentation - Apply ruff formatting to blockchain.py - Fix mypy type errors in fuzzer bridge modules: - Make orjson import optional with proper error handling - Fix TransitionTool instantiation to use GethTransitionTool - Correct EOA usage and add missing class attributes - Fix json.dump parameter usage to avoid kwargs issues - Fix docstring line lengths to comply with 79-char limit - Fix line length issues in function signatures All linting (ruff) and type checking (mypy) now pass successfully. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * Fix docs link * feat(fuzzer_bridge): add EIP-7702 and EIP-4788 support Add support for two critical Ethereum features in the fuzzer bridge: 1. EIP-7702 Authorization Lists (Prague+) - Add FuzzerAuthorization model for authorization tuples - Parse authorizationList from transactions - Translate to AuthorizationTuple in from_fuzzer() - Enables testing of SetCode transactions (tx type 0x04) 2. EIP-4788 Parent Beacon Block Root (Cancun+) - Add parentBeaconBlockRoot as top-level field in FuzzerOutput - Pass to Block during creation in from_fuzzer() - Must be 32-byte hash from consensus layer - Enables testing of beacon root contract (EIP-4788) These changes close significant coverage gaps in geth core validation: - tx_setcode.go: Authorization validation paths - block_validator.go: Beacon root handling - state_transition.go: Beacon root system contract calls The implementation follows existing patterns (similar to blob sidecar handling) and maintains backwards compatibility through optional fields. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * feat(fuzzer-bridge): add multi-block blockchain test generation Add support for splitting fuzzer transactions across multiple blocks to enable testing of state transitions and block boundaries. New CLI Options: - --num-blocks: Number of blocks to generate (default: 1) - --block-strategy: Transaction distribution strategy - "distribute": Sequential chunks preserving nonce order - "first-block": All txs in first block, rest empty - --block-time: Seconds between blocks (default: 12) Implementation: - Sequential distribution maintains nonce ordering per account - Timestamps increment by block_time for each block - Only first block receives parent_beacon_block_root - Fully backward compatible (single-block default) Example Usage: fuzzer_bridge --num-blocks 3 --block-strategy distribute \ --fork Osaka input.json output/ This enables testing multi-block scenarios like: - State evolution across blocks - Transaction dependencies spanning blocks - Block time-sensitive operations - Cross-block state transitions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * feat(fuzzer-bridge): add random block count selection Add --random-blocks flag to enable intelligent automatic selection of block counts for comprehensive testing coverage. New Feature: - --random-blocks: Randomly choose number of blocks (1 to min(num_txs, 10)) Implementation: - choose_random_num_blocks() helper with uniform distribution - Each file gets independent random selection in parallel mode - Edge case handling: empty blocks (0 txs → 1 block) - Cap at 10 blocks to prevent fixture bloat with large tx counts Algorithm Rationale: - Uniform distribution provides equal coverage for testing - Max of 10 blocks balances thoroughness with practicality - Independent per-file randomization maximizes corpus diversity Example Usage: # Random mode - each file gets random block count fuzzer_bridge --random-blocks --fork Osaka input/ output/ # Still works with fixed mode fuzzer_bridge --num-blocks 3 --fork Osaka input/ output/ Benefits: - Automated testing of various block configurations - Discovers edge cases in block boundary handling - Comprehensive multi-block scenario coverage - Zero configuration needed for random testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Add batch mode for improved perf * test(fuzzer-bridge): add comprehensive test suite with DTO pattern Implements complete testing infrastructure for fuzzer bridge with 25 comprehensive tests achieving 98% code coverage on core modules. Changes: - Add test_fuzzer_bridge.py with 25 tests covering DTO parsing, conversion, BlockchainTest generation, EIP features, and error handling - Refactor models.py to use DTO pattern with clean separation between external JSON-RPC format and internal EEST domain models - Create converter.py module with pure transformation functions (eliminates circular dependencies from blockchain.py) - Add 5 test vectors from real fuzzer outputs (Osaka fork, EIP-7702, EIP-4788) - Update README with comprehensive DTO architecture documentation including Mermaid diagram, field mappings, and design rationale - Simplify blocktest_builder.py by delegating conversion to converter module - Update examples with current fuzzer outputs and detailed README Architecture: - DTOs (models.py): Parse external format without side effects - Converters (converter.py): Explicit field transformations - Domain Models (EEST): Internal business logic with validation - Benefits: 98% test coverage, no circular dependencies, explicit mappings, prevents TestAddress pollution Test Coverage: - 25 tests pass in 0.46s - models.py: 100% coverage - converter.py: 97% coverage - Core modules combined: 98% coverage Key Features Tested: - EIP-7702 authorization lists - EIP-4788 parent beacon block root - Multi-block generation strategies - EOA creation from private keys - Field mapping (gas → gas_limit, from → sender) - Error handling and validation All quality checks pass: - Linting: ✓ (ruff check, format, W505) - Type checking: ✓ (mypy) - All CLI tests: ✓ (256/256 pass, no regressions) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
* new(tests): EIP-7610: init-collision tests * fixup * fix(tests): Remove static variants * Review suggestions Co-authored-by: 蔡佳誠 Louis Tsai <[email protected]> --------- Co-authored-by: 蔡佳誠 Louis Tsai <[email protected]>
…ate-all-formats` (#2275) * chore(ci|tests|fill): fixes for releases. * chore: lint 79 line lenght. * chore(execute): when fork is none check.
…ate-all-formats` (#2275) * chore(ci|tests|fill): fixes for releases. * chore: lint 79 line lenght. * chore(execute): when fork is none check.
* Test EIP-2929 * feat(eip2929): add aborted call scenario * Update tests/berlin/eip2929_gas_cost_increases/test_call.py --------- Co-authored-by: LouisTsai <[email protected]> Co-authored-by: spencer <[email protected]>
* chore(ci): bump eels for bpo1/2 param changes. * chore: use eels upstream.
Making a note to review if this makes sense with |
Need to update the CI to handle the new packages dir |
🗒️ Description
If EEST is part of the
ethereum-execution
package, its commands (likefill
) get installed unconditionally, even if they depend on optional dependencies that haven't been installed. This leads to bad UX where the user runsfill
and gets an exception right away.Cute Animal Picture