Skip to content

execution/tests: add zkevm execution-witness suite (zkevm@v0.4.0)#21487

Draft
awskii wants to merge 12 commits into
mainfrom
awskii/eest-zkevm-witness
Draft

execution/tests: add zkevm execution-witness suite (zkevm@v0.4.0)#21487
awskii wants to merge 12 commits into
mainfrom
awskii/eest-zkevm-witness

Conversation

@awskii
Copy link
Copy Markdown
Member

@awskii awskii commented May 28, 2026

DRAFT — CI-gating decision needed before merge.

Adds a strict-gate suite validating debug_executionWitness against execution-spec-tests zkevm@v0.4.0, via the PR #21002 fixture-manifest machinery. No t.Skip / bt.Fails / SkipLoad / build-tags.

Plan: docs/plans/completed/20260527-eest-zkevm-witness.md.

Corpus run

~2,515 / 2,871 fixture files pass (~88%). ~356 fail. Failure breakdown:

direction count
Erigon returns more witness elements than EEST 3,923
Erigon returns fewer 4,128
same count, content differs 0

Failures are bidirectional set-membership mismatches in the collected witness, never wrong bytes at matching count. Points at the witness-builder's node/code collection criteria, not serialization. Plus EIP-7702 stateless re-exec rejecting delegated-EOA senders.

Independent of the Amsterdam EIP work in progress elsewhere — would persist after that lands.

Open blocker

As wired, this fails repo-wide CI:

  1. execution-eest-zkevm is in test-all-erigon-race.yml's auto-matrix (required race-tests gate). Fixtures download → ~7k real failures fail the gate.
  2. test-all-erigon.yml runs go test ./... without fixtures → t.Fatalf → fails the required tests gate and local make test-short.

Resolutions (human decision; agent can't pick without violating the no-mute rule):

  • de-gate: move to a dedicated non-required workflow, drop from auto-matrix, exclude from blanket go test ./..., file a tracking issue for the witness-builder finding;
  • fix the witness builder first, keep gating;
  • file issues + add tracked human-authored skips.

awskii added 12 commits May 27, 2026 16:58
… queries (Task 8)

Full corpus run: 15425 PASS / 7107 FAIL subtests across 356/2871 fixture
files. Suite is red by design; failures recorded for human triage, not muted.

Runner fix found during the run: invalid-block fixtures (expectException)
carry an executionWitness but no canonical blocknumber, so debug_executionWitness
can't be queried for them. Capture expectException per block and skip the
witness query for rejected blocks (RunWithTester already asserts rejection).
This removed 972 false "no parseable block number" failures.

Dominant remaining signal: debug_executionWitness returns a strictly smaller
witness (state/codes/headers) than EEST's canonical stateless witness across
nearly every feature - one-directional shortfall, likely a single root cause
in the witness builder. Plus EIP-7702 stateless re-exec rejecting delegated
EOA senders. Recorded under Task 8 results for triage.
…ing, add witness parser unit test

- tools/test-groups: document the greedy-partition ordering invariant
  (subset groups must precede broader ones or resolve empty)
- execution/tests/testutil: add fixture-independent unit test for the
  WitnessBlockTest parser accessors (NumBlocks, ExpectedWitnessForBlock,
  BlockNumberForBlock, BlockExpectsException), covering them when the
  downloaded corpus is absent
- test-all-erigon-race.yml: trim over-verbose cache comment per comment policy
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.

1 participant