Skip to content

chore(l1): bump zkevm fixtures to tests-zkevm@v0.4.1#6715

Open
edg-l wants to merge 2 commits into
mainfrom
chore/bump-zkevm-fixtures-v0.4.1
Open

chore(l1): bump zkevm fixtures to tests-zkevm@v0.4.1#6715
edg-l wants to merge 2 commits into
mainfrom
chore/bump-zkevm-fixtures-v0.4.1

Conversation

@edg-l
Copy link
Copy Markdown
Contributor

@edg-l edg-l commented May 22, 2026

Summary

  • Bump .fixtures_url_zkevm to tests-zkevm@v0.4.1 (based on bal@v7.2.0, matching our current bal pin).
  • Drop ~30 EIP-8025 fixture-mismatch skips that v0.3.3 (bal@v5.6.1) required, and re-enable broad test-stateless coverage in the default make test target.
  • Skip one new test (stateless_input_invalid_public_key_is_rejected) with an inline comment.

The single skip exists because v0.4+ also ships a new schema-id wire format and a filled public_keys field on StatelessInput. Our decode_eip8025 still parses the v0.3 framing, and the ef_test runner consumes JSON executionWitness rather than the canonical statelessInputBytes, so the wrong-pubkey rejection is invisible end-to-end. Wiring this up needs:

  1. Update decode_eip8025 for the v0.4 schema-id prefix + reshaped ChainConfig.
  2. Route the stateless test runner through execution_program(bytes) (or replicate the public_keys check against the canonical input).

Both are out of scope here; the skip comment in tests/all.rs documents the gap.

Result: 2864 stateless tests pass, 1 documented skip (up from a narrow ~50-fixture EIP-8025-only run on v0.3.3).

Test plan

  • make zkevm-vectors downloads the v0.4.1 bundle cleanly.
  • cargo test --profile release-with-debug --features stateless → 2864 passed, 0 failed.
  • cargo check (default features) passes.
  • cargo fmt --check clean.
  • CI green on bal-devnet and stateless jobs.

v0.4.1 is based on bal@v7.2.0, matching our current bal pin. Drops
the ~30 EIP-8025 fixture-mismatch skips that v0.3.3 (bal@v5.6.1)
required and re-enables broad `test-stateless` coverage in the
default `make test` target.

One new test is skipped: `stateless_input_invalid_public_key_is_rejected`.
v0.4+ also introduces a new schema-id wire format and a filled
`public_keys` field; our `decode_eip8025` still expects the v0.3
framing, so the runner can't exercise the canonical SSZ path yet.
Tracked in the test comment.

Result: 2864 stateless tests pass, 1 documented skip.
@edg-l edg-l requested a review from a team as a code owner May 22, 2026 12:32
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 22, 2026

⚠️ Known Issues — intentionally skipped tests

Source: docs/known_issues.md

Known Issues

Tests intentionally excluded from CI. Source of truth for the Known
Issues
section the L1 workflow appends to each ef-tests job summary
and posts as a sticky PR comment.

EF Tests — Stateless stateless_input_invalid_public_key_is_rejected skipped

The single fixture
tests/amsterdam/eip8025_optional_proofs/test_stateless_input_validation.py::test_stateless_input_invalid_public_key_is_rejected
is filtered out of test-stateless. All other ~2864 stateless fixtures
from tests-zkevm@v0.4.1 (bal@v7.2.0 baseline) pass.

Why and resolution path

tests-zkevm@v0.4.x introduces the v0.4 stateless wire format: a new
schema-id prefix and a populated public_keys field on
StatelessInput. Two gaps prevent the wrong-pubkey rejection from
being observable end-to-end in ethrex's harness:

  1. decode_eip8025 still parses the v0.3 framing (no schema-id, old
    ChainConfig shape), so v0.4 canonical bytes don't round-trip.
  2. The blockchain ef_test runner consumes JSON executionWitness
    instead of the canonical statelessInputBytes, bypassing the
    public_keys check entirely.

Resolution: update decode_eip8025 for the v0.4 schema-id + reshaped
ChainConfig, then route the stateless test runner through
execution_program(bytes) (or replicate the public-keys check against
the canonical input). The skip site in
tooling/ef_tests/blockchain/tests/all.rs carries the same note.

@github-actions
Copy link
Copy Markdown

🤖 Kimi Code Review

