# Grandine — Gloas conformance review

**27 October 2026; static public-source review only.** Four candidates: one spec-version lag, two gossip-limit omissions and one retained Engine-adapter bound. No client/node execution, network simulation or runtime reproduction. Only Gloas-specific deviations are detailed.

## Pins and versions

| Repository | Branch / tag | Exact commit |
|---|---|---|
| grandinetech/grandine | develop | `52cd677117b5d93bf477fe4843148070b0303444` |
| ethereum/consensus-specs | master | `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2` |
| ethereum/consensus-specs | v1.7.0-beta.4 | `aa16bb4c156184e9548a997d53efaf2a228a6304` |
| status-im/nimbus-eth2 | stable | `0abc0dd0fc0750a8875c49089d074f7d7197b62c` |
| ethereum/EIPs | master | `d4c575521d99ec881a444ab3af604e684b5f0743` |
| ethereum/execution-specs | forks/amsterdam | `16898000911c1e3caa57be08509536c10ae92d3e` |

Head APIs: [Grandine develop](https://api.github.com/repos/grandinetech/grandine/commits/develop), [consensus-specs master](https://api.github.com/repos/ethereum/consensus-specs/commits/master) and [Nimbus stable](https://api.github.com/repos/status-im/nimbus-eth2/commits/stable). Grandine code was read through **raw.githubusercontent.com**, not GitHub HTML.

**Exact scheduled core list:** [meta-EIP-7773#L21-L40][r1] lists **2780, 7688, 7708, 7732, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8045, 8061, 8246, 8282**. Each EIP's current text version is `EIPS/eip-N.md` at the EIPs commit above ([pinned files](https://github.com/ethereum/EIPs/tree/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS)); All 18 front matters were read; versions are commit snapshots. The union of [Amsterdam's 14 core entries][r20] and [Gloas's core entries][r21] agrees. [Meta EIP](https://eips.ethereum.org/EIPS/eip-7773) separately lists networking 7975/8070/8136/8159/8189 and informational 7904/8261.

| Reviewed text | Current status | EIP revision explicitly targeted by pinned CL spec |
|---|---|---|
| [8282](https://eips.ethereum.org/EIPS/eip-8282) | Last Call | `de4c6f02c7bec4686762c55f8ab6abcf97a77d7d` |
| [7688](https://eips.ethereum.org/EIPS/eip-7688) | Review | `f2e6d7fb01194d590e16fcdcae8061d06cf1a7f1` |
| [8045](https://eips.ethereum.org/EIPS/eip-8045) | Last Call | `414a8404198c5afaa3cfed10a385a9aae1dfaae3` |
| [8061](https://eips.ethereum.org/EIPS/eip-8061) | Last Call | `01f15c37c64114c478cb1136e0a6966084e4db14` |

Grandine's [scripts/download_spec_tests.sh#L1-L7][r22] defaults to `SPEC_VERSION="${SPEC_VERSION:-v1.7.0-beta.4}"`, and its onboarding matches beta.4. 

Compared beta.4/master for Gloas beacon-chain.md, validator.md, p2p-interface.md, weak-subjectivity.md and fork.md: only fork.md has a behavioral delta, [#5736, closed/merged 26 October](https://github.com/ethereum/consensus-specs/pull/5736); beacon-chain.md also fixes a docstring EIP number. The other three are identical. Beta.4 baseline: [specs/gloas/fork.md#L59-L119][r23].

## Candidates

### C1 — EIP-8282: builder onboarding spec-version lag

1. **Spec quote:** “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.” [specs/gloas/fork.md#L65-L119][r24].
2. **Grandine quote:** [helper_functions/src/fork.rs#L1051-L1094][r25] tops up under `if let Some(builder_index) = builder_indices.get(&pubkey)`, before its credential gate. It preserves deposits under `if is_for_validator[index]` and `if pending_validator_pubkeys.contains(&pubkey)`. The upgrade calls this path at [helper_functions/src/fork.rs#L928-L945][r26].
3. **Condition/result:** A valid pending B0 registration at the fork uses an existing validator's key, or follows a valid pending validator deposit with that key: master creates a builder, Grandine keeps the registration pending. Alternatively, a valid registration followed by a non-B0 deposit with the same key: Grandine credits the builder, master keeps that later deposit queued. Registry/balances/queue and upgrade state root differ.
4. **Nimbus:** [beacon_chain/spec/beaconstate.nim#L2360-L2405][r27] agrees with **Grandine/beta.4**: `if is_pending_validator(deposit.pubkey):` retains the deposit; the existing-builder branch unconditionally adds its amount.
5. **Confidence/disproof:** **High against master; no defect against beta.4.** Diffed both specifications, checked the initially empty builder registry and updated key map, and separated one-time onboarding from post-fork request processing. Caching cannot change the routing. Nimbus's agreement is shared lag.
6. **Severity:** **Consensus split** if participants apply different upgrade specifications; no deployed split demonstrated.

**Known:** specification change [#5736 closed/merged](https://github.com/ethereum/consensus-specs/pull/5736); exact Grandine lag **not found** (queries in K1 below). [#860 closed](https://github.com/grandinetech/grandine/issues/860) concerns caching/testing, not adoption of the new routing.

### C2 — EIPs 7688/8282: excessive builder requests pass envelope gossip

1. **Spec quote:** `if len(execution_requests.builder_exits) > MAX_BUILDER_EXIT_REQUESTS_PER_PAYLOAD:` then `raise GossipReject("too many builder exit requests")`; analogous builder-deposit limit: [specs/gloas/p2p-interface.md#L509-L528][r28]. Envelope validation calls `verify_execution_requests_limits(envelope.execution_requests)`: [specs/gloas/p2p-interface.md#L866-L879][r29].
2. **Grandine quote:** [fork_choice_store/src/store.rs#L4174-L4256][r30] checks root/metadata/signature, calls `execution_engine.notify_new_payload(beacon_block_root, payload, params, None)?;`, then returns `Ok(ExecutionPayloadEnvelopeAction::Accept(envelope))`, with no request-count check. The real engine only queues work and returns `Ok(())`: [eth1_api/src/eth1_execution_engine.rs#L76-L92][r32]. The mutator sends `P2pMessage::Accept(gossip_id)`: [fork_choice_control/src/mutator.rs#L2307-L2318][r33].
3. **Condition/result:** A known valid beacon block commits to an otherwise matching, correctly signed envelope with **17 builder exits** or **65 builder deposits**, within byte bounds. Required state/data are available and all other metadata/expected-withdrawal checks pass. Spec: gossip Reject. Grandine: Accept. 
4. **Nimbus:** [beacon_chain/gossip_processing/gossip_validation.nim#L909-L917][r34] agrees with spec: `if reqs.builder_exits.lenu64 > MAX_BUILDER_EXIT_REQUESTS_PER_PAYLOAD:` returns `dag.checkedReject("ExecutionPayload: too many builder exit requests")`.
5. **Confidence/disproof:** **High, static only.** Progressive request lists ([types/src/gloas/containers.rs#L297-L308][r31]) and their decoder do not enforce 64/16. Traced the async engine boundary. However, [transition_functions/src/gloas/block_processing.rs#L759-L787][r35] enforces counts when applying parent requests: this **disproves invalid-state acceptance** from this omission. Later Engine handling does not supply the required prior gossip verdict.
6. **Severity:** **Invalid block accepted**, limited to **envelope gossip acceptance**; no consensus import or lasting fork-choice divergence established.

**Not found** for the exact path (K2). Broad unlimited-container risk is **known**, [#918 open](https://github.com/grandinetech/grandine/issues/918). [#997 closed/merged](https://github.com/grandinetech/grandine/pull/997) adds network byte bounds, not these small per-list counts.

### C3 — EIP-7688: API gossip-only validation omits block counts

1. **Spec quote:** `if len(body.payload_attestations) > MAX_PAYLOAD_ATTESTATIONS:` then `raise GossipReject("too many payload attestations")`, [specs/gloas/p2p-interface.md#L470-L501][r36]. Both body/parent-request limits are required at [specs/gloas/p2p-interface.md#L597-L603][r37]. The Beacon API says failed selected validation “MUST NOT be broadcast to the network”: [apis/beacon/blocks/blocks.v2.yaml#L19-L37][r38].
2. **Grandine quote:** [transition_functions/src/gloas/block_processing.rs#L116-L136][r39] calls `unphased::process_block_header_for_gossip(config, state, &block.message)?;`, verifies the proposer signature, then `Ok(())`; no counts. [fork_choice_control/src/block_processor.rs#L192-L225][r40] uses this path. [http_api/src/standard.rs#L5083-L5101][r87] handles `Ok(Some(ValidationOutcome::Accept))` by publishing; [http_api/src/standard.rs#L5273-L5288][r88] places this before full validation.
   Gloas dispatch: [http_api/src/standard.rs#L2043-L2058][r89].
3. **Condition/result:** API publication with gossip validation of a small, current-slot Gloas block, known parent, correct unslashed proposer and valid proposer signature, but **five payload attestations** (limit four). Grandine publishes; the specified gossip/API rules require rejection without publication.
4. **Nimbus:** [beacon_chain/gossip_processing/gossip_validation.nim#L608-L641][r43] agrees with spec: `if blck.body.payload_attestations.lenu64 > MAX_PAYLOAD_ATTESTATIONS:` returns `dag.checkedReject("BeaconBlock: too many payload attestations")`.
5. **Confidence/disproof:** **High, static only.** Traced the dedicated API gossip path, not ordinary peer block import. Progressive decoding admits the count. Full processing later rejects it at [transition_functions/src/gloas/block_processing.rs#L920-L960][r44], but cannot undo prior publication.
6. **Severity:** **Invalid block accepted**, specifically **gossip publication**, not demonstrated state-transition acceptance.

**Not found** for this exact omission (K3); [#918 open](https://github.com/grandinetech/grandine/issues/918) is related general risk.

### C4 — EIP-7688: old validator-deposit bound survives in Engine bridge

1. **Spec quote:** `class DepositRequests(ProgressiveList[DepositRequest]):`, [specs/gloas/beacon-chain.md#L272-L280][r45]; encoding emits `request_type + ssz_serialize(request_data)` for nonempty lists, [specs/gloas/beacon-chain.md#L2126-L2141][r46]. Runtime limits cover the other four request lists, not validator deposits: [specs/gloas/beacon-chain.md#L1784-L1795][r47].
2. **Grandine quote:** [execution_engine/src/types.rs#L1094-L1099][r48] stores `ContiguousList<DepositRequest, P::MaxDepositRequestsPerPayload>`; [types/src/preset.rs#L411-L433][r49] defines `type MaxDepositRequestsPerPayload = U8192;`. Gloas calls `narrow_list(deposits)?`: [execution_engine/src/types.rs#L1351-L1374][r50], checked by [execution_engine/src/types.rs#L1398-L1404][r51]. This runs before newPayloadV5 at [eth1_api/src/eth1_api/http_api.rs#L339-L363][r52]; reverse Engine decoding uses the same bound at [execution_engine/src/types.rs#L1178-L1217][r53].
3. **Condition/result:** A legal Gloas payload yields **8,193 validator deposits**, with sufficient legal gas and within transport/block-size bounds. Spec forwards all records; Grandine fails local Engine encoding/decoding. **Conditional witness:** no transaction set proving reachability at a particular devnet's gas schedule was constructed.
4. **Nimbus:** [beacon_chain/el/engine_api_conversions.nim#L312-L331][r54] emits `SSZ.encode(execution_requests.deposits)`, agreeing with the encoder spec. But [beacon_chain/gossip_processing/gossip_validation.nim#L900-L913][r55] separately rejects `reqs.deposits.lenu64 > MAX_DEPOSIT_REQUESTS_PER_PAYLOAD`: a shared extra rejection at another boundary, not disproof.
5. **Confidence/disproof:** **Medium overall; high for the narrowing failure.** EL parsing concatenates all matching deposit logs ([src/ethereum/forks/amsterdam/requests.py#L274-L304][r56]); the inherited Engine request grammar adds no 8,192 record cap ([src/engine/prague.md#L27-L54][r58]). Legal-payload feasibility under deployed gas/size settings remains unproved. [eth1_api/src/execution_service.rs#L120-L145][r59] logs a local error; this does not prove an EL INVALID verdict.
6. **Severity:** **Valid block rejected**, conditional on that witness, at the **local Engine bridge**. No observed head divergence or split claimed.

**Not found** for this path (K4). [#968 closed/merged](https://github.com/grandinetech/grandine/pull/968) fixes bounded copying at state API endpoints, not the Engine adapter.

## Rules checked and found consistent

Static agreement; named spec functions are in pinned Gloas beacon-chain.md.

| Rule | Grandine evidence / result |
|---|---|
| 8282: prefix, registration, top-up | [transition_functions/src/gloas/execution_payload_processing.rs#L54-L145][r60] checks prefix before both paths; requires a signature only for registration; resets an exited builder's withdrawability only at **zero balance**, without reactivation. [types/src/gloas/consts.rs#L83-L106][r61]: prefix B0, version 0, deposit domain 0E000000. Matches [process_builder_deposit_request / exit][r62]. |
| 8282: signature and exit authorization | [helper_functions/src/predicates.rs#L610-L632][r63] verifies pubkey/credentials/amount; [helper_functions/src/signing.rs#L547-L551][r64] selects the builder domain. Handler above requires active builder, matching source address and zero pending balance. [helper_functions/src/accessors.rs#L1069-L1090][r65] sums queued withdrawals and pending payments. |
| 8282: reuse and delay | [helper_functions/src/gloas.rs#L123-L190][r66] reuses the first zero-balance withdrawable index, initializes builder fields and sets exit epoch to current epoch plus delay. Matches registry/exit helpers. |
| 8282: encoding | [execution_engine/src/types.rs#L75-L95][r67] assigns 03/04; [execution_engine/src/types.rs#L1116-L1164][r68] emits ordered, nonempty SSZ records. C4's decoder rejects empty/duplicate/out-of-order types. [types/src/gloas/containers.rs#L139-L154][r69] has correct field order and 184/68-byte records. See C4. |
| 8282/7688: requests root | [transition_functions/src/gloas/block_processing.rs#L728-L756][r70] compares the progressive SSZ root with the parent bid; empty parent requires empty requests. C2 shows envelope-root matching. CL SSZ root and EL requests hash are distinct; typed bytes are passed to EL validation. |
| 7688: state-transition limits | C2/C3 state-transition excerpts enforce request/body counts, including zero legacy deposits and four payload attestations; validator deposit requests have no cap. Gossip exceptions are C2/C3. |
| 7688: progressive containers | Requests have five active fields (C2); [types/src/gloas/beacon_state.rs#L30-L134][r71] has 46 and progressive state lists. [ssz_derive/src/ssz_type.rs#L207-L239][r72] enforces 1–256 positions, final active bit, matching active/field counts, per [EIP-7495](https://eips.ethereum.org/EIPS/eip-7495). |
| 7688: Merkle rules | [ssz/src/merkle_tree.rs#L327-L405][r73] has zero empty root and 1/4/16/... subtree capacities. [ssz/src/progressive_list.rs#L139-L153][r74] handles basic packing/composite roots and length mix-in; [ssz_derive/src/ssz_type.rs#L531-L563][r75] handles inactive zeros/active bitmap, per [EIP-7916](https://eips.ethereum.org/EIPS/eip-7916)/7495. Empty/subtree boundaries traced, not executed. |
| 8045: selection | [helper_functions/src/accessors.rs#L1093-L1112][r76] removes slashed active validators only post-Gloas. [helper_functions/src/misc.rs#L911-L989][r77] uses per-slot seed, 16-bit little-endian samples and inclusive weighted threshold. Matches proposer-index helpers. |
| 8045: pre-fork lookahead | [helper_functions/src/fork.rs#L919-L945][r78] preserves lookahead, as [specs/gloas/fork.md#L188-L199][r79] requires. Previously computed duties are not retroactively recomputed: not a missing-filter bug. |
| 8061: separate churn | [helper_functions/src/accessors.rs#L1022-L1054][r80]: activation quotient 32768, minimum floor and 256 ETH cap; exit same quotient/floor without cap; consolidation quotient 65536 without floor; all rounded to balance increment. [transition_functions/src/gloas/epoch_processing.rs#L110-L184][r81] correctly consumes activation churn/carry and handles exited/withdrawn deposits. |
| 8061: exit accounting / retention | [helper_functions/src/mutators.rs#L168-L209][r82] selects Gloas exit churn, retains current-epoch credit, refreshes on epoch advance and uses ceiling division for excess; exact fit does not advance. [types/src/config.rs#L1180-L1200][r83] matches the Gloas p2p retention formula: **14,299 epochs** with standard parameters. |

**WSP not certified:** read [specs/gloas/weak-subjectivity.md#L31-L47][r84] (two-thirds exit + one-third activation + consolidation churn). No Grandine Rust implementation located using `subjectiv|compute_weak|WEAK_SUBJECTIVITY|WS_PERIOD`; absence alone is not a wrong-result witness. No Gloas-only candidate asserted.

Progressive deserialization delegates to its generic list ([ssz/src/progressive_list.rs#L117-L130][r85]); removed schema capacities were not assumed to survive. EIP-8282's abbreviated “credentials ignored” top-up prose is less precise than its delegated CL state machine's explicit prefix gate; this review follows the latter.

## Known-check log and public results

GitHub issues API searches used `repo:grandinetech/grandine TERM`, **without state/type filters**: open/closed issues and PRs. Common queries for every candidate: its EIP number(s), `gloas`, `epbs`. [Reproducible API example](https://api.github.com/search/issues?q=repo%3Agrandinetech%2Fgrandine+gloas&per_page=100&page=1); substitute the literal terms below. Both `gloas` pages were read. Search counts: 8282=1, 7688=1, 8045=2, 8061=0, gloas=118, epbs=19, progressive=3.

| Check | Additional literal terms / disposition |
|---|---|
| K1 / C1 | `onboard_builders`, `onboard_builders_from_pending_deposits`, `5736`, `onboarding`: exact lag not found; known spec PR and related #860 identified above. |
| K2 / C2 | `verify_execution_requests_limits`, `builder_deposits`, `"gossip" "limit"`, `oversized`: exact omission not found; related #918/#997 above. |
| K3 / C3 | `verify_block_body_operation_limits`, `process_block_for_gossip`, `"broadcast_validation"`: zero exact-rule hits; related #918. |
| K4 / C4 | `RawExecutionRequests`, `MAX_DEPOSIT_REQUESTS_PER_PAYLOAD`, `"deposit" "limit"`: no matching Gloas Engine report; #968 addresses another boundary. |
| Other rules | `process_builder_deposit_request`, `process_builder_exit_request`, `get_beacon_proposer_indices`, `get_exit_churn_limit`, `weak_subjectivity`: zero hits. `min_epochs_for_block_requests` finds [#984 closed/merged](https://github.com/grandinetech/grandine/pull/984), fixed at this pin. |

Additional `8192` and `"payload" "count"` queries returned **HTTP 403 rate limit exceeded**, not negative results. 

**C1–C4 public-test cross-check: no matching current-pin result located.**

- [Hive discovery](https://hive.ethpandaops.io/discovery.json) lists `glamsterdam-quick`; its [listing](https://hive.ethpandaops.io/glamsterdam-quick/listing.jsonl) and the [older listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl) returned **HTTP 403**, preventing per-test inspection. [Run 40548729228](https://github.com/ethpandaops/hive-tests/actions/runs/40548729228) reports workflow success on 27 October, but tests Erigon/EELS, not Grandine. [.github/workflows/hive-glamsterdam-quick.yaml#L16-L29][r86] lists EL clients/consumers. Workflow success is not interpreted as every test passing.
- EEST/EELS [devnet v8.1.4](https://github.com/ethereum/execution-specs/releases/tag/tests-glamsterdam-devnet%40v8.1.4), [tests v21.0.0](https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.0), [v21.0.1](https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.1) are EL fixture/coverage records, not evidence of these CL cases passing.
- [Devnet-11 status](https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-11) uses older CL/EELS versions. The [devnet-8 deposit observation](https://gist.github.com/nflaig/c02c00714d07df076bed23200805d2d6) observed old onboarding semantics, not master #5736. 
- [Hoodi postponement](https://blog.ethereum.org/2026/10/22/glamsterdam-hoodi-delay) supersedes its earlier schedule and sets no mainnet activation date.

## URLs read

Pinned file links below were read via `https://raw.githubusercontent.com/OWNER/REPO/COMMIT/PATH` URLs. Required Gloas documents were read, including [specs/gloas/validator.md#L248-L318][r90] for request parsing. 

[r1]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L40
[r20]: https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/src/ethereum/forks/amsterdam/__init__.py#L7-L20
[r21]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L165-L185
[r22]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/scripts/download_spec_tests.sh#L1-L7
[r23]: https://github.com/ethereum/consensus-specs/blob/aa16bb4c156184e9548a997d53efaf2a228a6304/specs/gloas/fork.md#L59-L119
[r24]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L65-L119
[r25]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/fork.rs#L1051-L1094
[r26]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/fork.rs#L928-L945
[r27]: https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L2360-L2405
[r28]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L509-L528
[r29]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L866-L879
[r30]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_store/src/store.rs#L4174-L4256
[r31]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L297-L308
[r32]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/eth1_api/src/eth1_execution_engine.rs#L76-L92
[r33]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_control/src/mutator.rs#L2307-L2318
[r34]: https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/gossip_processing/gossip_validation.nim#L909-L917
[r35]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L759-L787
[r36]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L470-L501
[r37]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L597-L603
[r38]: https://github.com/ethereum/beacon-APIs/blob/bc3384f9cb1f02169d4fcb81e7da4da329b857ee/apis/beacon/blocks/blocks.v2.yaml#L19-L37
[r39]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L116-L136
[r40]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/fork_choice_control/src/block_processor.rs#L192-L225
[r43]: https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/gossip_processing/gossip_validation.nim#L608-L641
[r44]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L920-L960
[r45]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L272-L280
[r46]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2126-L2141
[r47]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1784-L1795
[r48]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L1094-L1099
[r49]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/preset.rs#L411-L433
[r50]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L1351-L1374
[r51]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L1398-L1404
[r52]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/eth1_api/src/eth1_api/http_api.rs#L339-L363
[r53]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L1178-L1217
[r54]: https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/el/engine_api_conversions.nim#L312-L331
[r55]: https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/gossip_processing/gossip_validation.nim#L900-L913
[r56]: https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/src/ethereum/forks/amsterdam/requests.py#L274-L304
[r58]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/prague.md#L27-L54
[r59]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/eth1_api/src/execution_service.rs#L120-L145
[r60]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/execution_payload_processing.rs#L54-L145
[r61]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/consts.rs#L83-L106
[r62]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2334-L2383
[r63]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/predicates.rs#L610-L632
[r64]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/signing.rs#L547-L551
[r65]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/accessors.rs#L1069-L1090
[r66]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/gloas.rs#L123-L190
[r67]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L75-L95
[r68]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/execution_engine/src/types.rs#L1116-L1164
[r69]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/containers.rs#L139-L154
[r70]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/block_processing.rs#L728-L756
[r71]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/gloas/beacon_state.rs#L30-L134
[r72]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/ssz_derive/src/ssz_type.rs#L207-L239
[r73]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/ssz/src/merkle_tree.rs#L327-L405
[r74]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/ssz/src/progressive_list.rs#L139-L153
[r75]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/ssz_derive/src/ssz_type.rs#L531-L563
[r76]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/accessors.rs#L1093-L1112
[r77]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/misc.rs#L911-L989
[r78]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/fork.rs#L919-L945
[r79]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L188-L199
[r80]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/accessors.rs#L1022-L1054
[r81]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/transition_functions/src/gloas/epoch_processing.rs#L110-L184
[r82]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/helper_functions/src/mutators.rs#L168-L209
[r83]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/types/src/config.rs#L1180-L1200
[r84]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/weak-subjectivity.md#L31-L47
[r85]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/ssz/src/progressive_list.rs#L117-L130
[r86]: https://github.com/ethpandaops/hive-tests/blob/13e902308ee426168240e24103162d63eaa873fa/.github/workflows/hive-glamsterdam-quick.yaml#L16-L29
[r87]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/http_api/src/standard.rs#L5083-L5101
[r88]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/http_api/src/standard.rs#L5273-L5288
[r89]: https://github.com/grandinetech/grandine/blob/52cd677117b5d93bf477fe4843148070b0303444/http_api/src/standard.rs#L2043-L2058
[r90]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/validator.md#L248-L318

