# Gloas state review merge: Lodestar and Grandine

| Client | Branch | Commit | Consensus spec commit |
|---|---|---|---|
| Lodestar | `unstable` | [`e4b4f615e68c1a4ea7c57632e6ed8d824624573f`](https://api.github.com/repos/ChainSafe/lodestar/commits/unstable) | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| Grandine | `develop` | [`52cd677117b5d93bf477fe4843148070b0303444`](https://api.github.com/repos/grandinetech/grandine/commits/develop) | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| Teku (Lodestar comparison only) | `master` | [`2c35574b3373cbe8ad121a768d98f066aec05b73`](https://api.github.com/repos/Consensys-Incorporated/teku/commits/master) | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| Nimbus (Grandine comparison only) | `stable` | [`0abc0dd0fc0750a8875c49089d074f7d7197b62c`](https://api.github.com/repos/status-im/nimbus-eth2/commits/stable) | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |

Public-source inspection only; no client or protocol execution. Lodestar declares [consensus-specs v1.7.0-beta.4](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/spec-tests-version.json#L1-L12), while the pinned master contains [PR 5736](https://github.com/ethereum/consensus-specs/pull/5736). The two item reviews focus on Gloas [EIP-7732](https://eips.ethereum.org/EIPS/eip-7732) and [EIP-8282](https://eips.ethereum.org/EIPS/eip-8282). The Lodestar item also recorded the scheduled fork scope below from [EIP-7773 at its pinned EIPs commit](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L25-L90), [Gloas spec inventory](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L163-L186), and [`execution-specs` `forks/amsterdam` pin](https://api.github.com/repos/ethereum/execution-specs/commits/forks/amsterdam). Its EIPs pin is `d4c575521d99ec881a444ab3af604e684b5f0743`; its EL spec pin is `16898000911c1e3caa57be08509536c10ae92d3e`. Each EIP's current text is `EIPS/eip-N.md` at the EIPs pin; no separate semantic version exists.

### Scheduled scope and recorded spec revisions

The pinned [EIP-7773](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L25-L90) schedules these **18** EIPs. Current text for each is `EIPS/eip-N.md` at the EIPs pin above; no separate semantic version exists. **ELref/X** means `tests/amsterdam/X/spec.py` at the EL pin. Revisions: ELref files and [Gloas inventory](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L163-L186); EL inventory: [src/ethereum/forks/amsterdam/__init__.py#L1-L40](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/src/ethereum/forks/amsterdam/__init__.py#L1-L40). 

| EIP / current text at EIPs pin | Current status | Layer / targeted EIP revision in spec repository |
|---|---|---|
| [2780](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-2780.md) | Last Call | EL [ELref/eip2780_reduce_intrinsic_tx_gas#L14-L17](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip2780_reduce_intrinsic_tx_gas/spec.py#L14-L17) (`7243c92ba812437c64bae9fc6524ee269b29daa9`) |
| [7688](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7688.md) | Review | CL `f2e6d7fb01194d590e16fcdcae8061d06cf1a7f1` |
| [7708](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7708.md) | Last Call | EL [ELref/eip7708_eth_transfer_logs#L16-L18](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7708_eth_transfer_logs/spec.py#L16-L18) (`f7230c46a743313957d8f38a159bda934cc735b2`) |
| [7732](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7732.md) | Last Call | CL `c36a2e58a4496ed21bef6b1c97505b03fd159f0a` |
| [7778](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7778.md) | Last Call | EL [ELref/eip7778_block_gas_accounting_without_refunds#L14-L16](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7778_block_gas_accounting_without_refunds/spec.py#L14-L16) (`4897aec97160c72d2080acf928b132f2efc1a886`) |
| [7843](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7843.md) | Last Call | EL [ELref/eip7843_slotnum#L14-L17](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7843_slotnum/spec.py#L14-L17) (`c3bfd4ba41cf0fcbfe8c404f33ba89f5174971e0`); CL `c3bfd4ba41cf0fcbfe8c404f33ba89f5174971e0` |
| [7928](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7928.md) | Last Call | EL [ELref/eip7928_block_level_access_lists#L14-L17](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7928_block_level_access_lists/spec.py#L14-L17) (`f834f0004aa5110a5f1ac0d6b80e3dc4b842d040`) |
| [7954](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7954.md) | Last Call | EL [ELref/eip7954_increase_max_contract_size#L14-L17](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7954_increase_max_contract_size/spec.py#L14-L17) (`2e62d6a88aa596e4efbf3592cda7706f8a51dac3`) |
| [7976](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7976.md) | Last Call | EL [ELref/eip7976_increase_calldata_floor_cost#L14-L16](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7976_increase_calldata_floor_cost/spec.py#L14-L16) (`c998ef94eb16a6af8a9b8e2084f947b17ea14865`) |
| [7981](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7981.md) | Last Call | EL [ELref/eip7981_increase_access_list_cost#L14-L16](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7981_increase_access_list_cost/spec.py#L14-L16) (`8da3cf91d4bc688c43cc25f2f03b7c86c7bbc257`) |
| [7997](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7997.md) | Last Call | EL [ELref/eip7997_deterministic_factory_contract#L16-L19](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip7997_deterministic_factory_contract/spec.py#L16-L19) (`192193facea01dfb8b87ad59d67e8385bf9304b1`) |
| [8024](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8024.md) | Last Call | EL [ELref/eip8024_dupn_swapn_exchange#L15-L18](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip8024_dupn_swapn_exchange/spec.py#L15-L18) (`34b49095ca5f7343045da279f04e7ecd1e451393`) |
| [8037](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8037.md) | Last Call | EL [ELref/eip8037_state_creation_gas_cost_increase#L25-L27](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip8037_state_creation_gas_cost_increase/spec.py#L25-L27) (`19bdfb4f97064dfbeb3d41d31efac211265b49a6`) |
| [8038](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8038.md) | Last Call | EL [ELref/eip8038_state_access_gas_cost_increase#L14-L16](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip8038_state_access_gas_cost_increase/spec.py#L14-L16) (`f83531466a3862853424a81d000727b3043ef2cc`) |
| [8045](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8045.md) | Last Call | CL `414a8404198c5afaa3cfed10a385a9aae1dfaae3` |
| [8061](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8061.md) | Last Call | CL `01f15c37c64114c478cb1136e0a6966084e4db14` |
| [8246](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8246.md) | Last Call | EL [ELref/eip8246_selfdestruct_no_burn#L14-L17](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip8246_selfdestruct_no_burn/spec.py#L14-L17) (`8be64cf6a01350938b93332cf0062ab7a3166f23`) |
| [8282](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8282.md) | Last Call | EL [ELref/eip8282_builder_execution_requests#L18-L21](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/tests/amsterdam/eip8282_builder_execution_requests/spec.py#L18-L21) (`45e570a246207d5b1fb095e259e3f98bb0922639`); CL `de4c6f02c7bec4686762c55f8ab6abcf97a77d7d` |

Supporting EIP-8070/8261 appear in CL inventory; EIP-7773 lists them separately from scheduled core proposals. References: Gloas `beacon-chain.md`, `fork.md`, `builder.md`, `fork-choice.md`, `p2p-interface.md`; [EIP-7732](https://eips.ethereum.org/EIPS/eip-7732), [EIP-8282](https://eips.ethereum.org/EIPS/eip-8282).


## Candidates

## Lodestar-1 — spec-version lag: fork onboarding routes by key before credentials

**Known; high confidence; severity: consensus split relative to master.** This is a beta.4/master disagreement, not evidence of a beta.4 implementation bug.

1. **Spec, verbatim.** [specs/gloas/fork.md#L65-L125](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L65-L125) states:

   > Only deposits with builder withdrawal credentials can fund builders.
   > Other deposits stay queued, even if a builder uses the same public key.
   > A valid builder registration can use a validator's public key.

   Master tests credentials before builder lookup.

2. **Lodestar, quoted at its pin.** [packages/state-transition/src/slot/upgradeStateToGloas.ts#L211-L245](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/slot/upgradeStateToGloas.ts#L211-L245):

   ```typescript
   if (isValidatorKnown(state, validatorIndex)) {
     pendingDeposits.push(deposit);
     pendingDepositsLookup.add(depositValue, pubkeyHex);
     kept++;
     continue;
   }
   ```

   Later, before the credential test:

   ```typescript
   if (builderIndex !== undefined) {
     // Top up an already-onboarded builder
     state.builders.get(builderIndex).balance += deposit.amount;
     topups++;
     continue;
   }
   ```

   Lines 239–245 also retain a builder registration when `hasPendingValidator(...)` is true, before checking its signature.

3. **Divergent conditions, in words.** At the Fulu→Gloas upgrade: (a) a valid builder-credential registration uses an existing validator’s key; or (b) an earlier valid ordinary validator deposit for that key is still queued, followed by a valid builder registration. Master creates the builder while Lodestar keeps the registration pending. Conversely, (c) a valid builder registration is followed by an ordinary non-builder-credential deposit for the same key, not already a validator: master preserves the latter in the validator queue, while Lodestar credits it to the builder and removes it from the queue. The upgrade state roots differ through builders/balances/pending deposits.

4. **Teku comparison.** [ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/forktransition/GloasStateUpgrade.java#L222-L268](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/forktransition/GloasStateUpgrade.java#L222-L268) agrees with Lodestar/beta.4, not master: `if (validatorsUtil.getValidatorIndex(state, pubkey).isPresent())` retains the deposit, and `builder.copyWithNewBalance(builder.getBalance().plus(deposit.getAmount()))` runs before its credential check. Lines 251–254 also block same-key pending-validator registrations.

5. **Disproof attempted.** Raw beta.4/master comparison proves the old behavior is intentional compatibility. Traced the full onboarding loop and its signature cache: valid signatures cannot bypass the earlier key checks. Its builder-index map starts empty and is populated only after append, so map staleness is not the cause. **High confidence against master**, but beta.4 conformance disproves calling this a bug against Lodestar’s declared target.

6. **Severity and known-check.** **Consensus split** at upgrade against a master-following client; subsequent builder-bid acceptance can also differ. **Known:** [Lodestar PR #10428](https://github.com/ChainSafe/lodestar/pull/10428), **open/unmerged**, implements exactly PR 5736’s routing. The PR reports master vectors passing but five beta.4 mixed-key cases failing after its fix; these are author-reported, not rerun here. [Spec PR #5736](https://github.com/ethereum/consensus-specs/pull/5736), **closed/merged**, fixes [spec issue #5735](https://github.com/ethereum/consensus-specs/issues/5735). Spec-target coordination is required; this is already known.


## Lodestar-2 — Gloas builder balance arithmetic has an economic rather than protocol precision bound

**Known representation limitation / conditional candidate; medium overall confidence; severity: consensus split.** High arithmetic confidence; economic reachability unverified.

1. **Spec, verbatim.** [specs/gloas/beacon-chain.md#L660-L667](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L660-L667) declares `balance: Gwei`; [specs/gloas/beacon-chain.md#L2334-L2361](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2334-L2361) requires:

   ```python
   # Increase balance by deposit amount
   builder.balance += request.amount
   ```

   Amount is also `Gwei` in [specs/gloas/beacon-chain.md#L690-L695](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L690-L695). No 53-bit bound is specified. [EIP-8282’s deposit rule](https://eips.ethereum.org/EIPS/eip-8282#deposit-requests) allows uint64-gwei deposit amounts, subject to minimum stake and matching value plus fee, not whole-ETH increments.

2. **Lodestar, quoted at its pin.** The Gloas-only [packages/types/src/gloas/sszTypes.ts#L286-L296](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L286-L296) declares `balance: UintNum64`; [packages/types/src/gloas/sszTypes.ts#L191-L204](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L191-L204) declares `amount: UintNum64` for `BuilderDepositRequest`. [packages/state-transition/src/block/processBuilderDepositRequest.ts#L34-L44](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processBuilderDepositRequest.ts#L34-L44) executes:

   ```typescript
   // Increase balance by deposit amount
   builder.balance += amount;
   ```

   [packages/types/src/gloas/sszTypes.ts#L412-L426](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L412-L426) explicitly acknowledges for bid value that the bound is economic: “Balance itself isn't structurally bounded” and uses `value: UintNum64`. This concerns only Gloas builder fields and addition.

3. **Divergent condition, in words.** A Gloas builder has an exactly representable balance of **9,007,199,254,740,992 gwei** (two to the fifty-third), reached by funded builder deposits. Its parent payload carries an otherwise valid top-up of **1,000,000,001 gwei** with builder credentials, a safe representable request amount above the one-ETH minimum. Master’s next balance is **9,007,200,254,740,993 gwei**. JavaScript number addition rounds this odd integer to **9,007,200,254,740,992**, one gwei lower. Both operands are exact before addition. The child’s balance/state root differs. Funding requires about **9,007,199 ETH** in one builder; no cheap attack is claimed.

4. **Teku comparison.** [ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/state/versions/gloas/Builder.java#L38-L48](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/state/versions/gloas/Builder.java#L38-L48) uses `namedSchema("balance", SszPrimitiveSchemas.UINT64_SCHEMA)`; [ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/execution/versions/gloas/BuilderDepositRequestSchema.java#L30-L48](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/execution/versions/gloas/BuilderDepositRequestSchema.java#L30-L48) uses the uint64 amount schema. [ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/execution/ExecutionRequestsProcessorGloas.java#L97-L101](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/execution/ExecutionRequestsProcessorGloas.java#L97-L101) applies `modifiedBuilder.getBalance().plus(request.getAmount())` in `UInt64`, agreeing with the exact spec sum for this non-overflowing example.

5. **Disproof attempted.** The EL minimum allows this small odd-gwei top-up; the existing-builder path does not require a fresh signature. `canBuilderCoverBid` constrains bids, not deposits/builder balance. [Merged #9835](https://github.com/ChainSafe/lodestar/pull/9835) explicitly accepts the number-based subsystem on economic grounds (~9M ETH in one builder). No protocol invariant excludes this funded condition. Unlike retracted #9350, this sum is odd in gwei, not an effective-balance multiple of one billion. Static arithmetic only; **medium overall confidence** because funding/practical reachability was not demonstrated.

6. **Severity and known-check.** **Consensus split** (or rejection of a spec-valid child whose state root uses exact arithmetic) under the stated funded condition. **Known limitation:** [#9835](https://github.com/ChainSafe/lodestar/pull/9835), **closed/merged**, 2026-08-17; its accepted rationale concerns the same number-based builder balance/payment subsystem, although it does not demonstrate this exact small-top-up boundary. Exact top-up trigger not found in recorded queries; related representation limitation is known. No Hive/EST corroboration found.


## Grandine-1 — fork-boundary clock can make Gloas deadlines 250 ms early (known)

1. **Spec.** Fork choice defines the payload and PTC deadlines as slot-component
   durations: `return get_slot_component_duration_ms(PAYLOAD_DUE_BPS)` and
   `return get_slot_component_duration_ms(PAYLOAD_ATTESTATION_DUE_BPS)`
   ([fork-choice.md#L780-L791](https://raw.githubusercontent.com/ethereum/consensus-specs/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L780-L791)); those deadlines feed block-timeliness recording
   ([fork-choice.md#L986-L1000](https://raw.githubusercontent.com/ethereum/consensus-specs/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L986-L1000)).
2. **Grandine.** The next-tick search advances `next_tick` first, switches
   `tick_duration` based on that next tick’s phase, then adds it to elapsed time:
   `next_tick = next_tick.next...`; `if next_phase != current_phase { ... }`;
   `now_to_next_tick = now_to_next_tick.saturating_add(tick_duration)`
   ([clock/src/lib.rs#L502-L526](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/clock/src/lib.rs#L502-L526)).  The stream itself uses the current tick’s duration after emitting it
   ([clock/src/lib.rs#L398-L417](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/clock/src/lib.rs#L398-L417)), exposing the inconsistent transition ordering.
3. **Trigger/result.** Start or re-find the tick stream during the final
   pre-Gloas slot, after its 11th of 12 one-second ticks.  On crossing to a
   16-tick Gloas slot, the search charges the final pre-fork interval at 750 ms
   instead of one second.  Thus it can schedule the first Gloas tick and builder
   deadlines 250 ms early; messages/envelopes in that interval receive a
   different local timing/gossip treatment and can change the fork-choice
   timeliness input.  The submitted issue gives the concrete slot-64,
   767.5-second example and expected 768-second boundary.
4. **Nimbus comparison.** Nimbus computes Gloas payload and PTC deadlines from
   the configured basis-points offset
   ([beacon_time.nim#L135-L140](https://raw.githubusercontent.com/status-im/nimbus-eth2/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beacon_time.nim#L135-L140),
   [#L182-L188](https://raw.githubusercontent.com/status-im/nimbus-eth2/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beacon_time.nim#L182-L188)) and waits on those deadlines
   ([beacon_validators.nim#L1087-L1099](https://raw.githubusercontent.com/status-im/nimbus-eth2/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/validators/beacon_validators.nim#L1087-L1099)); it agrees with the spec’s deadline model, not Grandine’s boundary calculation.
5. **Confidence/disproof.** High.  I traced both branches and the 12-to-16 tick
   change (the latter is explicit at
   [clock/src/lib.rs#L355-L368](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/clock/src/lib.rs#L355-L368)).
   I also tried to disprove it by checking the emitted-stream update order; that
   loop uses the correct current-tick duration but does not repair the initial
   search. **Known:** open [Grandine PR #989](https://github.com/grandinetech/grandine/pull/989), “Fix clock deadlines at the Gloas fork boundary,” describes the same 250-ms case and proposes the ordering fix.
6. **Severity.** Fork-choice divergence (known; not a new report).


## Cross-client rule comparison

Cells describe the two review subjects at their pins. [L] and [G] link to client code; [S] links to the pinned Gloas spec. “Agrees” means source inspection, not a test pass. Lodestar-2 qualifies number-based builder arithmetic in otherwise conformant rows.

| Rule flagged or checked (evidence) | Lodestar | Grandine |
|---|---|---|
| Fork onboarding: route by credentials before key, preserve ordinary/pending validator deposits, allow validator-key builder registration [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/slot/upgradeStateToGloas.ts#L211-L245) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/fork.rs#L984-L1101) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L65-L125) | differs (see Lodestar-1) | agrees with spec |
| Builder balance: exact uint64-gwei addition at the 2^53 boundary [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processBuilderDepositRequest.ts#L34-L44) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2334-L2361) | differs (see Lodestar-2) | not checked |
| Fork-boundary clock: use the pre-fork interval before switching to Gloas tick duration [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/clock/src/lib.rs#L502-L526) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L780-L791) | not checked | differs (see Grandine-1) |
| Self-build zero amount/exact infinity signature (`0xc0` encoding); active non-self builder, version/BLS, cover-bid floor [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processExecutionPayloadBid.ts#L29-L65) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L605-L665) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2159-L2197) | agrees with spec | agrees with spec |
| Bid slot/genesis, parent hash/root, distinct block hash, pre-reveal RANDAO, blob count [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processExecutionPayloadBid.ts#L67-L100) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L668-L725) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2183-L2200) | agrees with spec | agrees with spec |
| Bid cover rejects bids below its minimum [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/util/gloas.ts#L117-L167) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/predicates.rs#L466-L482) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1168-L1192) | agrees with spec | agrees with spec |
| Bid cover sum of both queues and equality at remaining excess [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/util/gloas.ts#L117-L167) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1168-L1192) | agrees with spec | not checked |
| Pending payment insertion index and zero initial weight [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processExecutionPayloadBid.ts#L102-L115) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L849-L884) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2202-L2218) | agrees with spec | agrees with spec |
| Pending payment records bid fee recipient, amount, builder, and actual proposer [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processExecutionPayloadBid.ts#L102-L115) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2202-L2218) | agrees with spec | not checked |
| Attestation payment weight: same-slot root, prior zero participation, new flag, correct half, no double count [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processAttestationsAltair.ts#L90-L168) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2432-L2480) | agrees with spec | not checked |
| Parent EMPTY early return; FULL request-root commitment [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processParentExecutionPayload.ts#L18-L37) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L728-L819) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1841-L1856) | agrees with spec | agrees with spec |
| EMPTY parent requires all five request lists empty and no deferred effects [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processParentExecutionPayload.ts#L18-L37) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1841-L1856) | agrees with spec | not checked |
| Settle parent payment before exit; same/previous epoch index and older nonzero payment [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processParentExecutionPayload.ts#L47-L103) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1784-L1830) | agrees with spec | not checked |
| Parent request order: deposits, withdrawals, consolidations, builder deposits, builder exits [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processParentExecutionPayload.ts#L47-L103) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L728-L819) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1784-L1830) | agrees with spec | agrees with spec |
| Parent request count limits for withdrawals, consolidations, builder deposits/exits; nonempty request root [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L179-L217) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L728-L819) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1792-L1795) | agrees with spec | agrees with spec |
| Block ordering: parent effects before header, withdrawals before bid, bid before RANDAO [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/index.ts#L57-L119) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1754-L1772) | agrees with spec | not checked |
| Withdrawals: empty-parent early return [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L35-L46) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L488-L579) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2067-L2097) | agrees with spec | agrees with spec |
| Empty-parent return preserves expected withdrawals and indices [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L35-L46) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2067-L2097) | agrees with spec | not checked |
| Withdrawal priority: builder payments, pending partials, then builder sweep [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L144-L279) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L488-L579) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1861-L2097) | agrees with spec | agrees with spec |
| Validator sweep follows builder sweep; reserve its slot, debit immediately, consume only processed entries [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L144-L279) [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L439-L517) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1861-L2097) | agrees with spec | not checked |
| Builder sweep cursor modulo builder count [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L105-L141) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L488-L579) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2032-L2040) | agrees with spec | agrees with spec |
| Validator cursor moves after final validator when payload is full [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processWithdrawals.ts#L105-L141) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2090-L2098) | agrees with spec | not checked |
| Envelope checks: post-block beacon/header and parent roots, builder/RANDAO/gas/hash/request commitments, execution parent, timestamp, expected withdrawals [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/beacon-node/src/chain/blocks/verifyExecutionPayloadEnvelope.ts#L25-L121) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_store/src/store.rs#L4040-L4256) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L683-L728) | agrees with spec | agrees with spec |
| Envelope versioned hashes and EL notification [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_store/src/store.rs#L4040-L4256) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L680-L726) | not checked | agrees with spec |
| Envelope signature: proposer for self-build, builder otherwise [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/signatureSets/executionPayloadEnvelope.ts#L13-L40) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_store/src/store.rs#L4040-L4256) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2107-L2123) | agrees with spec | agrees with spec |
| Envelope signature domain 0x0B at envelope slot [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/signatureSets/executionPayloadEnvelope.ts#L13-L40) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2107-L2123) | agrees with spec | not checked |
| Block payload attestation: previous slot/root, sorted nonempty indices, duplicates, aggregate signature, limit [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processPayloadAttestation.ts#L7-L26) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L904-L960) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2488-L2500) | agrees with spec | agrees with spec |
| Payload-attestation gossip: slot, known block, duplicate-position membership, BLS [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/beacon-node/src/chain/validation/payloadAttestationMessage.ts#L42-L141) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L891-L950) | agrees with spec | not checked |
| PTC committee order and weighted 16-bit duplicate-capable selection [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/util/seed.ts#L275-L383) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/accessors.rs#L1114-L1169) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1198-L1232) | agrees with spec | agrees with spec |
| PTC SHA256 epoch seed plus LE slot, no extra shuffle, little-endian sample and inclusive comparison [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/util/seed.ts#L275-L383) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1198-L1232) | agrees with spec | not checked |
| Payment quorum and payment halves shift/clear at epoch [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/epoch/processBuilderPendingPayments.ts#L9-L27) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/epoch_processing.rs#L209-L238) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1719-L1730) | agrees with spec | agrees with spec |
| Quorum floors before multiply/divide and inclusive >= threshold [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/util/gloas.ts#L33-L41) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1433-L1440) | agrees with spec | not checked |
| PTC window shift and refill [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/epoch/processPtcWindow.ts#L15-L45) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/epoch_processing.rs#L189-L207) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1737-L1749) | agrees with spec | agrees with spec |
| PTC refill follows effective-balance updates [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/epoch/index.ts#L173-L226) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1737-L1749) | agrees with spec | not checked |
| Upgrade common fields, progressive lists, PTC window, availability, latest hash, synthetic bid, default queues [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/slot/upgradeStateToGloas.ts#L32-L136) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L145-L261) | agrees with spec | not checked |
| Post-fork builder deposits: credentials/PoP, top-up, reset; builder exit: active/address/no pending funds [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/state-transition/src/block/processBuilderDepositRequest.ts#L20-L44) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2334-L2385) | agrees with spec | not checked |
| Constants: self-build uint64 max, flag 2^40, prefix 0xB0, version 0, domains 0x0B–0x0E, PTC_SIZE 512 [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/params/src/index.ts#L154-L175) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/consts.rs#L81-L106) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L556-L600) | agrees with spec | agrees with spec |
| Payment quorum preset 6/10 [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/params/src/presets/mainnet.ts#L145-L150) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L556-L600) | agrees with spec | not checked |
| SSZ Builder fields and order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L286-L296) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L660-L667) | agrees with spec | agrees with spec |
| SSZ BuilderPendingPayment and BuilderPendingWithdrawal fields and order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L298-L317) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L672-L685) | agrees with spec | agrees with spec |
| SSZ BuilderDepositRequest and BuilderExitRequest fields and order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L191-L217) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L690-L703) | agrees with spec | agrees with spec |
| SSZ PayloadAttestationData, PayloadAttestation, Message, IndexedAttestation fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L333-L375) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L708-L744) | agrees with spec | agrees with spec |
| SSZ ExecutionPayloadBid and signed wrapper fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L399-L435) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L749-L772) | agrees with spec | agrees with spec |
| SSZ ExecutionPayloadEnvelope and signed wrapper fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L494-L512) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L777-L793) | agrees with spec | agrees with spec |
| SSZ Attestation, IndexedAttestation, AttesterSlashing upgraded fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L121-L160) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L801-L821) | agrees with spec | agrees with spec |
| SSZ BeaconBlockBody inherited prefix and ePBS fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L560-L582) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L829-L860) | agrees with spec | agrees with spec |
| SSZ BeaconState 46-field order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L670-L734) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/beacon_state.rs#L20-L140) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L866-L934) | agrees with spec | agrees with spec |
| SSZ ExecutionPayload block_access_list/slot_number tail, ExecutionRequests and NewPayloadRequest fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L219-L229) [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/electra/sszTypes.ts#L181-L194) [G](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L38-L580) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L940-L1000) | agrees with spec | agrees with spec |
| SSZ ProposerPreferences, DataColumnSidecar fields/order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L377-L397) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L145-L184) | agrees with spec | not checked |
| SSZ BeaconBlock and SignedBeaconBlock inherited field order [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/gloas/sszTypes.ts#L584-L600) [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/packages/types/src/phase0/sszTypes.ts#L383-L401) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L829-L860) | agrees with spec | not checked |
| Production PTC native shuffle: 16-bit little-endian sampling and inclusive comparison [L](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/pnpm-workspace.yaml#L10-L20) [native source](https://github.com/ChainSafe/lodestar-z/blob/b8ca543b9babc4f9ae4e2241623739f76d20c6fa/src/swap_or_not_shuffle/root.zig#L542-L680) [binding](https://github.com/ChainSafe/lodestar-z/blob/b8ca543b9babc4f9ae4e2241623739f76d20c6fa/bindings/napi/shuffle.zig#L116-L141) [S](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1266-L1283) | agrees with spec | not checked |

## Known-check summary and public results

- **Lodestar-1:** [Lodestar PR #10428](https://github.com/ChainSafe/lodestar/pull/10428) is open/unmerged and implements the [merged spec PR #5736](https://github.com/ethereum/consensus-specs/pull/5736), which fixes [spec issue #5735](https://github.com/ethereum/consensus-specs/issues/5735). Lodestar's pinned [beta.4 target](https://github.com/ChainSafe/lodestar/blob/e4b4f615e68c1a4ea7c57632e6ed8d824624573f/spec-tests-version.json#L1-L12) explains the lag. #10428 reports master vectors passing and five beta.4 mixed-key cases failing after its fix; the item review did not rerun them. Teku at the comparison pin retains beta.4 behavior ([GloasStateUpgrade.java#L222-L268](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/forktransition/GloasStateUpgrade.java#L222-L268)).
- **Lodestar-2:** [Lodestar PR #9835](https://github.com/ChainSafe/lodestar/pull/9835) is closed/merged and accepts the number-based builder balance/payment subsystem on economic grounds. The item found no issue/PR for the exact odd-gwei top-up trigger in its recorded searches; the broader representation limitation is known. Its disproof checked the EL minimum, existing-builder path, bid-cover condition, and arithmetic; funding was not demonstrated. [#9350](https://github.com/ChainSafe/lodestar/pull/9350) was closed/unmerged after its different quorum-overflow framing was retracted; [#9709](https://github.com/ChainSafe/lodestar/pull/9709) was closed/unmerged without an established value-level encoding/root discrepancy; [#8767](https://github.com/ChainSafe/lodestar/pull/8767) was merged and fixed missing `slotNumber`.
- **Grandine-1:** [Grandine PR #989](https://github.com/grandinetech/grandine/pull/989) is open and describes the same 250-ms fork-boundary clock error. [Issue #912](https://github.com/grandinetech/grandine/issues/912) already records a broader timing configuration observation. The earlier attestation-balance issue was fixed by merged [PR #747](https://github.com/grandinetech/grandine/pull/747). Grandine's item reviewed open and closed issues/PRs via the [Gloas/EIP query](https://api.github.com/search/issues?q=repo%3Agrandinetech%2Fgrandine%20%28EIP-7732%20OR%20gloas%20OR%20epbs%29%20is%3Aissue) and [PR query](https://api.github.com/search/issues?q=repo%3Agrandinetech%2Fgrandine%20%28EIP-7732%20OR%20gloas%20OR%20epbs%29%20is%3Apr); exact bid/parent/cover/PTC/onboarding terms returned no issue. Its proposed onboarding-lag candidate (valid builder deposit sharing a validator pubkey or following an earlier valid pending validator top-up) was **disproved** against master by [Grandine's fork.rs#L984-L1101](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/fork.rs#L984-L1101) and [Nimbus's beaconstate.nim#L2308-L2405](https://raw.githubusercontent.com/status-im/nimbus-eth2/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L2308-L2405); confidence high, severity cosmetic at this pin. Both follow [master fork onboarding](https://raw.githubusercontent.com/ethereum/consensus-specs/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L59-L121).

**Public Hive/EST status:** The Lodestar item could not read rows from [Hive Glamsterdam](https://hive.ethpandaops.io/#/group/glamsterdam) (direct HTTP 403) or [legacy Hive](https://hive-results.ethdevops.io/); its searches found no candidate-specific run. [EST releases](https://github.com/ethereum/execution-spec-tests/releases) and Amsterdam reference files establish fixture versions, not Lodestar CL results. The Grandine item found no authoritative pinned public Hive/results page establishing a failure; it did not run [Grandine's Gloas test hooks](https://raw.githubusercontent.com/grandinetech/grandine/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/epoch_processing.rs#L485-L510). **No independent Hive or EST pass/fail is claimed for these candidates.**