Review: Update zkEVM test fixtures from v0.3.3 to v0.4.1

The PR updates the test fixture URL and adjusts skip lists to accommodate the new bundle. No critical security issues found. Minor observations below.

Code Correctness & Logic

tooling/ef_tests/blockchain/.fixtures_url_zkevm

  • Line 1: URL change from execution-spec-tests to execution-specs appears correct (consistent with ethereum/execution-specs repo naming). Version bump v0.3.3 → v0.4.1 is the intent of this PR.

tooling/ef_tests/blockchain/tests/all.rs

  • Lines 29-68: Removal of 27 skipped EIP-8025 test cases assumes the v0.4.1 fixtures have been regenerated against the current bal-devnet specification. Verify that the client implementation actually includes the gas accounting fixes (immutable intrinsic_state_gas, reservoir routing from EELS PR chore(l1): fix precompile tests from EIP-7702 #2711) before merging, otherwise these tests will fail in CI.

  • Lines 75-77, 84-86, 93-97: Comment updates removing specific version references (zkevm@v0.3.3) improve maintainability.

  • Lines 99-105: New skip entry stateless_input_invalid_public_key_is_rejected is well-documented. The comment correctly identifies that the runner currently uses JSON executionWitness rather than canonical SSZ statelessInputBytes, so the v0.4.x public_keys field validation is not exercised. This is a known limitation, not a regression.

Build/Test Configuration

tooling/ef_tests/blockchain/Makefile

  • Lines 19-22: Updated comment accurately reflects the release cadence divergence between bal and zkvm bundles.
  • Lines 81-88: Consolidating test-stateless-zkevm into test-stateless is correct given the fixture update removes the gas accounting divergence that necessitated the narrow test subset.

Suggestions

  1. Verify fixture integrity (.fixtures_url_zkevm): Consider adding a SHA256 checksum verification in the Makefile download target to ensure the tarball hasn't been tampered with or corrupted during transfer, though this may be out of scope for this PR.

  2. Comment precision (tests/all.rs:99-105): The comment mentions updating decode_eip8025 for "v0.4 schema-id wire format". If this decoder lives in the main codebase (not just tests), ensure there's a tracking issue or TODO marker in that crate as well.

Summary

The changes are mechanically correct and the comments adequately explain the rationale for remaining skips. The primary risk is assuming the v0.4.1 fixtures align with current implementation gas accounting—confirm this holds in CI before merging.


Automated review by Kimi (Moonshot AI) · kimi-k2.5 · custom prompt

@edg-l edg-l moved this to In Review in ethrex_l1 May 22, 2026
@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented May 22, 2026

Greptile Summary

Bumps the zkevm fixture bundle from v0.3.3 (bal@v5.6.1) to v0.4.1 (bal@v7.2.0), aligning stateless test coverage with the current bal pin. ~30 EIP-8025 gas-accounting skips that were required by the older bundle are removed, and the default make test target is broadened from the narrow eip8025_optional_proofs filter back to the full test-stateless suite (2 864 tests).

  • The URL in .fixtures_url_zkevm moves to github.com/ethereum/execution-specs, consistent with the existing execution-specs-hosted amsterdam fixtures URL.
  • One new skip (stateless_input_invalid_public_key_is_rejected) is added with a clear inline explanation of the v0.4 schema-id/public_keys gap that prevents end-to-end validation today.
  • The now-removed test-stateless-zkevm make target is still referenced in docs/known_issues.md and docs/eip-8025.md, which will mislead readers.

Confidence Score: 4/5

Safe to merge for the test-coverage goal; the removed make target leaves two documentation files with broken instructions

The fixture URL, skip-list cleanup, and Makefile changes all look correct and are backed by a passing local test run. The only gap is that docs/known_issues.md and docs/eip-8025.md still reference make test-stateless-zkevm, which no longer exists — anyone following those docs will get a make error.

docs/known_issues.md and docs/eip-8025.md — both reference the removed test-stateless-zkevm target

Important Files Changed

Filename Overview
tooling/ef_tests/blockchain/.fixtures_url_zkevm Bumps fixture download URL to tests-zkevm@v0.4.1 from execution-specs repo (consistent with the amsterdam fixtures URL pattern)
tooling/ef_tests/blockchain/Makefile Removes narrow test-stateless-zkevm target and re-enables full test-stateless in the default test target; docs/known_issues.md and docs/eip-8025.md still reference the removed target
tooling/ef_tests/blockchain/tests/all.rs Removes ~30 now-passing EIP-8025 skips, adds one documented skip for stateless_input_invalid_public_key_is_rejected, and updates comments; minor typo "zkvm" on line 12

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[make test] --> B[make test-levm]
    A --> C[make test-stateless]
    B --> D[cargo test --profile release-with-debug\nvectors/]
    C --> E[zkevm-vectors\ndownload tests-zkevm@v0.4.1]
    E --> F[cargo test --profile release-with-debug --features stateless\nvectors_zkevm/]
    F --> G{Skip list}
    G --> H[SKIPPED_BASE: 4 entries]
    G --> I[EXTRA_SKIPS stateless: 11 entries\ninc. new stateless_input_invalid_public_key_is_rejected]
    G --> J[2864 tests pass]
Loading
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
tooling/ef_tests/blockchain/tests/all.rs:12
**Typo in comment: "zkvm" should be "zkevm"**

Line 12 reads "stale zkvm bundle" but the consistent name used throughout the codebase (and in the removed make target) is "zkevm".

### Issue 2 of 2
tooling/ef_tests/blockchain/Makefile:81-83
**Stale docs still reference removed `test-stateless-zkevm` target**

`docs/known_issues.md` (lines 9 and 24) and `docs/eip-8025.md` (line 561) still mention the `test-stateless-zkevm` target that this PR removes. Readers following those docs will get a `make` error. The `known_issues.md` entry in particular describes the narrow EIP-8025-only filtering that no longer applies — the context has changed enough that both files likely need a prose update.

Reviews (1): Last reviewed commit: "chore(l1): bump zkevm fixtures to tests-..." | Re-trigger Greptile

// test-levm / test-sp1 read bal-devnet-N + legacy from `vectors/`.
// test-stateless reads the zkevm bundle (the only one that ships
// executionWitness) from a separate `vectors_zkevm/`. The zkevm cadence trails
// the bal cadence, so keeping the trees isolated prevents a stale zkvm bundle
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Typo in comment: "zkvm" should be "zkevm"

Line 12 reads "stale zkvm bundle" but the consistent name used throughout the codebase (and in the removed make target) is "zkevm".

Prompt To Fix With AI
This is a comment left during a code review.
Path: tooling/ef_tests/blockchain/tests/all.rs
Line: 12

Comment:
**Typo in comment: "zkvm" should be "zkevm"**

Line 12 reads "stale zkvm bundle" but the consistent name used throughout the codebase (and in the removed make target) is "zkevm".

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines 81 to +83
test: ## 🧪 Run blockchain tests with LEVM both with state and stateless
$(MAKE) test-levm
# Narrow stateless coverage to the EIP-8025 optional-proofs suite. The
# zkevm@v0.3.3 fixtures are filled against bal@v5.6.1, which is out of
# sync with this branch's bal-devnet-6+ (and bal-devnet-7-prep) gas
# accounting; the broader `test-stateless` invocation introduced by
# #6527 trips ~549 of those fixtures with `GasUsedMismatch` /
# `ReceiptsRootMismatch` / `BlockAccessListHashMismatch`. Re-broaden
# once the zkevm bundle is regenerated against the current bal spec.
$(MAKE) test-stateless-zkevm
$(MAKE) test-stateless
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Stale docs still reference removed test-stateless-zkevm target

docs/known_issues.md (lines 9 and 24) and docs/eip-8025.md (line 561) still mention the test-stateless-zkevm target that this PR removes. Readers following those docs will get a make error. The known_issues.md entry in particular describes the narrow EIP-8025-only filtering that no longer applies — the context has changed enough that both files likely need a prose update.

Prompt To Fix With AI
This is a comment left during a code review.
Path: tooling/ef_tests/blockchain/Makefile
Line: 81-83

Comment:
**Stale docs still reference removed `test-stateless-zkevm` target**

`docs/known_issues.md` (lines 9 and 24) and `docs/eip-8025.md` (line 561) still mention the `test-stateless-zkevm` target that this PR removes. Readers following those docs will get a `make` error. The `known_issues.md` entry in particular describes the narrow EIP-8025-only filtering that no longer applies — the context has changed enough that both files likely need a prose update.

How can I resolve this? If you propose a fix, please make it concise.

@github-actions
Copy link
Copy Markdown

🤖 Codex Code Review

  1. tooling/ef_tests/blockchain/Makefile:81, tooling/ef_tests/blockchain/tests/all.rs:67
    Broadening make test back to full test-stateless coverage on tests-zkevm@v0.4.1 looks premature. The stateless runner still short-circuits to JSON executionWitness whenever a fixture provides it (tooling/ef_tests/blockchain/test_runner.rs:109, tooling/ef_tests/blockchain/test_runner.rs:554) and never exercises statelessInputBytes, while the canonical decoder still expects the older framing (crates/guest-program/src/l1/input.rs:145, crates/guest-program/src/l1/input.rs:209). That means CI can now go green on the v0.4.1 bundle while remaining incompatible with the release’s canonical EIP-8025 wire path (public_keys / schema-id changes). I’d either keep the broader target out of make test for now, or add a direct fixture-based check that decodes and validates statelessInputBytes.

No other correctness or security issues stood out in the diff itself.

I couldn’t run the updated stateless suite locally because the v0.4.1 fixture bundle is not present in the workspace and network access is restricted.


Automated review by OpenAI Codex · gpt-5.4 · custom prompt

@github-actions
Copy link
Copy Markdown

🤖 Claude Code Review

PR #6715 Review — chore(l1): bump zkevm fixtures to tests-zkevm@v0.4.1

Summary

This is a clean maintenance PR that bumps the zkevm test fixtures from v0.3.3 to v0.4.1, removes the temporary workaround target test-stateless-zkevm, restores full test-stateless coverage, and removes 28 skip entries that were only needed due to gas-accounting divergence in the old bundle.


Findings

tooling/ef_tests/blockchain/.fixtures_url_zkevm — URL repository change

The new URL points to a different GitHub organization repo:

  • Old: github.com/ethereum/execution-spec-tests/...
  • New: github.com/ethereum/execution-specs/... (plural, no hyphen between "execution" and "specs")

This is a meaningful change — not just a version bump but a repository migration. It's correct per the PR description, but worth explicitly calling out that the artifact is now hosted in a different upstream repository. No action needed if CI confirms the download succeeds, but it's worth verifying the tarball layout (eest/ subdirectory structure) is identical so ZKEVM_VECTORS_DIR still resolves correctly.


tooling/ef_tests/blockchain/tests/all.rs — Typo in comment (minor)

Line ~16 of the updated comment block:

// so keeping the trees isolated prevents a stale zkvm bundle

Should be zkevm bundle (missing e). Consistently written as zkevm everywhere else.


tooling/ef_tests/blockchain/tests/all.rs — New skip is well-documented

The new skip entry stateless_input_invalid_public_key_is_rejected includes a precise explanation:

  • Why the test fails (runner uses JSON executionWitness, never decodes statelessInputBytes)
  • What's needed to re-enable it (decode_eip8025 update for v0.4 schema-id wire format)

This is the right level of documentation for a known-gap skip. No issues here.


tooling/ef_tests/blockchain/Makefiletest-stateless-zkevm target removal

The test-stateless-zkevm target is removed. Any external scripts, CI workflows, or developer aliases invoking make test-stateless-zkevm directly will now fail with a missing-target error. Worth a quick grep of CI YAML files to confirm nothing calls it directly outside of the test: phony target. The Makefile change itself is correct.


Skip removals — correctness

The 28 removed skips were all tied to a single root cause: v0.3.3 fixtures filled against bal@v5.6.1 disagreeing with the current bal@v7.x gas accounting. Since v0.4.1 is filled against bal@v7.2.0 (aligned with the current implementation), removing all of them in one batch is the right call. The original skip comments were thorough enough to verify this tracing.


EXTRA_SKIPS comment cleanup — de-versioning

Removing the zkevm@v0.3.3 version prefix from the tolerance/rejection/conversion-time skip comments is appropriate — these are implementation gaps that will persist across fixture versions until the underlying issues are fixed, so tying the comments to a specific version was misleading.


Overall

The PR is correct and well-reasoned. The two things worth a quick double-check before merge:

  • Confirm no CI pipeline calls make test-stateless-zkevm directly (the removed target).
  • Fix the minor typo zkvmzkevm in all.rs.

Everything else looks good.


Automated review by Claude (Anthropic) · sonnet · custom prompt

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

Labels

L1 Ethereum client

Projects

Status: In Review

Development

Successfully merging this pull request may close these issues.

1 participant