# Nimbus — Gloas spec-conformance review

Public-source review, snapshot 2026-10-27 UTC. **One disclosed candidate: spec-version lag in fork-time builder onboarding, present in both Nimbus pins and shared by Prysm.** It follows an already-public upstream specification correction. No additional Gloas-only divergence was established. Shared-live-code observations are withheld.

Scope: EIPs 8282/7688/8045/8061 in Nimbus, with Prysm comparison. Static review only: no builds, client execution or node/RPC queries. Nimbus code came from pinned raw.githubusercontent.com URLs; citations use pinned GitHub line anchors.

## Pins and specification versions

| Source / branch | Exact commit | Commit time UTC / acquisition |
|---|---|---|
| Nimbus **stable** | `0abc0dd0fc0750a8875c49089d074f7d7197b62c` | 2026-10-23 10:15:50; v26.10.2; [requested commits/stable API](https://api.github.com/repos/status-im/nimbus-eth2/commits/stable) |
| Nimbus **unstable** | `5babd698516450d8b8e60c2af610a5853baaa9a9` | 2026-10-27 18:31:24; [commits/unstable API](https://api.github.com/repos/status-im/nimbus-eth2/commits/unstable) |
| consensus-specs **master** | `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2` | 2026-10-27 16:28:12; [commits/master API](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| consensus-specs **v1.7.0-beta.4** | `aa16bb4c156184e9548a997d53efaf2a228a6304` | 2026-10-08 14:22:11; [tag resolution](https://api.github.com/repos/ethereum/consensus-specs/commits/v1.7.0-beta.4) |
| Prysm **develop** | `eb681c1d13b57c2d0c5da27a63bb41ac9d071e1a` | 2026-10-27 15:19:43; [commits/develop API](https://api.github.com/repos/OffchainLabs/prysm/commits/develop) |
| EIPs **master** | `d4c575521d99ec881a444ab3af604e684b5f0743` | 2026-10-27 16:04:29; [commits/master API](https://api.github.com/repos/ethereum/EIPs/commits/master) |
| execution-specs default **forks/bogota**, Amsterdam module | `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` | 2026-10-27 17:40:55; [branch API](https://api.github.com/repos/ethereum/execution-specs/commits/forks%2Fbogota) |
| Nimbus vendored SSZ library, both branches | `253a6e7e4516afafd4d8a5979fb8edd0bf5dc837` | Gitlink resolved from the [stable tree](https://api.github.com/repos/status-im/nimbus-eth2/git/trees/0abc0dd0fc0750a8875c49089d074f7d7197b62c?recursive=1) and [unstable tree](https://api.github.com/repos/status-im/nimbus-eth2/git/trees/5babd698516450d8b8e60c2af610a5853baaa9a9?recursive=1); sources read directly, no submodule installed |

**Scheduled set.** The pinned meta EIP lists exactly **2780, 7688, 7708, 7732, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8045, 8061, 8246, 8282** under “Scheduled for Inclusion”. Networking 7975/8070/8136/8159/8189 and informational 7904/8261 are listed separately. Source: [eip-7773.md#L21-L55](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L55). The Amsterdam implementation lists its fourteen EL EIPs, including 8282, at [__init__.py#L7-L20](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L7-L20). The Gloas introduction identifies the CL features and the precise EIP revisions it targets: [beacon-chain.md#L165-L186](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L165-L186). Other EIPs/clients are outside this item.

The EIPs pin identifies the current document snapshot; Gloas explicitly targets these EIP revisions (EIPs have no semantic-version number):

| EIP | Current public EIP / status | EIP revision explicitly referenced by Gloas master |
|---|---|---|
| 8282 | [Builder Execution Requests](https://eips.ethereum.org/EIPS/eip-8282), Last Call | `de4c6f02c7bec4686762c55f8ab6abcf97a77d7d` |
| 7688 | [Forward Compatible Consensus Data Structures](https://eips.ethereum.org/EIPS/eip-7688), Review | `f2e6d7fb01194d590e16fcdcae8061d06cf1a7f1` |
| 8045 | [Exclude Slashed Validators from Proposing](https://eips.ethereum.org/EIPS/eip-8045), Last Call | `414a8404198c5afaa3cfed10a385a9aae1dfaae3` |
| 8061 | [Increase Exit and Consolidation Churn](https://eips.ethereum.org/EIPS/eip-8061), Last Call | `01f15c37c64114c478cb1136e0a6966084e4db14` |

Compared with beta.4, validator, p2p-interface and weak-subjectivity are byte-identical; beacon-chain only corrects the docstring “EIP-7521” to “EIP-7251” at [beacon-chain.md#L1479-L1486](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1479-L1486). The normative difference is fork onboarding in [spec PR #5736](https://github.com/ethereum/consensus-specs/pull/5736), merged 2026-10-26. Only fork.md changes behavior.

Nimbus uses **v1.7.0-beta.4 reference vectors** by default: [download_test_vectors.sh#L11-L16](https://github.com/status-im/nim-eth2-scenarios/blob/621865385551fc9776a216c34ec2dc364f579e3a/download_test_vectors.sh#L11-L16), at the scenario gitlink in both Nimbus trees. [Nimbus PR #9246](https://github.com/status-im/nimbus-eth2/pull/9246) merged that vector update on October 9. Onboarding matches beta.4; reviewed post-fork builder handlers match both versions.

**Unstable differences:** the onboarding implementation, builder request handlers, proposer selection and SSZ dependency have identical Git blobs at the two pins. Gloas extra-data changes to the equally bounded `ByteList[MAX_EXTRA_DATA_BYTES]`: [gloas.nim#L121-L146](https://github.com/status-im/nimbus-eth2/blob/5babd698516450d8b8e60c2af610a5853baaa9a9/beacon_chain/spec/datatypes/gloas.nim#L121-L146). No fix for candidate N1 is present at [beaconstate.nim#L2360-L2405](https://github.com/status-im/nimbus-eth2/blob/5babd698516450d8b8e60c2af610a5853baaa9a9/beacon_chain/spec/beaconstate.nim#L2360-L2405). 

## Candidate N1 — EIP-8282 fork onboarding: spec-version lag

### 1. Specification, verbatim

At [fork.md#L65-L69](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L65-L69):

> A valid builder registration can use a validator's public key.

At [fork.md#L84-L88](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L84-L88):

```python
if not is_builder_withdrawal_credential(deposit.withdrawal_credentials):
    pending_deposits.append(deposit)
    continue
```

The subsequent registration and top-up paths are at [fork.md#L95-L119](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L95-L119). The gate precedes builder lookup; valid builder registrations are independent of the validator registry. Invalid registration signatures preserve eligible validator top-ups.

### 2. Nimbus implementation, pinned and quoted

[beaconstate.nim#L2360-L2384](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L2360-L2384) checks existing validators first and defers a registration if it finds an earlier valid pending validator:

```nim
if is_pending_validator(deposit.pubkey):
  pending_deposits.add(deposit)
  continue
```

[beaconstate.nim#L2395-L2402](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L2395-L2402) credits an existing builder without rechecking the credential prefix:

```nim
state.builders.mitem(opt_builder_index.get).balance += deposit.amount
```

The fork invokes this function at [beaconstate.nim#L3090-L3105](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L3090-L3105). Same code at the unstable pin cited above.

### 3. Conditions and differing results, in words

All cases occur during the one-time Fulu-to-Gloas upgrade, with the deposits still in the pending queue.

- A valid builder registration is followed by a non-builder-credential deposit for the same previously unregistered key. Nimbus credits both to the builder and removes both from the queue; master leaves the latter queued for validator processing.
- A valid builder-credential deposit uses an existing validator's key. Nimbus keeps it in the validator queue; master registers or tops up the independent builder.
- An earlier valid validator deposit is queued for a new key, followed by a valid builder registration for that key. Nimbus defers the latter; master creates the builder and preserves the validator deposit.

The resulting builder registry, balances, queue and state root differ. These cases share one version-lag cause.

### 4. Prysm comparison

Prysm agrees with Nimbus/beta.4, not master: [setters_gloas.go#L808-L839](https://github.com/OffchainLabs/prysm/blob/eb681c1d13b57c2d0c5da27a63bb41ac9d071e1a/beacon-chain/state/state-native/setters_gloas.go#L808-L839). It checks the validator registry first, credits an existing builder before the credential test, and suppresses registration when the pending-validator check succeeds. Representative quoted branch:

```go
if isExistingBuilder {
    if err := b.increaseBuilderBalance(builderIdx, deposit.Amount); err != nil {
```

The real fork path calls it: [upgrade.go#L120-L135](https://github.com/OffchainLabs/prysm/blob/eb681c1d13b57c2d0c5da27a63bb41ac9d071e1a/beacon-chain/core/gloas/upgrade.go#L120-L135). Prysm agreement does not establish master conformance.

### 5. Confidence and attempted disproof

**High** for static divergence; no executable reproduction.

- Compared the actual beta.4 algorithm at [fork.md#L75-L119](https://github.com/ethereum/consensus-specs/blob/aa16bb4c156184e9548a997d53efaf2a228a6304/specs/gloas/fork.md#L75-L119): Nimbus's routing matches that older baseline. This disproves labeling it a beta.4 implementation defect.
- Caller/caching checks did not reverse the result. Nimbus's [onboarding test#L68-L86](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/tests/consensus_spec/test_fixture_gloas_builder_onboarding.nim#L68-L86) explicitly expects beta.4 routing.
- Read master's regression cases: existing-validator key registration at [test_gloas_fork_onboard_builders.py#L390-L417](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/tests/core/pyspec/eth_consensus_specs/test/gloas/fork/test_gloas_fork_onboard_builders.py#L390-L417), and keeping a later non-builder deposit queued at [test_gloas_fork_onboard_builders.py#L460-L507](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/tests/core/pyspec/eth_consensus_specs/test/gloas/fork/test_gloas_fork_onboard_builders.py#L460-L507). These were read, not run.
- Checked unstable and Prysm; neither has the new routing. Deployment impact depends on the network's agreed spec revision and the pending deposits at activation.

### 6. Severity and known-check

**Severity: consensus split** if master and beta.4 implementations upgrade the same affected pre-state. No actual split was observed. Gloas activation is unscheduled on mainnet in [fork.md#L27-L30](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L27-L30).

**Known upstream:** [consensus-specs issue #5735](https://github.com/ethereum/consensus-specs/issues/5735), **closed**, and [PR #5736](https://github.com/ethereum/consensus-specs/pull/5736), **closed/merged**. The pinned Nimbus branches retain the publicly superseded routing.

**Nimbus-specific issue/PR: not found**; queries and Hive/EEST limitations are below.

## Rules checked and found correct on the reviewed paths

“Correct” means no discrepancy found in the stated static comparison. Spec references use master.

| Rule / boundary | Nimbus evidence and conclusion | Specification / comparison |
|---|---|---|
| 8282 credential gate, first registration and top-up | [state_transition_block.nim#L1122-L1144](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L1122-L1144): `0xB0` gate precedes lookup; new records use `PAYLOAD_BUILDER_VERSION = 0` ([constants.nim#L87-L102](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/datatypes/constants.nim#L87-L102)). | [beacon-chain.md#L2334-L2349](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2334-L2349); distinct from N1's fork-only path. |
| 8282 signature and domain | [signatures.nim#L222-L242](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/signatures.nim#L222-L242): signed deposit message includes key, credentials and amount under the dedicated builder-deposit domain. Top-ups bypass proof-of-possession. | [beacon-chain.md#L2270-L2284](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2270-L2284). |
| 8282 exited-builder top-up | [state_transition_block.nim#L1146-L1154](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L1146-L1154): reset deadline only when already exited and balance is zero, before crediting. Nonzero exited balance keeps its deadline; top-up does not reactivate or replace the registered address. | [beacon-chain.md#L2350-L2360](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2350-L2360). |
| 8282 reusable indices / cache | [beaconstate.nim#L2264-L2274](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L2264-L2274) and [validator_bucket_sort.nim#L67-L89](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/validator_bucket_sort.nim#L67-L89): reuse requires elapsed withdrawal epoch and zero balance; lookup checks added/replaced entries against their current public keys. | [beacon-chain.md#L2290-L2318](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2290-L2318). |
| 8282 exits | [state_transition_block.nim#L1157-L1175](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L1157-L1175) checks registration, active status, execution-address authorization and zero pending withdrawal balance before exit. | [beacon-chain.md#L2368-L2383](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2368-L2383). |
| 8282 execution encoding | [engine_api_conversions.nim#L310-L331](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/el/engine_api_conversions.nim#L310-L331) serializes lists in type order, adding type bytes 03/04 for builder requests and omitting empty lists. | [beacon-chain.md#L2126-L2141](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2126-L2141) and [EIP-8282 constants](https://eips.ethereum.org/EIPS/eip-8282#constants). |
| EL requests hash versus CL requests root | [helpers.nim#L449-L476](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/helpers.nim#L449-L476) hashes nonempty type-prefixed records in order for the EL. [state_transition_block.nim#L1404-L1409](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L1404-L1409) checks the separate SSZ root committed by the parent bid. | [EIP-7685](https://eips.ethereum.org/EIPS/eip-7685#block-header); [beacon-chain.md#L2123-L2141](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2123-L2141). These are intentionally different commitments. |
| 7688 block operation counts | [state_transition_block.nim#L754-L794](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L754-L794) rejects nonzero legacy deposits and excess operation counts during transition; [gossip_validation.nim#L625-L641](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/gossip_processing/gossip_validation.nim#L625-L641) applies gossip checks. | [beacon-chain.md#L2234-L2247](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L2234-L2247). |
| 7688/8282 request counts | [state_transition_block.nim#L1390-L1409](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_block.nim#L1390-L1409) checks withdrawals, consolidations, builder deposits and builder exits before applying parent requests. Builder maxima are 64 and 16 at [gloas_preset.nim#L23-L28](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/presets/mainnet/gloas_preset.nim#L23-L28). | [beacon-chain.md#L1792-L1795](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1792-L1795). |
| 7688 envelope gossip counts | [gossip_validation.nim#L901-L917](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/gossip_processing/gossip_validation.nim#L901-L917) limits execution requests and withdrawals; validator deposits remain unbounded here. | [p2p-interface.md#L504-L530](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L504-L530) and [p2p-interface.md#L870-L875](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L870-L875). |
| 7688 progressive type layout | [gloas.nim#L121-L182](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/datatypes/gloas.nim#L121-L182), [gloas.nim#L231-L300](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/datatypes/gloas.nim#L231-L300), [gloas.nim#L340-L454](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/datatypes/gloas.nim#L340-L454), [gloas.nim#L525-L559](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/datatypes/gloas.nim#L525-L559): reviewed progressive containers have matching field order; registry/queues and payload lists use progressive representations. | [beacon-chain.md#L718-L981](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L718-L981) and [EIP-7688 converted types](https://eips.ethereum.org/EIPS/eip-7688#converted-types). Ten container field lists were compared textually. |
| 7688 container bounds / decoding | [types.nim#L47-L59](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/types.nim#L47-L59) checks active-field count/bitmap legality, including the 256-field cap. [codec.nim#L127-L173](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/codec.nim#L127-L173), [codec.nim#L189-L279](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/codec.nim#L189-L279), [codec.nim#L287-L347](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/codec.nim#L287-L347) validate list alignment, termination and container offsets. | [EIP-7495](https://eips.ethereum.org/EIPS/eip-7495) and [EIP-7916](https://eips.ethereum.org/EIPS/eip-7916). Progressive lists have no schema capacity; operation limits belong to transition/gossip rules. |
| 7688 Merkle structure | [merkleization.nim#L1000-L1040](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/merkleization.nim#L1000-L1040), [merkleization.nim#L1058-L1079](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/merkleization.nim#L1058-L1079), [merkleization.nim#L1246-L1268](https://github.com/status-im/nim-ssz-serialization/blob/253a6e7e4516afafd4d8a5979fb8edd0bf5dc837/ssz_serialization/merkleization.nim#L1246-L1268) implement progressive subtrees, length mixing, empty-list roots and the active-field bitmap mix-in. | [EIP-7916 Merkleization](https://eips.ethereum.org/EIPS/eip-7916#merkleization), [EIP-7495 Merkleization](https://eips.ethereum.org/EIPS/eip-7495#merkleization). No runtime hash-vector test was run. |
| 7688 network bounds | [eth2_network.nim#L873-L927](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/networking/eth2_network.nim#L873-L927) retains message bounds for progressive aggregates, slashings, bids and columns, independently of unbounded list schemas. | [p2p-interface.md#L65-L78](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L65-L78); numeric constants at [gloas_preset.nim#L35-L42](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/presets/mainnet/gloas_preset.nim#L35-L42). |
| 8045 selection | [validator.nim#L565-L583](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/validator.nim#L565-L583) filters slashed validators before sampling, preserving candidate order. | [beacon-chain.md#L1287-L1305](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1287-L1305). |
| 8045 transition lookahead | [beaconstate.nim#L3090-L3096](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L3090-L3096) copies the pre-fork lookahead. [state_transition_epoch.nim#L1363-L1383](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_epoch.nim#L1363-L1383) replaces only the newly calculated last epoch. | [fork.md#L183-L193](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L183-L193); the explicit carry-over test is [test_gloas_fork_proposer_lookahead.py#L36-L53](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/tests/core/pyspec/eth_consensus_specs/test/gloas/fork/test_gloas_fork_proposer_lookahead.py#L36-L53). Slashed entries already scheduled before the fork are expected. |
| 8061 separate churn | [beaconstate.nim#L308-L352](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L308-L352): activation capped after rounding; exit uncapped; consolidation independently divided and rounded, with no activation subtraction. Config uses 32768, 65536 and 256 ETH at [presets.nim#L429-L435](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/presets.nim#L429-L435). | [beacon-chain.md#L1445-L1486](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1445-L1486); [EIP-8061 churn computations](https://eips.ethereum.org/EIPS/eip-8061#churn-computations). |
| 8061 exit accounting | [beaconstate.nim#L356-L389](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/beaconstate.nim#L356-L389) selects Gloas exit churn. Exact-fit balance consumes the current allowance; one-over spills with ceiling division; remaining allowance and earliest epoch are updated. | [beacon-chain.md#L1495-L1518](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1495-L1518). Static boundary tracing covered a stale earliest epoch, exact fit and spillover. |
| 8061 activation consumption | [state_transition_epoch.nim#L1228-L1234](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_epoch.nim#L1228-L1234) uses activation churn; [state_transition_epoch.nim#L1286-L1317](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/state_transition_epoch.nim#L1286-L1317) carries allowance only after churn exhaustion. | [beacon-chain.md#L1663-L1714](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1663-L1714). |
| 8061 block-serving horizon | Mainnet default remains 33024 epochs at [presets.nim#L389-L393](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/spec/presets.nim#L389-L393); the by-head handler uses that range at [sync_protocol.nim#L353-L373](https://github.com/status-im/nimbus-eth2/blob/0abc0dd0fc0750a8875c49089d074f7d7197b62c/beacon_chain/sync/sync_protocol.nim#L353-L373). This is conservative over-retention, not evidence of failing the minimum. | [p2p-interface.md#L246-L263](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L246-L263) yields **14299** with mainnet parameters. A minimum is not a maximum; no validity divergence established from the larger value. |

Shared-live-code reporting, per the assignment's restriction:

- Nimbus — EIP-7688 — affects live code, details withheld
- Nimbus — EIP-8061 — affects live code, details withheld

## Known-check and public test-result review

Queries used `repo:status-im/nimbus-eth2`, including open/closed issues and PRs. Unrelated PR-number matches were excluded.

| N1 search terms / results | Assessment |
|---|---|
| `8282` (2 results), `gloas` (247 results, all three pages), `epbs` (32 results), `onboard_builders_from_pending_deposits` (1), `process_builder_deposit_request` (0) | No matching Nimbus report for the new master routing found. [API search example](https://api.github.com/search/issues?q=repo%3Astatus-im%2Fnimbus-eth2%20onboard_builders_from_pending_deposits&per_page=100). |
| `"builder" "credential"` (2), `"onboarding"` (4), `5736` (1 unrelated PR) | No matching Nimbus issue/PR found. [Credential query](https://api.github.com/search/issues?q=repo%3Astatus-im%2Fnimbus-eth2%20%22builder%22%20%22credential%22&per_page=100). |
| [Nimbus #8965](https://github.com/status-im/nimbus-eth2/pull/8965), closed/merged; [#9137](https://github.com/status-im/nimbus-eth2/pull/9137), closed | Patches fix lookup/complexity, not #5736 routing. |
| [Spec #5735](https://github.com/ethereum/consensus-specs/issues/5735), closed; [spec #5736](https://github.com/ethereum/consensus-specs/pull/5736), closed/merged | **Known upstream**, with the cause and changed rules documented publicly. |

Additional rule searches: `7688` (9), `8045` (2), `8061` (2), `progressive` (9), `process_builder_exit_request` (0), `get_beacon_proposer_indices` (2), `"churn"` (36), `"compute_min_epochs_for_block_requests"` (1). Extra N1 queries: `is_pending_validator` (2), `"gloas" "builder" "validator"` (15); no matching Nimbus report found. The `"v1.7.0-beta.4"` query (3) found #9246 above.

**Hive:** [ethdevops results](https://hive-results.ethdevops.io/) could not be read: the web tool returned an access error, and direct retrieval was blocked by the environment's address policy. [EthPandaOps Hive](https://hive.ethpandaops.io/) returned no readable listing through the web tool and HTTP 403 through direct retrieval. Public searches for Nimbus/Glamsterdam/Hive did not produce a result attributable to N1. Therefore the Hive known-check is **incomplete**, not a pass and not proof of novelty.

**Execution-spec-tests:** reviewed public releases [devnet v8.1.4](https://github.com/ethereum/execution-specs/releases/tag/tests-glamsterdam-devnet%40v8.1.4), [v21.0.0](https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.0) and [v21.0.2](https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.2). They describe Amsterdam fixtures, coverage and Hive tooling; no Nimbus N1 result was found. EL fixture availability does not establish CL fork-upgrade conformance. The relevant CL regression tests are cited under N1 and were not run. **Outcome: no matching public result found, not a pass.**

## URLs read / reproducibility

Links give full paths and line ranges at immutable pins; source bytes came from raw.githubusercontent.com.

URLs read: all cited source files, EIP pages, pin/tree/search APIs and issue/PR records; the five Gloas documents also at beta.4; [execution-specs releases API](https://api.github.com/repos/ethereum/execution-specs/releases?per_page=100). Additional required references:

- [specs/gloas/validator.md#L1-L12](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/validator.md#L1-L12)
- [specs/gloas/weak-subjectivity.md#L14-L22](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/weak-subjectivity.md#L14-L22)

Deliverable checks cover source/line consistency, Markdown text, path and byte size. No behavioral result is implied.

