feat: add EIP-8261 GAS_LIMIT_SCHEDULE (GPO) support - #315
Merged
Conversation
Adds an optional GAS_LIMIT_SCHEDULE env var that takes a JSON array of
GPO entries ([{"epoch": N, "gas_limit": N}, ...]) and renders them as
the EIP-8261 GAS_LIMIT_SCHEDULE block in the generated CL config.yaml.
Entries are sorted by epoch; an empty/unset value emits
GAS_LIMIT_SCHEDULE: [] to keep the field present but inert.
Claude-Session: https://claude.ai/code/session_017jVHwwK1C3h1caJFyabeVm
barnabasbusa
enabled auto-merge (squash)
August 11, 2026 12:31
pk910
approved these changes
Aug 11, 2026
barnabasbusa
added a commit
to ethpandaops/ethereum-package
that referenced
this pull request
Aug 11, 2026
## Summary Adds a `gas_limit_schedule` network param — an array of GPO (Gas Parameter Only) entries per [EIP-8261](https://eips.ethereum.org/EIPS/eip-8261) — wired through to the genesis generator, which renders it into the CL `config.yaml` as the optional `GAS_LIMIT_SCHEDULE` field (per-fork default + recommended max gas limit for CL clients). ```yaml network_params: gas_limit_schedule: - epoch: 256 gas_limit: 100000000 - epoch: 512 gas_limit: 150000000 ``` ## Changes - `input_parser.star`: new `gas_limit_schedule` param (default `[]`) with parse-time validation that every entry is an object with exactly integer `epoch` and `gas_limit` keys. - `el_cl_genesis_generator.star` + `values.env.tmpl`: the schedule is JSON-encoded and exported as the `GAS_LIMIT_SCHEDULE` env var for the genesis generator. - `sanity_check.star`: allow the new key. - README: document the param. ## Dependency Rendering the field requires ethpandaops/ethereum-genesis-generator#315. Until the pinned generator image (currently `6.1.6`) includes it, the env var is exported but ignored by the generator, so this change is a no-op — the image pin should be bumped once a release containing #315 is cut. ## Testing `kurtosis lint` passes. Default `[]` keeps behavior identical for all existing test configs. https://claude.ai/code/session_017jVHwwK1C3h1caJFyabeVm
barnabasbusa
added a commit
to ethpandaops/ethereum-package
that referenced
this pull request
Aug 11, 2026
Bumps the pinned genesis generator image from 6.1.6 to [v6.1.7](https://github.com/ethpandaops/ethereum-genesis-generator/releases/tag/v6.1.7), which includes EIP-8261 `GAS_LIMIT_SCHEDULE` support (ethpandaops/ethereum-genesis-generator#315) needed by #1472. https://claude.ai/code/session_017jVHwwK1C3h1caJFyabeVm
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.
Summary
Adds support for an array of GPO (Gas Parameter Only) values per EIP-8261: an optional
GAS_LIMIT_SCHEDULEfield in the generated CLconfig.yamlthat gives CL clients a per-fork default/recommended-max gas limit.Changes
GAS_LIMIT_SCHEDULEenv var taking a JSON array of GPO entries:epoch/gas_limit) and sorted by epoch; invalid input fails genesis generation with a clear error instead of emitting a broken config.GAS_LIMIT_SCHEDULE: [](same convention asBLOB_SCHEDULE), so clients without support simply ignore it.config-example/cl/config.yamlgains the placeholder section; the existing awk substitution inentrypoint.shis generalized to handle both schedule blocks in place.GAS_LIMIT_SCHEDULEis excluded from the consensus-spec value check since it is an optional field not present in the upstream spec config.A single JSON-array env var is used instead of the numbered
BPO_N_*pattern so any number of GPO entries can be passed without reserving slots.Testing
Exercised the schedule builder + in-place substitution locally: unset/empty input, unsorted multi-entry input (sorted correctly), invalid JSON (fails with error), and full substitution into
config-example/cl/config.yamlalongside a BPO blob schedule.https://claude.ai/code/session_017jVHwwK1C3h1caJFyabeVm