Skip to content

Conversation

SamWilsn
Copy link
Contributor

@SamWilsn SamWilsn commented Oct 1, 2025

🗒️ Description

If EEST is part of the ethereum-execution package, its commands (like fill) get installed unconditionally, even if they depend on optional dependencies that haven't been installed. This leads to bad UX where the user runs fill and gets an exception right away.

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

LouisTsai-Csie and others added 30 commits September 15, 2025 13:56
* 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.
…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
LouisTsai-Csie and others added 6 commits October 6, 2025 17:37
…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-commenter
Copy link

codecov-commenter commented Oct 7, 2025

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.08%. Comparing base (af5664b) to head (f48ad3d).
⚠️ Report is 1 commits behind head on forks/osaka.
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

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           
Flag Coverage Δ
unittests 86.08% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

spencer-tb and others added 12 commits October 7, 2025 15:26
* 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.
@SamWilsn SamWilsn marked this pull request as ready for review October 8, 2025 14:54
@Carsons-Eels
Copy link
Contributor

Making a note to review if this makes sense with uv

@SamWilsn SamWilsn changed the title Move eest to its own package Move eest to its own package (and update subtrees) Oct 8, 2025
@SamWilsn
Copy link
Contributor Author

SamWilsn commented Oct 8, 2025

Just a heads up to reviewers, this now includes an update to the eest subtrees. The four commits unique to this pull request are:

  • f48ad3d (add packages directory to tox -e static)
  • e902d43 (merge tests subtree)
  • 19057d7 (merge src subtree)
  • 395c88e (move eest to its own package)

@Carsons-Eels
Copy link
Contributor

Need to update the CI to handle the new packages dir

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.