Skip to content

Releases: ethereum/execution-spec-tests

v5.4.0

06 Dec 23:55
88e9fb8

Choose a tag to compare

🇯🇵 Summary

EEST v5.4.0 is our final Osaka release following the success of the Fusaka upgrade!

This release adds additional tests for Osaka but predominantly includes tests for pre-Osaka forks, catching critical coverage edge cases (added by @chfast and @pdobacz). These edge cases are within both the develop and stable releases. Benchmark tests are skipped in this release.

🧪 Test Cases

  • ✨ Expand EIP-6110 modified contract tests, where the extra event log has no topics at all (#1693).
  • ✨ Add a CREATE/2 test cases for when it runs OOG on code deposit (#1705).
  • ✨ Expand cases to test *CALL opcodes causing OOG (#1703).
  • ✨ Add a test case for base fee in block check after London (#1702).
  • ✨ Add tests for modexp and ripemd precompiled contracts (#1691, #1781).
  • ✨ Add ecrecover precompile tests originating form evmone unittests (#1685).
  • ✨ Add test to validate withdarawls root (#1746).
  • ✨ Add test for old behavior of zero gasprice txs (#1736).
  • ✨ Add stack overflow tests and expand BLOCKHASH tests (#1728).
  • ✨ Ported tests for ripemd precompile going OOG for all forks (#1732).
  • ✨ Add tests for ecadd/ecmul/ecpairing constant gas repricing (#1738).
  • ✨ Add tests that EIP-1559 and EIP-2930 typed txs are invalid and void before their fork (#1754).
  • ✨ Add tests for an old validation rule for gas limit above 5000 (#1731).
  • ✨ Add tests for OOG in EXP, LOG and others (#1686).

zkEVM@v0.4.0

13 May 18:56
88e9fb8

Choose a tag to compare

zkEVM@v0.4.0 Pre-release
Pre-release

This is a new release of projects/zkevm  which:

  • Based on bal-devnet-7 (bal@v7.1.0)
  • Testing framework:
    • Support a new test marker @pytest.mark.skip_stateless_validation that allows test authors to skip stateless execution & filling. This is currently used only in very limited cases where tests violate the limits of CL-types (e.g., the number of withdrawals). These blocks do not represent a valid payload for CLs, thus indirectly can’t be properly SSZ-encoded following consensus-specs definitions of max sizes. (More info in PR)
    • Automatically skip stateless runs in fixtures that utilise the raw-RLP-modifier. This is done because RLP modifications can’t have a direct semantic mapping to meaningful ones for the guest program, given that we use SSZ. In the near future, more testing focused on raw-bytes guest input modifications (i.e., raw SSZ modifiers/mutations) is planned to ensure this testing angle is covered. (More info in PR — thx @Gabriel-Trintinalia for reporting)
  • Specs:
    • Add a schema-id two-byte prefix to the stateless guest program input to indicate how the following bytes should be interpreted for deserialization. This is required since SSZ is not a self-describing encoding format, so the guest program might not know which fork the provided block corresponds to (e.g. ExecutionPayload is different between forks, thus NewPayloadRequest too). This prefix also allows the use of other encoding formats (this is not planned today), thus should not be strictly understood as fork-related encodings, but more generically. (More info in PR).
    • Change ChainConfig type present in StatelessInput to contain a clearer description of the chain configuration to be used. (More info in the PR. Also, the EthR&D #l1-zkevm-protocol thread.)
    • Fill the current public_keys field in StatelessInput. This is a field we had declared in the specs for a long time, but it wasn’t properly filled in the fixtures. The goal is to provide the guest program with the public keys corresponding to the payload transactions, since verifying signatures against public keys is significantly faster than performing a full ecrecover. Note that, temporarily, guest programs could still do an ecrecover, but it is highly recommended that they leverage this optimisation opportunity, since last year's benchmarks show a ~20% performance improvement in proving times. (More info in PR)

zkevm@v0.3.4

28 Apr 18:46
88e9fb8

Choose a tag to compare

zkevm@v0.3.4 Pre-release
Pre-release

This is a new release of projects/zkevm  which:

  • Based on bal@v5.6.1.
  • Testing framework:
    • Add support for block_tests_engine fixture format (PR).
  • Specs:
    • Fix NewPayloadRequest.execution_requests types to comply to consensus-specs (more info).
    • Fix Withdrawal.amount type to comply with consensus-specs (more info).
    • Fix statelessInputBytes in fixtures to properly include invalid transactions (more info) (thx @Gabriel-Trintinalia for reporting).

Note: fixtures that use RLP-modifiers should not be run. These will properly avoid generating stateless fields in fixtures in the next release!

zkevm@v0.3.3

06 Apr 16:06
88e9fb8

Choose a tag to compare

zkevm@v0.3.3 Pre-release
Pre-release

This is a new release of projects/zkevm  which:

  • Is based on a newly created bal@v5.6.1.
  • Specs:
    • The sparse MPT implementation of the guest program now fails if it walks a HashedNode. The guest program must not conclude anything about the state if not enough MPT nodes were provided in the witness, i.e. this means an invalid execution witness.
    • Added tighter checks (1, 2, 3) and overall simplifications in the guest program code.
  • Execution witness:
    • Correct construction:
      • Add a new test for a reverted SLOAD in an inner reverted call frame asserts witness contains read slot.
      • Add a new test for a failed CALL due to insufficient balance asserts witness contains account data.
    • Invalid execution witness for stateless execution:
      • Nine new tests covering invalid executionWitness.state scenarios. In these cases, the stateless execution must fail because information is missing. The following are examples of these scenarios which were implemented:
        • Missing nodes for the required proof of presence
        • Missing nodes for the required proof of absence
        • Missing sibilings required for post-state root calculation due to branch compressions.

zkevm@v0.3.2

19 Mar 14:14
88e9fb8

Choose a tag to compare

zkevm@v0.3.2 Pre-release
Pre-release

This release contains no changes compared to zkevm@v0.3.2, but a rebase on top of the latest bal-devnet-3 release bal@v5.5.1.

zkevm@v0.3.1

17 Mar 13:14
88e9fb8

Choose a tag to compare

zkevm@v0.3.1 Pre-release
Pre-release

This is a new release of projects/zkevm based on bal@v5.4.0 (i.e. the latest tag of bal-devnet-3).

In this release, the following are the notable changes:

  • Invalid block tests are now supported — they contain all the new fixtures fields for zkEVM testing.
  • A new test for 7702 was added to cover an OOG border case in CALL/CALLCODE containing a balance transfer without enough funds.
  • 15 new tests available to cover executionWitness.state field border cases.
  • The above new executionWitness.state tests uncovered a bug in the guest program specs regarding the correct post-state root calculation ordering to minimise branch compressions. Please see here for more details, since it is a subtle spec detail. The execution witness generation was correct on this front.

zkevm@v0.3.0

12 Mar 23:49
88e9fb8

Choose a tag to compare

zkevm@v0.3.0 Pre-release
Pre-release

This is a new release of projects/zkevm based on bal@v5.4.0 (i.e. the latest tag of bal-devnet-3).

On the specs side, changes:

  • Any bytecode successfully created during block execution is considered available for further transactions requiring the same code_hash. For more details, see the corresponding PR.

On the test front, 117 new tests were created to provide much better coverage for bytecodes and headers fields border cases in the execution witness:

To ease testing for EL clients, future releases will always be based on the latest release of the bal-devnet-x active devnet. Minor versions will be bumped whenever a new devnet is released.

zkevm@v0.2.0

07 Mar 15:04
88e9fb8

Choose a tag to compare

zkevm@v0.2.0 Pre-release
Pre-release

This is the first release of the project/zkevm feature branch. It contains the first version of execution witness specification and all tests filled targeting fork --fork=Amsterdam (~12k fixtures). Additionally, it contains a first draft of the guest program specs -- while this can't be considered fully internally tested, we encourage interested EL clients to take a look since it contains already most of the required logic.

zkEVM Execution witness

Each filled fixture contains, at the block level, a new executionWitness field containing:

  • state: Merkle Patricia Trie (MPT) nodes corresponding to MPT proofs for accessed pre-state during block execution, plus required extra nodes for post-state root calculation. This field is ordered lexicographically.
  • codes: required contract bytecodes accessed during block execution. Empty contracts are not included since they can be identified by the empty code hash. Note that created contracts aren’t included either since their value is calculated at runtime. This field is ordered lexicographically.
  • headers: contains the RLP-encoded block headers of ancestors. This is required to resolve EIP-2935 and executed BLOCKHASH. This field is ordered by block number ascending.

You can find the implementation of the witness generation in the amsterdam fork spec in the projects/zkevm branch in execution-specs . The filled fixtures comply with the latest change in the fixture output directory structure.

This is the first release of the execution witness specs and filled tests, so if you think there is any bug please create an issue in execution-specs or add a message in the created thread in #l1-zkevm-protocol channel in EthR&D discord server.

Guest program

In this release, the forks/amsterdam folder contains an experimental/draft guest program spec. The entry point of the guest program can be found in the run_stateless_guest(...) function in stateless_guest.py file. Over the coming days/weeks, we'll continue iterating and polishing the implementation to target a fully tested version in the next release. We encourage ELs to provide feedback through the same channels as mentioned in the previous section.

static@v0.0.1

25 Mar 17:03
88e9fb8

Choose a tag to compare

static@v0.0.1 Pre-release
Pre-release

Historical Static Tests Fixture Snapshot v0.0.1

This release contains a snapshot of the static tests (ethereum/tests within EELS) filled using the framework --fill-static-tests flag. The --post-verifications flag was added so fixtures contain all the post state verification checks added in: ethereum/execution-specs#2552

These fixtures will be used as a snapshot for comparison as part of the static test port to python via following issue/PRs:

Fast Download

Run the following command to download to your EELS repo:

uv run consume cache --input static@v0.0.1 --extract-to ./fixtures_static

snobal-devnet-6@v1.1.0

30 Apr 19:44
88e9fb8

Choose a tag to compare

Pre-release

This is a patch release that fixes some issues with the fixture generation for some tests relating to triggerable withdrawals.

Fixes

Removed a tx_gas_limit mutation in the EIP-7002 withdrawal-request conftest that persisted across fixture-format runs (blockchain_test, blockchain_test_engine, etc.), causing the same parametrize cell to fill with different block hashes; the per-request state-gas bump now lives only in WithdrawalRequestContract.transactions() and is gated by an explicit fund_state_reservoir flag, opted into only by the one call_depth_high test that pins tx_gas_limit at the EIP-7825 cap.