Skip to main content
Breaking Schema ChangesEthereum’s Glamsterdam upgrade introduces EIP-7732: Enshrined Proposer-Builder Separation (ePBS), which fundamentally changes how beacon blocks are structured.Action Required: Queries using execution_payload, blob_kzg_commitments, or execution_requests fields in beacon.raw.blocks and beacon_hoodi.raw.blocks will return NULL values for all slots after the Glamsterdam activation.

Devnet Progress Updates

We track the state of the Glamsterdam devnet here on each check-in, most recent first, so you can see what changed between updates rather than just the current status. Source: Forkcast — Glamsterdam.
Allium schema. The Gloas tables below (execution_payload_bids, payload_attestations, execution_requests, builder_snapshot, execution_payload_envelopes) are built and validated. They are not yet live on beacon_hoodi or beacon mainnet; schemas may change until the Hoodi cutover.Devnet timeline (Forkcast). Forkcast lists Glamsterdam as Upcoming for 2026 with no public-testnet (Hoodi/Sepolia) or mainnet activation date set yet. The Gloas fork has so far run only on short-lived devnets:Source: Forkcast — Glamsterdam, checked October 6, 2026.
Glamsterdam remains in Devnet. No change to the schema plan below — actively monitoring and will implement schema changes once ePBS is live on Hoodi testnet.

What Is Changing

The Glamsterdam upgrade restructures how beacon blocks are produced by enshrining the proposer-builder separation protocol directly into the consensus layer.

Key Change: Block Body Structure

Before Glamsterdam, a beacon block body contains the full execution payload with transaction data:
After Glamsterdam, the proposer commits only a bid from the builder — the execution payload is revealed separately:
The execution_payload and blob_kzg_commitments fields are absent from the block body for all slots after the fork — blob_kzg_commitments moves into the bid itself rather than the revealed payload. execution_requests is also gone from its old position, though the body retains a parent_execution_requests field (the previous slot’s requests, kept for verification) — it isn’t a clean removal.
builder_index is an index into a new, separate builder registry (beacon.raw.builder_snapshot), not a validator index. Builders register and exit independently of the validator set via BuilderDepositRequest / BuilderExitRequest, and hold their own balance, deposit_epoch, and withdrawable_epoch. Do not join builder_index against beacon.raw.validators.
Why This MattersePBS separates the roles of block proposers and block builders at the protocol level. Proposers commit to a builder’s bid without seeing the full payload contents, which is then attested by a Payload Timeliness Committee (PTC). This reduces MEV centralization risks and improves censorship resistance.

Impact to Allium Tables

beacon.raw.blocks — Breaking Changes

The following columns will be affected for all slots after Glamsterdam activation:
execution_requests isn’t a clean removal: the block body retains a parent_execution_requests field carrying the previous slot’s requests for verification. The current-slot requests move to the ExecutionPayloadEnvelope, gossiped separately by the builder — see beacon.raw.execution_payload_envelopes. The ExecutionRequests schema also grows two new request types in Gloas, builder_deposits and builder_exits, alongside the existing deposits/withdrawals/consolidations.
Migration Path: eth1_block_hash, eth1_block_number, and eth1_block_timestamp stay populated — Allium resolves these internally via a join to execution-layer data rather than reading them off the beacon block body, so no query changes are needed for those three columns. Use the new beacon.raw.execution_payload_bids table (see below) for builder and bid-specific information (builder identity, bid value, gas limit) that has no other source post-fork.

beacon.raw.block_rewards — Additive Changes

New columns will be added to provide explicit builder payment tracking: No Breaking Changes: All existing columns remain available. The new builder_payment field maps to the bid’s value field (consensus-layer payment to the proposer) — it is distinct from execution_payment, the amount the builder pays at the execution layer to fee_recipient (see beacon.raw.execution_payload_bids below). builder_payment provides explicit execution reward attribution, replacing the current fee-recipient inference method for post-fork slots.

beacon.validator.consensus_income — No Changes

This view aggregates consensus-layer rewards only (attestations, sync committee, block proposals). No structural changes are expected.

New Tables

beacon.raw.execution_payload_bids

Provides one row per slot containing the builder’s committed bid from the beacon block body. Use this table to look up execution block hashes and builder information for post-Glamsterdam slots. Unique Key: slot_number
This table covers the bid only — block hash, builder, and committed values. Transactions, withdrawals, gas usage and state/receipts roots are only available once the builder reveals the SignedExecutionPayloadEnvelope; use beacon.raw.execution_payload_envelopes for those.

beacon.raw.payload_attestations

Provides one row per Payload Timeliness Committee (PTC) attestation included in a block, recording whether the builder revealed the execution payload on time. Unique Key: (slot_number, signature) — a block can carry several payload attestations.

beacon.raw.builder_snapshot

Provides a per-slot snapshot of each registered builder, tracking the builder lifecycle introduced in Gloas. Builders register and exit independently of the validator set via BuilderDepositRequest / BuilderExitRequest, and hold their own balance separate from any validator. To get the latest state of a builder, take the row with the highest slot_number for its builder_index. Unique Key: (slot_number, builder_index)

beacon.raw.execution_payload_envelopes

Provides one row per slot containing the ExecutionPayloadEnvelope the builder reveals after the block. This is the replacement source for post-fork execution payload data (transactions, withdrawals, gas usage, roots, and block_access_list from EIP-7928). Unique Key: slot_number

beacon.raw.execution_requests

Provides one row per slot with the execution requests as separate columns, including the two new Gloas request types. Unique Key: slot_number

Migration Timeline

Additive-First StrategyAllium follows an additive-first migration approach: New columns and tables appear before old columns are deprecated. Deprecated fields return NULL for post-fork slots — columns are not dropped. All changes are live on beacon_hoodi testnet ≥4 weeks before mainnet. Historical data (pre-fork slots) remains unchanged.

Action Items

Deadlines are keyed to devnet/testnet/mainnet milestones rather than fixed calendar dates — see Devnet Progress Updates for the current schedule, since Glamsterdam has slipped past its original April/May 2026 estimates.

Additional Notes

EIP-7928 (Block-level Access Lists)

EIP-7928 is included in the Glamsterdam upgrade. The Gloas ExecutionPayload container itself gains a block_access_list field (plus a slot_number field), so this is not purely an execution-layer-internal change — it is available inside the payload column of beacon.raw.execution_payload_envelopes.

Reference Documentation

Support

If you have questions about migrating your queries or need assistance testing against Hoodi testnet data, please contact the Allium support team.
Last checked: October 6, 2026 — see Devnet Progress Updates for change history.