Repository navigation
fix(spec-specs): carry excess blob gas across fork transitions - #3352
Merged
spencer-tb merged 1 commit intoAug 12, 2026
Merged
spencer-tb merged 1 commit into
spencer-tb merged 1 commit into
Conversation
spencer-tb
force-pushed
the
fix-excess-blob-gas-transition
branch
from
August 11, 2026 12:15
99ed065 to
f27845d
Compare
spencer-tb
marked this pull request as ready for review
August 11, 2026 12:15
spencer-tb
force-pushed
the
fix-excess-blob-gas-transition
branch
from
August 11, 2026 12:16
f27845d to
feac431
Compare
Co-authored-by: jsign <6136245+jsign@users.noreply.github.com>
spencer-tb
force-pushed
the
fix-excess-blob-gas-transition
branch
from
August 11, 2026 12:17
feac431 to
4d5c575
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## forks/amsterdam #3352 +/- ##
================================================
Coverage 93.53% 93.53%
================================================
Files 624 624
Lines 37070 37072 +2
Branches 3394 3394
================================================
+ Hits 34675 34677 +2
Misses 1645 1645
Partials 750 750
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
gurukamath
approved these changes
Aug 11, 2026
Contributor
Author
|
Don't merge without ack from @jsign please! |
jsign
approved these changes
Aug 11, 2026
ilitteri
pushed a commit
to lambdaclass/execution-specs
that referenced
this pull request
Aug 13, 2026
…eum#3352) Co-authored-by: jsign <6136245+jsign@users.noreply.github.com>
1 task done
MysticRyuujin
pushed a commit
to MysticRyuujin/ethrex
that referenced
this pull request
Aug 24, 2026
…aclass#7159) **Motivation** `tests-glamsterdam-devnet@v8.1.1` is out — a coverage and fixture-exception-mapping follow-up to v8.1.0, [announced with no spec changes](https://github.com/ethereum/execution-specs/releases/tag/tests-glamsterdam-devnet@v8.1.1). **Description** Moves `tooling/ef_tests/.fixtures_url_amsterdam` and `.github/config/hive/amsterdam.yaml` (`fixtures` + `eels_commit`) to v8.1.1. Both, together: grading one release's client against another release's bundle fails every fixture the two disagree on, which is what produced 2168 hive failures when only the ef-test pin moved to v8.1.0. `eels_commit` is `32f597f7`, which is both the v8.1.1 tag and the tip of `devnets/glamsterdam/8`. No client change was needed. **Verified the "no spec changes" claim rather than assuming it.** For the numbers it holds — the `forks/amsterdam` diff is a `Uint` → `ExecutionGas(Uint(..))` type-wrapper refactor with every value identical. One behaviour did change: ```python - if isinstance(parent_header, Header): - # After the fork block, read them from the parent header. + if isinstance(parent_header, (Header, PreviousHeader)): + # Read them from any parent that carries the fields, so + # accumulated excess blob gas survives a fork transition. ``` `calculate_excess_blob_gas` no longer resets excess blob gas to zero at a fork block ([specs#3352](ethereum/execution-specs#3352)). ethrex already behaved that way — `calc_excess_blob_gas` reads the parent's blob fields unconditionally, with no fork-boundary case — so this is the spec catching up to clients, and the `for_bpo2toamsterdamattime15k` transition fixtures pass unchanged. **How to test** ``` make -C tooling/ef_tests/blockchain test-levm make -C tooling/ef_tests/engine test make -C tooling/ef_tests/state run-evm-ef-tests-ci ``` Results on this branch: | suite | result | |---|---| | blockchain | **11752 passed, 0 failed** | | engine | **11020 passed, 0 failed** | | state | **64740 passed, 0 failed** (8983 groups, 201792/201792 vectors, none below 100%) | The coverage this release adds passes as filled, including the new BAL storage-slot numeric-ordering fixture ([specs#3382](ethereum/execution-specs#3382)) and the un-skipped Amsterdam ported-static create-OOG and depth-recursion tests ([specs#3320](ethereum/execution-specs#3320), [specs#3264](ethereum/execution-specs#3264)). Already live on `glamsterdam-devnet-8` (`59befe28d`). **Checklist** - [x] No `Store` schema change, so `STORE_SCHEMA_VERSION` is untouched.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
calculate_excess_blob_gasonly reads the parent's blob gas fields when the parent is the current fork's ownHeader. At a fork boundary the parent is the previous fork's header type, so chain validation zeroes any accumulated excess blob gas at the transition block. Clients carry it across the boundary, so EELS rejects correct chains at every post-Cancun transition. The path is unreachable through t8n, which builds the parent from the env as the current fork's class, so fills and fixtures were always correct.The fix widens the check to also accept the previous fork's header, on every fork whose predecessor carries the fields (prague through amsterdam). Cancun keeps the zeroing, since its shanghai parent has no blob gas fields.
Demonstration at the BPO5 to Amsterdam boundary, with a parent at
excess_blob_gas=10000000andblob_gas_used=786432:calculate_excess_blob_gas(parent)returns08951424Receipts:
test_fork_transition_excess_blob_gas_post_blob_genesisruns at the transition to Prague and every later fork and verifies the fork block header. Those fixtures were always correct. This change fixes the chain validation half so EELS accepts them.ethereum-spec-lint, full mypy andjust staticare clean.Found while reviewing
projects/zkevm, which carries the same fix for amsterdam.Adding @jsign for credit, added as a co-author.
Related Issues or PRs
N/A.
Checklist
just static<type>(<area>): <title>, where<type>and<area>come from an appropriateC-<type>, respectivelyA-<area>, label. The title should match the target squash commit message.Cute Animal Picture