Repository navigation
This is a patch follow-up to tests@v21.0.1 containing no consensus changes for Frontier through Amsterdam.
Key Updates
- Ready-to-run hive simulator images (#3572, #3883, ethereum/hive#1609): releases are now also published as images (from v21.0.1 on), making first-time EELS simulator builds 8x faster. Use
--sim.buildarg tag=v21.0.2, orlatestwith--docker.pull; see the docs. @danceratopz @spencer-tb - Synthetic BPO test forks follow Amsterdam (#3597): renamed to
AmsterdamBPOIncreaseandAmsterdamBPODecrease, and blob gas tests now also run onBPO1andBPO2; see BPO Test Forks. @danceratopz - New Merkle Patricia Trie structure suite (#3600): 116 cases on Osaka and Amsterdam that force specific trie shapes across the storage, account, withdrawals, transactions and receipts tries. @CPerezz
- Amsterdam invalid-transaction blocks carry a complete BAL (#3848): the rejected transaction's addresses are now in the block access list, so clients should report the transaction exception rather than a BAL mismatch. @marioevz @fselmo
- Engine x fixtures carry
syncPayloads(#3364): an extra block above the test chain that lets a consumer run the whole test through devp2p sync. It's additive; older framework versions andconsume enginexignore it. See the format docs. @danceratopz @marioevz - 32% fewer engine x pre-allocation groups (#3758, #3876): 3,337 to 2,255 on the forks both releases fill, from reworking the ported static tests; see Engine X Pre-allocation Groups. @marioevz
Tests
Test cases, compared to the previous release, tests@v21.0.1, change in count as follows:
| Test type | v21.0.1 | v21.0.2 | Added | Removed | Changed | Unchanged |
|---|---|---|---|---|---|---|
| State test | 83,367 | 83,555 | 7,389 | 7,201 | 15,159 | 61,007 |
| Blockchain test | 20,791 | 21,343 | 1,812 | 1,260 | 306 | 19,225 |
| Transaction test | 720 | 750 | 30 | 0 | 0 | 720 |
- The large number of test additions and removals is due to renames and reparametrizations: the intrinsic gas relabel (#3837, 3,780 state tests out and back in under new ids), the dropped blob base fee parametrization (#3794), the call-chain collapse (#3876) and the removed
@bigmemid suffix (#3364). - The new cases are mainly the blob tests on the new BPO forks (#3597, 810 blockchain tests) and the MPT suite (#3600).
Expand to see the changes by fixture format.
State tests are also filled as blockchain fixtures; engine fixtures exist only from Paris on, so pre-merge forks have blockchain_test fixtures without an engine counterpart (21,288 in this release):
| Fixture format | v21.0.1 | v21.0.2 | Added | Removed | Changed | Unchanged |
|---|---|---|---|---|---|---|
state_test |
83,367 | 83,555 | 7,389 | 7,201 | 15,159 | 61,007 |
blockchain_test |
104,063 | 104,803 | 9,201 | 8,461 | 15,955 | 79,647 |
blockchain_test_engine |
83,258 | 83,598 | 8,027 | 7,687 | 15,937 | 59,634 |
blockchain_test_engine_x |
83,258 | 83,598 | 8,027 | 7,687 | 72,258 | 3,313 |
blockchain_test_sync |
18 | 18 | 18 | 18 | 0 | 0 |
transaction_test |
720 | 750 | 30 | 0 | 0 | 720 |
| Total | 354,684 | 356,322 | 32,692 | 31,054 | 119,309 | 204,321 |
New Tests
- Merkle Patricia Trie structure (
tests/mpt/): branch collapses, extension splits, branch arity, leaf inlining at the 32-byte threshold, account trie collapses and the withdrawals, transactions and receipts tries at the entry counts where their shape changes. Every fixture asserts the trie shape it names at fill time. 116 cases on Osaka and Amsterdam, 576 fixtures (#3600) @CPerezz - Blob gas on BPO forks: excess blob gas and blob base fee tests now run on
BPO1,BPO2,AmsterdamBPOIncreaseandAmsterdamBPODecrease, plus a lowered-max rejection test, about 1,600 fixtures (#3597) @danceratopz - Call chains:
test_call_chain.pycovers every chain ofCALL,CALLCODEandDELEGATECALL, including the 6 three-level chains mixing all three opcodes that no ported file covered, 306 cases, 4,644 fixtures (#3876) @marioevz - EIP-2929 / EIP-7702: precompile boundary warmth (
test_call.py) and 7702 authoritySELFDESTRUCT(test_set_code_txs.py), 72 new cases, 660 fixtures (#3676) @jochem-brouwer @fselmo - EIP-7623: transaction gas limit checked against the floor-inclusive block gas used (
test_block_gas_limit.py), 36 cases, 208 fixtures (#3832) @barnabasbusa - EIP-155: legacy transactions with chain ids above 64 bits,
test_legacy_chain_id_over_64_bits, 90 fixtures (#3828) @fselmo - EIP-2718: empty and
0xff-prefixed transaction bytes in a block body (test_transaction_rlp.py), 30 transaction test fixtures (#3861) @EddyW19 - EIP-198: modexp
max-base-length-overflow-out-of-gasandimmunefi-38958-by-omik-overflowbefore Osaka, 56 fixtures (#3806) @spencer-tb - Transaction validation: gas allowance checked in canonical order (
test_transaction.py), 42 fixtures, plus 8 for the EIP-8037 state gas reservoir (#3827) @fselmo - EIP-7685: withdrawals pinned before the request system calls (
test_multi_type_requests.py), 32 fixtures (#3835, #3830) @fselmo @marioevz - EIP-2537: G1/G2 MSM multi-pair and pairing coverage (
test_bls12_g1msm.py,test_bls12_g2msm.py,test_bls12_pairing.py), 54 fixtures (#3641) @rorupuntou - EIP-2780: top frame charge cases, 15 fixtures (#3699) @marioevz @fselmo
Changed Tests
- Engine x: 72,258 of 83,598 fixtures change, from the new
syncPayloadsfield (#3364) and the repacked pre-allocation groups (#3758, #3876, #3752). Oldpre_allocfolders cannot be mixed with this release's engine x fixtures. @danceratopz @marioevz - Ported static: 43,684 fixtures change, from the pre-allocation group reduction (#3758).
test_eoa_empty_parisis rewritten astest_external_account_empty_pariswith explicit account kinds. @marioevz - Amsterdam invalid-transaction blocks: the block access list now includes the rejected transaction's sender, recipient and authorization signers, so the rejected transaction is the only reason the block is invalid. Clients that read state from the BAL before validating the transaction previously rejected these blocks for the BAL instead. 2,334 blockchain and engine fixtures (#3848) @marioevz @fselmo
- Intrinsic gas: from Prague a transaction must cover both the standard intrinsic cost and the calldata floor, and the tests now expect the exception for the threshold the gas limit actually misses, or either exception when it misses both. The EIP-7623 suite also sizes its calldata against the full Amsterdam floor (#3837) @fselmo @LouisTsai-Csie
test_tx_intrinsic_gasnow sends the calldata it names: its data was written asBytes(b"0x00"), which sent the ASCII text0x00instead of the byte. Itsbelow_intrinsic_Truecases are nowbelow_standard_cost,below_calldata_floororbelow_standard_cost_and_calldata_floor(#3837) @fselmo @LouisTsai-Csie- Invalid blocks: the receipts root in the header of a block with a rejected transaction is computed from the accepted transactions only (#3849, #3361) @alok-108 @skbaek @fselmo
- EIP-4844 fork transition (
test_fork_transition_excess_blob_gas_post_blob_genesis): base fees are now derived from each fork's blob parameters so the EIP-7918 reserve price cases keep exercising the reserve branch; parametrized asreserve_inactive/reserve_boundary/reserve_active(#3794, #3721, #3597) @shubham5080 @spencer-tb @danceratopz - Amsterdam and Cancun tests converted to relative balance and nonce post-state expectations, 733 fixtures: the funded sender accounts and gas prices change, the checked behaviour does not (#3699) @marioevz @fselmo
- EIP-2537 pairing: gas values derived from fork parameters, 18 fixtures (#3772, #3641) @LouisTsai-Csie @rorupuntou
- EIP-7002 / EIP-7251 out-of-gas system contract tests no longer hard-code gas limits and are reparametrized: 36 fixtures added, 24 removed (#3457) @zexoverz @fselmo
Removed and Renamed Tests
- The 183 ported call-chain files in
stCallCodes,stCallDelegateCodesHomesteadandstCallDelegateCodesCallCodeHomesteadare removed in favour oftest_call_chain.py(#3876): 2,274 fixtures. Every chain they covered is still tested; duplicate DELEGATECALL-only chains had identical fixtures. @marioevz - The Osaka-line BPO transitions
BPO2ToBPO3AtTime15kandBPO3ToBPO4AtTime15kare removed; their scenarios now follow Amsterdam (#3597, see BPO Test Forks). @danceratopz test_blob_txs.pydrops theblock_base_fee_per_gas[7, 100]parametrization (v21.0.1) fromtest_valid_blob_tx_combinationsandtest_sufficient_balance_blob_tx(#3794):test_reserve_price_various_base_fee_scenariosalready covers the reserve price. This removes 1,046 unique cases and adds 523 under the new ids. @shubham5080test_tx_intrinsic_gasids change frombelow_intrinsic_False/below_intrinsic_Truetoat_intrinsicand the threshold missed (#3837, see Changed Tests). @fselmo @LouisTsai-Csie- 1,772 test ids lose an
@bigmemsuffix that leaked from the xdist group into the id (#3364). The fixtures are identical; only the id changes. @danceratopz
BPO Test Forks
The test-only BPO scenarios moved from Osaka's BPO2 to Amsterdam and were renamed (#3597). Clients now place BPO3 and later after Amsterdam, and these scenarios check that a client handles a BPO fork after a named fork.
| Scenario | Blob target / max / update fraction | Cases |
|---|---|---|
AmsterdamBPOIncrease |
21 / 32 / 17,527,006 | 190 |
AmsterdamBPODecrease |
9 / 14 / 7,511,574 | 190 |
AmsterdamToBPOIncreaseAtTime15k |
Amsterdam to Increase | 26 |
AmsterdamToBPODecreaseAtTime15k |
Amsterdam to Decrease | 24 |
BPO1, BPO2 |
mainnet schedule | 190 each |
- Both scenarios use the next free client BPO slot,
HIVE_BPO3_*, which hive already maps. - Every excess blob gas and blob base fee test that is not marked slow now also runs on BPO1, BPO2 and the two scenarios, with the blob counts at the edges of each fork's schedule. Other forks keep their full ranges.
- New test: a block above a lowered blob max is rejected at the activation block.
- Removed: the old Osaka-line transitions
BPO2ToBPO3AtTime15k(25 cases) andBPO3ToBPO4AtTime15k(23 cases).
Engine X Pre-allocation Groups
On the forks both releases fill, engine x needs 32% fewer pre-allocation groups (3,337 to 2,255), and so 1,082 fewer genesis initializations in consume enginex. Most of the drop is on Cancun to Amsterdam, where the ported static tests live (#3758, #3876). The new BPO forks add 308 groups. Counts come from each release's blockchain_tests_engine_x/pre_alloc/ files.
| Forks | Groups v21.0.1 | Groups v21.0.2 | Change | Pre-alloc v21.0.1 (MB) | Pre-alloc v21.0.2 (MB) |
|---|---|---|---|---|---|
| Paris and Shanghai | 162 | 162 | +0% | 9.6 | 9.7 |
| Cancun | 654 | 357 | -45% | 10.3 | 9.5 |
| Prague | 718 | 427 | -41% | 26.6 | 20.6 |
| Osaka | 765 | 512 | -33% | 26.6 | 21.4 |
| Amsterdam | 997 | 754 | -24% | 42.0 | 36.3 |
| Other transitions | 41 | 43 | +5% | 5.9 | 6.0 |
| Old BPO3/BPO4 transitions | 11 | – | – | 0.2 | – |
| New BPO forks | – | 308 | – | – | 7.0 |
| Total | 3,348 | 2,563 | -23% | 121.3 | 110.3 |
New Contributors
- @alok-108 made their first contribution in #3759
- @Mannan-Goyal made their first contribution in #3795
- @AhmethanKalenderoglu made their first contribution in #3776
- @A5Infinity made their first contribution in #3734
- @rorupuntou made their first contribution in #3641
- @erkancamli made their first contribution in #3760
- @nniiovoo made their first contribution in #3839
Full Changelog: https://github.com/ethereum/execution-specs/compare/tests@v21.0.1...tests@v21.0.2