Patch (Z) Osaka/BPO2 mainnet fixture release for tests@v20.0.0 under the tests@vX.Y.Z scheme. There are no consensus-impacting changes, but this release changes the blockchain_tests_engine_x fixture format incompatibly, so it is not a drop-in replacement for v20.0.1, please bump EELS simulator versions to also use this tag.
Breaking EngineX Fixture Format Change
This release changes the blockchain_tests_engine_x fixture format and its pre-allocation groups (#3390). This is a breaking change necessary to restore missing fields to and sharpen field types in the fixture format. Please note: Earlier framework versions cannot load this release's engine x fixtures, and this framework version cannot load the engine x fixtures of earlier releases (v20.0.0, v20.0.1). Anyone consuming engine x fixtures must update the framework and the fixtures together.
- Pre-alloc group files are now written in their final form: they include the
genesisblock header,preAccountCountandtestCount, and no longer contain the internalenvironmentobject. Consumers read the genesis directly from the group file instead of deriving it. The group files inv20.0.0/v20.0.1were unintentionally written in an internal builder form without the genesis header (a bug introduced in #2140) and are rejected by this version. - Group hashes are computed differently (an 8-byte truncated sha256 over an explicit canonical JSON encoding, replacing a process-stable Python hash), so every
preHashand every file name underpre_alloc/changes. Oldpre_allocfolders cannot be mixed with new fixtures and must be regenerated. postStateDiffis now populated and required on every engine x fixture. Earlier releases never wrote it due to a bug.chainIdin pre-alloc group files is now a zero-padded hex string ("0x01") instead of an integer, consistent with other fixture fields.
Other fixture formats (state_tests, blockchain_tests, blockchain_tests_engine) are unaffected, and .meta/index.json files written by earlier versions still load.
Tests
Difference to tests@v20.0.1: 9,844 added, 4,472 removed, 2,760 with changed content outside engine x, 179,175 identical; all 53,432 shared engine x fixtures changed (per the breaking changes explained above).
New Tests
- Create collisions: expanded collision matrix, including balance-only collision cases, ~2,550 fixtures (#3425).
- Opcodes: dynamic-destination JUMP/JUMPI tests with invalid jump targets, ~1,200 fixtures (#3153).
- EIP-2681: transactions from accounts with nonce at or near the 2^64-1 limit, 84 fixtures (#3226).
- EIP-7702: precompile calls from a delegated frame (#3420), and authority storage is kept when a delegation is cleared (#3421), 62 fixtures.
- EIP-6110: noncanonical deposit ABI offsets, 6 fixtures (#3240).
- Ported static tests: three enhancement rounds rework and re-enable tests across many
st*modules, accounting for the remaining ~5,900 added and ~3,000 removed test ids (#3215, #3264, #3320).
Removed Tests
- The EIP-7610 create collision tests: 1,442 fixtures under
tests/paris/eip7610_create_collision/(473 state, 473 blockchain, 248 engine, 248 engine x), plus the two ported static tests that depend on the check, are no longer in the release. EIP-7610 was declined for inclusion in Glamsterdam, no mainnet account has non-empty storage with empty code and nonce, and clients are dropping the storage collision check (#3417).
Changed Tests
2,760 fixtures outside engine x changed content:
- ~2,690 fixtures re-fund test accounts with balances capped below 2^128 wei, changing the funded sender addresses with them: the EIP-4844 blob tests (2,088, blockchain and engine formats at Cancun, Prague and Osaka) and ported static bounds/stress tests (~600) (#3227, #3230).
- 48 fixtures of the modified withdrawal and consolidation contract tests (EIP-7002, EIP-7251) now verify requests via the block header (#3235).
- 18 EIP-7702 many-authorizations gas fixtures carry one fewer authorization (67 to 66): the count is derived from the draft EIP-8037 gas constants, which were revised in this window (#3271, #3293).
- 3 fixtures of one PeerDAS max-blobs-per-tx test broaden the accepted exception to also allow
TYPE_3_TX_BLOB_COUNT_EXCEEDED(#3192).
What's Changed
Full list of changes since v20.0.1, note that this release does not fill tests for Amsterdam:
- chore(tests): fix joblib cache race in eip2537 BLS precompile tests by @danceratopz in #3174
- chore(ci): don't fetch the benchmark assets submodule where unused by @danceratopz in #3175
- chore(ci): only install a native build toolchain for PyPy jobs by @danceratopz in #3171
- feat(test-cli): add
--extract-opcode-countopcode tracing by @skylenet in #3124 - fix(fill-stateful): verify receipt status when filling stateful fixtures by @jochem-brouwer in #3142
- feat(ci): fill mainnet fixtures nightly, draft cached
tests@releases by @spencer-tb in #3100 - refactor(spec-specs): organize gas logic in amsterdam EIP-8037/8038/2780 by @gurukamath in #3159
- refactor(test-benchmark): align test suite with
glam-devnet-7spec by @LouisTsai-Csie in #3187 - refactor(test-benchmark): organize stateful folder, add post-state validation, opcode count record by @LouisTsai-Csie in #3201
- fix(ci): skip new-commit check on manual fixture release dispatches by @spencer-tb in #3202
- feat(tests): add more EIP-2780 tests by @gurukamath in #3195
- refactor(spec-tools): use testing pydantic models in t8n by @gurukamath in #2924
- feat(tests): add EIP-2681 nonce-reaching-max tests by @chfast in #3226
- refactor(test): Make max balance < 2^128 wei by @kevaundray in #3227
- chore(tests): improve EIP-7708 coverage, checklist, and ref-spec pin by @spencer-tb in #3220
- chore(tests): improve EIP-7843 coverage, checklist, and ref-spec pin by @spencer-tb in #3221
- fix(tests): search for parent fork that differs in gas costs from current fork by @kevaundray in #3228
- fix: skip ported static tests for amsterdam and later by @kevaundray in #3231
- fix(consume): make release resolution robust to GitHub API rate limits by @danceratopz in #3182
- tests(amsterdam): pin receipt status of top-frame OOG txs in multi-tx blocks by @qu0b in #3232
- fix(tests): update withdrawal and consolidation tests to use Header for requests verification by @jsign in #3235
- fix: max balance < 2^128 in ported static tests by @kevaundray in #3230
- feat(tests): add ef_prefix deposit-halt mode to EIP-8037 state-gas test by @chfast in #3233
- refactor(spec): make state interface fully implementation agnostic by @kevaundray in #3218
- bug(spec-tools): make t8n daemon module importable on Windows by @Kumarutkarsh9470 in #3212
- bug(test-eest): reconfigure output streams to UTF-8 on Windows consoles by @Kumarutkarsh9470 in #3209
- fix(test-specs): parenthesize walrus when counting failing txs by @cuiweixie in #3190
- fix(test-specs): use integer division for genesis base fee by @cuiweixie in #3189
- fix(test-ci): Skip
test_cli.pyuntil #3241 is resolved by @marioevz in #3242 - feat(tests): add EIP-7997 case where factory is not present at fork block by @jochem-brouwer in #3243
- refactor(tests): Remove
fork.gas_costs()reconstruction from Amsterdam EIP-8037/8038 tests by @marioevz in #3169 - chore(tests): improve EIP-7981 coverage, checklist, and ref-spec pin by @spencer-tb in #3223
- feat(test-types): Introduce SSZ model into base types by @RazorClient in #3196
- refactor(ci): run geth benchmark CI only on
benchmarks/**branches by @marioevz in #3249 - chore(tests): improve EIP-7976 coverage, checklist, and ref-spec pin by @spencer-tb in #3222
- feat(tests): EIP-7928 - cover system-address zero-tip coinbase BAL by @flcl42 in #3239
- feat(specs,amsterdam): EIP-2780 - fold transfer log cost into value transfer cost by @gurukamath in #3214
- fix(tests): enhance & un-skip Amsterdam ported static tests (Pt. 1) by @marioevz in #3215
- fix(test-execute): prune fork-less items before evaluating filter_combinations by @spencer-tb in #3259
- refactor(spec-specs,tests): rename EIP-8037 regular gas to execution gas by @spencer-tb in #3238
- feat(tests): implement eip-8070 sparse blob pool tests by @LouisTsai-Csie in #2948
- feat(test-benchmark): on-chain account verification by @LouisTsai-Csie in #3197
- refactor(spec-specs,tests): rename REGULAR_PER_AUTH_BASE_COST to EXECUTION_PER_AUTH_BASE_COST by @spencer-tb in #3263
- feat(tests): cover noncanonical deposit ABI offsets in eip6110 by @flcl42 in #3240
- feat(tests): pin flat 2D inclusion gate semantics (no intrinsic subtraction) by @flcl42 in #3245
- feat(tests): EIP-7778 admission gate uses pre-refund gas by @danceratopz in #2932
- chore(ci): deduplicate temp-dir creation across Justfile recipes by @knQzx in #3191
- test(spec-tests): add RLP canonical
Uintdecoding test by @Kumarutkarsh9470 in #3210 - feat(tests): add dynamic-destination JUMP/JUMPI invalid-target tests by @chfast in #3153
- feat(tests): add EIP-8037 spill-refund accounting coverage by @Marchhill in #3158
- feat(tests): cover invalid-BAL content canonicality (no-op / missing / phantom-read entries) by @edg-l in #3170
- chore(tests): improve EIP-8024 coverage, checklist, and ref-spec pin by @spencer-tb in #3224
- feat(ci): Backport CI Workflow by @marioevz in #3262
- feat(test-benchmark): add missing glam eip to benchmark by @LouisTsai-Csie in #3267
- fix(ci): Rename backports branches by @marioevz in #3268
- feat(spec-specs,tests): reprice EIP-8038 access-list costs to cold minus warm by @spencer-tb in #3271
- feat(test-benchmark): enhance worst case coverage [backport forks/amsterdam] by @github-actions[bot] in #3277
- feat(ci): fill benchmark tests at 1M gas on every PR by @spencer-tb in #3273
- feat(tests): cover EIP-8282 builder request dequeues in block access lists by @spencer-tb in #3270
- refactor(spec-specs): move priority-fee check to validate_transaction by @jevinjojo in #3056
- feat(test-types): Fork-based State Commitment Property in Alloc by @marioevz in #3279
- refactor(amsterdam): Re-factor Amsterdam + Preparation for EIP-8141 by @gurukamath in #3192
- fix(test-execute): report each test as an individual hive test case by @spencer-tb in #3287
- refactor(tests): remove dead static-filler infrastructure by @spencer-tb in #3283
- feat(spec-specs,tests): apply revised EIP-8038 gas values by @spencer-tb in #3293
- refactor(spec-specs): decode withdrawal amount as uint64 per EIP-4895 by @skbaek in #3186
- fix(test-execute): fix execute for Amsterdam by @marioevz in #3300
- perf(ci): run the PR docker-image cache gate on a GitHub-hosted runner by @danceratopz in #3185
- feat(tests): enhance test coverage, add mainnet test for eip-2780 by @LouisTsai-Csie in #3266
- feat(fork-types): add ExecutionGas and StateGas NewType wrappers to amsterdam EVM by @mandeepmourya007 in #3121
- chore(tooling): add runner-selection guidance to the edit-workflow skill by @danceratopz in #3313
- feat(test-rpc): add eth_getTransactionReceipt batching by @jochem-brouwer in #3298
- feat(tests): add EIP-2780 coverage gap tests by @spencer-tb in #3318
- feat(test-tests): add engine payload attribute and genesis parity tests by @spencer-tb in #3309
- fix(test-execute): register per-test hive test cases with the shared client by @danceratopz in #3317
- fix(tests): accept gas allowance error at EIP-7778 admission gate by @taratorio in #3330
- chore(tooling): add test-docstring guidance to the write-test skill by @spencer-tb in #3328
- refactor(test-rpc): unify batch request chunking by @LouisTsai-Csie in #3327
- fix(tests): enhance & un-skip Amsterdam ported static depth-recursion tests (Pt. 2a) by @spencer-tb in #3264
- fix(tests): account for value in EIP-8070 transaction gas by @flcl42 in #3344
- chore(test-client-clis): update geth BAL exception mappings by @spencer-tb in #3347
- chore(tests): derive blob tx gas from fork intrinsic cost by @spencer-tb in #3346
- feat(test-logging,test-consume): add ms-precision lifecycle logging to consume enginex by @danceratopz in #3306
- fix(tests): enhance & un-skip Amsterdam ported static create-OOG tests (Pt. 2b) by @spencer-tb in #3320
- chore(tests): mark memory heavy tests as bigmem by @spencer-tb in #3360
- refactor(testing): capitalize SSZ in class names by @spencer-tb in #3354
- refactor(spec-specs): split _prepare_data out of _prepare_trie by @spencer-tb in #3353
- fix(spec-specs): carry excess blob gas across fork transitions by @spencer-tb in #3352
- fix(tests): use well-formed versioned hashes in getBlobs negative tests by @spencer-tb in #3359
- fix(tests): accept gas-used divergence in BAL omitted-slot-change test by @spencer-tb in #3357
- fix(consume): emit genesis slotNumber as hex string like all other fields by @spencer-tb in #3369
- feat(test-specs): Allow specs to fill same fixture format more than once, add
inclusion_testmarker by @marioevz in #3337 - fix(spec-tools,testing): move evm_tools into the testing package by @gurukamath in #3307
- fix(consume): map reth BAL account-miss and item-cost rejection messages by @spencer-tb in #3371
- perf(test-rpc, test-fill): fetch a block's receipts with single
eth_getBlockReceiptsby @jochem-brouwer in #3345 - perf(test-forks): memoize per-fork gas costs by @jochem-brouwer in #3303
- refactor(client-clis): bound the opcode-count trace time explicitly by @skylenet in #3367
- refactor(test-benchmark): remove potential duplicated cases by @LouisTsai-Csie in #3374
- bug(test-base-types): Conversion methods use
ValueErrorby @marioevz in #3394 - feat(tests): add BAL storage slot numeric ordering test by @spencer-tb in #3382
- chore(client-clis): map reth BAL slot-miss rejection by @mattsse in #3392
- feat(tests): EIP-7928 - union reverted storage reads across transactions by @chfast in #3399
- fix(test-evm-tools): restore state test compatibility by @danceratopz in #3409
- feat(test-specs):add ssz model into the engine payload class by @RazorClient in #3294
- feat(tests): EIP-7702 - keep authority storage when clearing a delegation by @chfast in #3421
- feat(tests): EIP-7702 - precompile calls from a delegated frame by @chfast in #3420
- test(spec-specs): add unit tests for get_last_256_block_hashes by @shubham5080 in #3397
- perf(test-client-cli): skip redundant BAL hash by @jochem-brouwer in #3430
- perf(test-type): cache ecrecover and optimize function calls to ecrecover by @jochem-brouwer in #3431
- chore(tests): remove EIP-7610 create collision tests by @spencer-tb in #3417
- fix(test-execute): ignore tests/spec_tools during collection by @danceratopz in #3450
- feat(tests): expand create collision matrix and add balance-only cases by @danceratopz in #3425
- feat(tests): EIP-8037 - consume spilled state gas along a halt chain by @chfast in #3423
- feat(tests): EIP-8037 - pin gas on the unasserted child-halt spill tests by @spencer-tb in #3427
- refactor(tests): EIP-8037 test gas calculation logic and post state verification by @LouisTsai-Csie in #3383
- fix(evm-tools): accept empty hex transaction values by @danceratopz in #3424
- chore(tests): add genesis block header field BAL checklist by @shubham5080 in #3416
- refactor(test-benchmark): tidy SSTORE storage benchmark by @chfast in #3442
- feat(test-fill): Optimistic grouping flag by @marioevz in #3390
New Contributors
- @Kumarutkarsh9470 made their first contribution in #3212
- @cuiweixie made their first contribution in #3190
- @RazorClient made their first contribution in #3196
- @jevinjojo made their first contribution in #3056
- @skbaek made their first contribution in #3186
- @mattsse made their first contribution in #3392
- @shubham5080 made their first contribution in #3397
Full Changelog: https://github.com/ethereum/execution-specs/compare/tests@v20.0.1...tests@v20.0.2