Skip to content

feat(spec-specs,tooling): run EELS under hive consume engine for all post-merge forks - #3363

Draft
spencer-tb wants to merge 12 commits into
ethereum:forks/amsterdamfrom
spencer-tb:amsterdam-execution-engine
Draft

feat(spec-specs,tooling): run EELS under hive consume engine for all post-merge forks#3363
spencer-tb wants to merge 12 commits into
ethereum:forks/amsterdamfrom
spencer-tb:amsterdam-execution-engine

Conversation

@spencer-tb

@spencer-tb spencer-tb commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Description

EELS side of running the spec as a client under hive's consume engine
and consume enginex, for every post-merge fork (Paris through
Amsterdam, including the BPO forks and fork transitions).

Three layers:

  • src/ethereum/forks/<fork>/execution_engine/ for every post-merge
    fork: the Engine API as readable spec, structured like the
    execution-apis documents and geth's catalyst API. Versioned
    structures (ExecutionPayloadV1V4, PayloadAttributesV1V4,
    BlobsBundleV1/V2, GetPayloadResponseV2V6,
    PayloadStatusV1) are additive from Paris; versioned methods
    (new_payload_v1v5, forkchoice_updated_v1v4,
    get_payload_v1v6) are thin wrappers carrying each version's
    rules — superseded versions answer UnsupportedForkError, the
    requests and block-access-list structural rules raise
    InvalidEngineParamsError — over shared cores that return
    PayloadStatusV1. A new payload validates on the branch of its
    parent without moving the canonical head; only a forkchoice update
    adopts a head, and the engine remembers every validated block with
    the state it produced, so nothing is re-executed. Payload building
    is specified by signature and response type but not implemented.
    Verified directly: 2,883 release fixtures across all forks and
    transitions through the versioned methods, including the expected
    unsupported-fork and invalid-params exceptions.
  • src/ethereum_spec_tools/engine_server/: ethereum-spec-engine, a
    JSON-RPC server wrapping the spec. A ForkSpec registry maps each
    fork to its wire family (engine_newPayloadV1V5,
    forkchoiceUpdatedV1V4, payload field sets); the fork schedule
    comes from the hive HIVE_<FORK>_TIMESTAMP variables and payloads
    resolve their fork by timestamp (-38005 on version mismatch).
    Amsterdam executes via execute_block diffs; earlier forks via
    state_transition with reorg-by-replay from a genesis snapshot
    (state_mpt.copy_state). Structural param violations map to the
    Engine API error codes, including the requests-list rules and the
    empty-blockAccessList leniency the transition fixtures encode.
  • Spec fixes surfaced by running the full fixture matrix:
    • calculate_excess_blob_gas reset blob accounting whenever the
      parent header was the previous fork's type; Prague through
      Amsterdam now accept the previous fork's header (PreviousHeader
      union), carrying excess across fork boundaries as mainnet did at
      Prague and as the fixtures expect. Pre-blob parents still reset.
    • bpo3/bpo4/bpo5 blob schedules were stale BPO2 placeholders,
      disagreeing with the framework schedule in this repo
      (execution_testing.forks); constants aligned (BPO3 21/32,
      update fractions 20609697 / 13739630).

Verified against the glamsterdam-devnet@v8.1.0 release: all 79,564
collectable engine tests and all 79,564 enginex tests — every fork and
all nine transition forks — pass through the exact consume simulator
sequences (real EngineRPC/EthRPC clients, JWT, rewind probe,
per-test reorgs): 159,128 executions, zero failures. In real hive:
consume-engine 136/136, consume-enginex 1030/1030, and a multi-fork
Cancun/Prague/transition smoke (2,462 tests, zero failures), plus ~49k
further clean executions across interrupted full runs.

Follow-up (hive repo): ethereum/hive#1596 adds the clients/eels
definition; ethpandaops/hive-tests#78 wires it into the devnet-8
workflows with the same limits as every other client.

Related Issues or PRs

N/A.

Checklist

  • Ran fast static checks to avoid CI fails, see Code Standards & Verifying Changes: just static
  • PR title has the form <type>(<area>): <title>, where <type> and <area> come from an appropriate C-<type>, respectively A-<area>, label. The title should match the target squash commit message.

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

@codecov

codecov Bot commented Aug 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0.10428% with 958 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.18%. Comparing base (a2936ed) to head (89904ef).

Files with missing lines Patch % Lines
...ereum/forks/amsterdam/execution_engine/requests.py 0.00% 113 Missing ⚠️
...hereum/forks/osaka/execution_engine/new_payload.py 0.00% 46 Missing ⚠️
...ereum/forks/prague/execution_engine/new_payload.py 0.00% 46 Missing ⚠️
...um/forks/amsterdam/execution_engine/new_payload.py 0.00% 44 Missing ⚠️
...ethereum/forks/amsterdam/execution_engine/types.py 0.00% 44 Missing ⚠️
...ereum/forks/cancun/execution_engine/new_payload.py 0.00% 44 Missing ⚠️
...rc/ethereum/forks/cancun/execution_engine/types.py 0.00% 44 Missing ⚠️
src/ethereum/forks/osaka/execution_engine/types.py 0.00% 44 Missing ⚠️
...rc/ethereum/forks/prague/execution_engine/types.py 0.00% 44 Missing ⚠️
src/ethereum/forks/paris/execution_engine/types.py 0.00% 40 Missing ⚠️
... and 28 more
Additional details and impacted files
@@                 Coverage Diff                 @@
##           forks/amsterdam    #3363      +/-   ##
===================================================
- Coverage            93.53%   91.18%   -2.36%     
===================================================
  Files                  624      661      +37     
  Lines                37074    38033     +959     
  Branches              3394     3480      +86     
===================================================
+ Hits                 34679    34680       +1     
- Misses                1645     2603     +958     
  Partials               750      750              
Flag Coverage Δ
unittests 91.18% <0.10%> (-2.36%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@spencer-tb spencer-tb changed the title feat(spec-specs): add consensus-layer execution engine interface to amsterdam feat(spec-specs,tooling): run EELS under hive consume engine (amsterdam) Aug 12, 2026
@spencer-tb spencer-tb changed the title feat(spec-specs,tooling): run EELS under hive consume engine (amsterdam) miniproject - feat(spec-specs,tooling): run EELS under hive consume engine (amsterdam) Aug 12, 2026
@spencer-tb spencer-tb changed the title miniproject - feat(spec-specs,tooling): run EELS under hive consume engine (amsterdam) feat(spec-specs,tooling): run EELS under hive consume engine for all post-merge forks Aug 13, 2026
@spencer-tb
spencer-tb force-pushed the amsterdam-execution-engine branch from 8168f60 to 05afe6d Compare August 13, 2026 08:39
@spencer-tb
spencer-tb force-pushed the amsterdam-execution-engine branch from 3f4705c to 3396335 Compare August 13, 2026 09:41
@danceratopz
danceratopz self-requested a review August 13, 2026 13:12
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