Skip to content

Forward compatible consensus data structures (EIP-7688)#4630

Open
etan-status wants to merge 54 commits into
ethereum:masterfrom
etan-status:sn-7688
Open

Forward compatible consensus data structures (EIP-7688)#4630
etan-status wants to merge 54 commits into
ethereum:masterfrom
etan-status:sn-7688

Conversation

@etan-status

Copy link
Copy Markdown
Contributor

EIP-4788 exposed the beacon root to smart contracts, but smart contracts need to be redeployed / upgraded whenever generalized indices change during a fork, even if that fork does not touch any used functionality. That is analogous to an OS without ABI stability, requiring programs to be maintained and re-compiled due to random breakages in OS updates.

This issue expands further to bridges on other blockchains, and also into wallets / dApps that verify data from the beacon chain instead. Such projects do not typically share Ethereum's release cadence.

EIP-7688 introduces forward compatibility for beacon chain structures. Generalized indices remain same when list capacities evolve over forks, containers no longer get re-indexed when reaching a new power-of-2 number of fields, and fields can be deprecated, leaving a gap in the Merkle tree instead of triggering re-indexing.

EIP-7688 was requested for inclusion by popular projects:

EIP-4788 exposed the beacon root to smart contracts, but smart contracts
need to be redeployed / upgraded whenever generalized indices change
during a fork, even if that fork does not touch any used functionality.
That is analogous to an OS without ABI stability, requiring programs
to be maintained and re-compiled due to random breakages in OS updates.

This issue expands further to bridges on other blockchains, and also
into wallets / dApps that verify data from the beacon chain instead.
Such projects do not typically share Ethereum's release cadence.

- https://eips.ethereum.org/EIPS/eip-4788

EIP-7688 introduces forward compatibility for beacon chain structures.
Generalized indices remain same when list capacities evolve over forks,
containers no longer get re-indexed when reaching a new power-of-2
number of fields, and fields can be deprecated, leaving a gap in the
Merkle tree instead of triggering re-indexing.

- https://eips.ethereum.org/EIPS/eip-7688

EIP-7688 was requested for inclusion by popular projects:

- For Electra by Rocketpool: https://xcancel.com/KaneWallmann/status/1816729724145795258
- For Fulu by Lido: ethereum/pm#1356 (comment)
@etan-status etan-status marked this pull request as ready for review October 6, 2025 20:11
Comment thread specs/electra/beacon-chain.md Outdated
@etan-status etan-status changed the title eip7688: use forward compatible SSZ types in Gloas EIP-7688: use forward compatible SSZ types in Gloas Dec 12, 2025
@etan-status etan-status changed the title EIP-7688: use forward compatible SSZ types in Gloas EIP-7688: Use forward compatible SSZ types in Gloas Dec 12, 2025
@github-actions github-actions Bot added ssz Simple Serialize lightclients testing CI, actions, tests, testing infra electra gloas labels Feb 3, 2026
@paulmillr

Copy link
Copy Markdown

EIP-7688 is now live in https://github.com/paulmillr/micro-eth-signer

The test vectors from the proton drive link above are available in git repo https://github.com/paulmillr/eth-vectors

@github-actions github-actions Bot added eip8025 Optional Execution Proofs eip8148 Custom sweep threshold labels Jun 6, 2026
Comment thread specs/gloas/beacon-chain.md Outdated
@etan-status

etan-status commented Jun 26, 2026

Copy link
Copy Markdown
Contributor Author

@jtraglia Fallout, to be addressed once this PR gets merged:

  1. BUILDER_INDEX_FLAG should be changed from 2^40 to 2^63, as 2^40 no longer has any meaning (the state limit is gone). have checked with @wemeetagain, it shouldn't be on a critical path for typescript
  2. the genesis state builder from the pandaops has to be addressed to create proper roots when gloas_fork_epoch = 0. interim, have to set gloas_fork_epoch = 1 so that genesis uses fulu or earlier. @pk910
    • addressed below
  3. the deposit requests serialization limit has to be raised to support 200M gas, the PR here does not affect network limits, it moves existing limits from the type definition to gossip + state transition rules + preset values, it doesn't change them.
  4. If PTC_SIZE can evolve over time, the bitvector inside PayloadAttestation should become ProgressiveBitList, and the list inside IndexedPayloadAttestation should become ProgressiveList (but the indexed payload attestation probably shouldn't even be an SSZ type to begin with, it's just an internal helper object).
    • Checked with @potuz "I suspect it'll stay as this forever"

As this PR affects many files, would recommend a 3-alpha plan to give client teams the opportunity to test this one in isolation. (1) a version that includes everything up to this PR, (2) a version with this PR on top, (3) a version with the fallout addressed + other fixes. would be a nice to have the intermediate tests for (1) and (2), if that's not too cumbersome infra-wise, even though only (3) would ship on devnet-7.

@pk910

pk910 commented Jun 26, 2026

Copy link
Copy Markdown
Member

tooling side is ready for eip7688. Just needs a dependency bump for the affected tools :)
I've created a branch for:

kt config snippets to use these branches:

ethereum_genesis_generator_params:
  image: "ethpandaops/ethereum-genesis-generator:glamsterdam-devnet-7"
dora_params:
  image: ethpandaops/dora:glamsterdam-devnet-7

pk910 pushed a commit to ethpandaops/go-eth2-client that referenced this pull request Jun 26, 2026
The blob types were changed to progressive:

blob_kzg_commitments: ProgressiveList[KZGCommitment]

- ethereum/consensus-specs#4630
Comment thread specs/gloas/beacon-chain.md
pk910 added a commit to ethpandaops/go-eth2-client that referenced this pull request Jun 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

eip8025 Optional Execution Proofs eip8148 Custom sweep threshold electra gloas heze lightclients ssz Simple Serialize testing CI, actions, tests, testing infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants