Skip to content

feat: add EIP-8198 quick slots params - #1491

Merged
barnabasbusa merged 6 commits into
mainfrom
feat/eip8198-shorter-slots
Oct 5, 2026
Merged

barnabasbusa merged 6 commits into
mainfrom
feat/eip8198-shorter-slots

Conversation

@barnabasbusa

@barnabasbusa barnabasbusa commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adds support for EIP-8198 (quick slots, ethereum/consensus-specs#5592) as a standalone feature fork on top of Heze.

The default ethereum-genesis-generator image is bumped to 6.2.3, which includes ethpandaops/ethereum-genesis-generator#321 and #322. Egg renders SLOT_DURATION_SCHEDULE exactly as given, starting at genesis, and computes the EL fork times from it.

New network_params

Param Default Written as
eip8198_fork_epoch 18446744073709551615 EIP8198_FORK_EPOCH. The fork version is EIP8198_FORK_VERSION: 0xa3000038, following the package's 0x?0000038 pattern.
slot_duration_schedule [] SLOT_DURATION_SCHEDULE. List only the changes after genesis; the package prepends the genesis entry {epoch: 0, slot_duration_ms: <slot_duration_ms>}.
network_params:
  slot_duration_ms: 12000
  heze_fork_epoch: 2
  eip8198_fork_epoch: 3
  slot_duration_schedule:
    - epoch: 3
      slot_duration_ms: 10000

renders as

SLOT_DURATION_SCHEDULE:
  - EPOCH: 0
    SLOT_DURATION_MS: 12000
  - EPOCH: 3
    SLOT_DURATION_MS: 10000

MIN_BLOB_DATA_RETENTION_MS is deliberately not a package param. Egg sets it from the preset, matching the spec: 1572864000 (~18 days) for mainnet and 196608000 (~2.3 days) for minimal. It can still be overridden through extra_env.

Sanity checks

Egg only renders what it's given, so validate_slot_duration_schedule in this package checks:

  • Every entry has exactly the epoch and slot_duration_ms keys, both integers.
  • slot_duration_ms is a positive multiple of 1000, as EIP-8198 requires.
  • Epochs are > 0 and strictly increasing. The genesis entry always comes from slot_duration_ms.
  • The first entry is at eip8198_fork_epoch. Slot duration may only change at a network upgrade, and a schedule without EIP-8198 enabled also fails this check.
  • eip8198_fork_epoch >= heze_fork_epoch, since EIP-8198 is built on Heze.
  • eip8198_fork_epoch can't be combined with frames_enabled, because that disables the Heze fork on the CL side.

Other changes

  • The default egg image changes in constants.star, network_params.yaml and README.md.
  • .github/check-consensus-spec-values.py now excludes EIP8198_FORK_VERSION / EIP8198_FORK_EPOCH, like the other testnet fork values.

Testing

  • kurtosis lint is clean. kurtosis run --dry-run passes for the valid configs, and each invalid case fails with its message.
  • Devnets with consensoor (ethpandaops/consensoor main) and a FOCIL EL (focil-devnet-0):
    • Minimal preset, 6s → 4s with reth: finalizes every epoch across the Heze and EIP-8198 forks.
    • Mainnet preset, 12s → 11s with reth: same result.
    • Mainnet preset with ethrex: Fulu genesis, then Gloas at epoch 1, Heze at epoch 2, and EIP-8198 at epoch 3 (12s → 10s).
    • The generated config has the full schedule, and amsterdamTime/bogotaTime match the fork epochs.
  • Dora needs ethpandaops/dora#882 (dora_params.image: ethpandaops/dora:bbusa-eip8198-slot-schedule) to follow the chain past the EIP-8198 fork.

Known limitations

  • Tooling that reads seconds_per_slot / slot_duration_ms still assumes the genesis slot duration after the EIP-8198 fork. That includes the mev-relay SEC_PER_SLOT, Nethermind's --Blocks.SecondsPerSlot and forky.
  • The spec also requires later schedule entries to line up with later network upgrades. The package doesn't model any forks after EIP-8198 yet, so only the first entry is checked against a fork epoch.

https://claude.ai/code/session_01FHGmKoch9p52UXRqqUd8mq

@barnabasbusa
barnabasbusa marked this pull request as ready for review September 28, 2026 13:16
redpandabot[bot]

This comment was marked as outdated.

ethereum-genesis-generator #322 renders SLOT_DURATION_SCHEDULE as given and
expects it to start at genesis, so prepend the genesis entry
({epoch: 0, slot_duration_ms}) to the user's later changes. Egg 6.2.2 rejects
an epoch-0 entry, so pin the default egg image to the #322 build
(fix-slot-schedule-passthrough) until it is released.

Claude-Session: https://claude.ai/code/session_01FHGmKoch9p52UXRqqUd8mq
@barnabasbusa barnabasbusa changed the title feat: add EIP-8198 quick slots params and bump genesis generator to 6.2.2 feat: add EIP-8198 quick slots params Sep 29, 2026
redpandabot[bot]

This comment was marked as outdated.

@redpandabot redpandabot Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Summary

The PR adds EIP-8198 quick-slot support (eip8198_fork_epoch + slot_duration_schedule) and now sends the full schedule (epoch-0 entry from slot_duration_ms plus user entries) to ethereum-genesis-generator 6.2.3, whose entrypoint.sh expects exactly that contract — the bump to the released v6.2.3 tag resolves the earlier unreleased-image finding. Two previously reported validation issues remain: only the first schedule entry is tied to a network upgrade, and the Heze-dependency error message is misleading when Heze is disabled.

Issues

  • 🟡 src/package_io/input_parser.star:145 — Only the first slot_duration_schedule entry is checked against a network upgrade — see the thread on that line
  • 🟢 src/package_io/input_parser.star:109 — Misleading error when Heze is not enabled — see the thread on that line

Reviewed @ ecdcd67c
"Everything fails, all the time." — Werner Vogels

Comment thread src/package_io/input_parser.star
@barnabasbusa
barnabasbusa enabled auto-merge (squash) October 5, 2026 09:41
@barnabasbusa
barnabasbusa merged commit 9f852f6 into main Oct 5, 2026
15 of 16 checks passed
@barnabasbusa
barnabasbusa deleted the feat/eip8198-shorter-slots branch October 5, 2026 09:42
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.

2 participants