# Teku — EIP-7732 ePBS fork choice and networking

2026-10-27 public-source static review. **Five candidates: three known open items, two unmatched discrepancies.** No node execution or runtime reproduction. Findings concern Gloas; shared live-code details are withheld.

## Pins and baseline

| Source | Branch/version; exact commit | Pin source |
|---|---|---|
| Teku | `master`; `2c35574b3373cbe8ad121a768d98f066aec05b73`, committer date 2026-10-27 16:51:17 UTC | [Requested API endpoint](https://api.github.com/repos/Consensys-Incorporated/teku/commits/master) |
| Consensus specs | `master`; `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`, 2026-10-27 16:28:12 UTC | [commits/master](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| Lighthouse | `stable`; `a376defa30470923556d91bdeb15a802e297f31f`, 2026-10-22 23:27:50 UTC | [commits/stable](https://api.github.com/repos/sigp/lighthouse/commits/stable) |
| Released CL baseline | `v1.7.0-beta.4`; `aa16bb4c156184e9548a997d53efaf2a228a6304` | [Tag commit](https://api.github.com/repos/ethereum/consensus-specs/commits/v1.7.0-beta.4), [release](https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-beta.4) |
| Execution specs, inventory only | `forks/amsterdam`; `16898000911c1e3caa57be08509536c10ae92d3e` | [Branch pin](https://api.github.com/repos/ethereum/execution-specs/commits/forks/amsterdam), [Amsterdam inventory#L1-L43](https://github.com/ethereum/execution-specs/blob/16898000911c1e3caa57be08509536c10ae92d3e/src/ethereum/forks/amsterdam/__init__.py#L1-L43) |

Teku code was read/verified via `raw.githubusercontent.com/Consensys-Incorporated/teku/<pin>/<path>`, not GitHub HTML. URLs carry pinned paths/lines; labels abbreviate filenames. `Consensys/teku` redirects here.

The [Glamsterdam meta EIP-7773](https://eips.ethereum.org/EIPS/eip-7773#eips-scheduled-for-inclusion), retrieved on the review date, lists scheduled core EIPs **2780, 7688, 7708, 7732, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8045, 8061, 8246, 8282**; separately networking **7975, 8070, 8136, 8159, 8189**, informational **7904, 8261**. EL snapshot above lists Amsterdam changes; [beacon-chain.md#L165-L186](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L165-L186) records Gloas's targeted EIP revisions. EIP-7732 revision: `c36a2e58a4496ed21bef6b1c97505b03fd159f0a`. The public [EIP-7732](https://eips.ethereum.org/EIPS/eip-7732) is Last Call, deadline 2026-11-01.

Normative files at the spec pin: [specs/gloas/fork-choice.md](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md) (**FC**), [specs/gloas/p2p-interface.md](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md) (**P2P**), [specs/gloas/validator.md](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/validator.md) (**V**). Table shorthand means these pinned paths/line intervals.

These files are byte-identical in beta.4 and master. Teku's default reference-test target is **beta.4**: [build.gradle#L528-L532](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/build.gradle#L528-L532). The substantive Gloas upgrade difference is [spec PR 5736](https://github.com/ethereum/consensus-specs/pull/5736), merged 2026-10-26. [Comparison](https://api.github.com/repos/ethereum/consensus-specs/compare/v1.7.0-beta.4...8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2) includes non-Gloas changes and a Gloas typo; fork.md-only means substantive Gloas behavior.

## C1 — Spec-version lag: onboarding routes by pubkey before credentials

1. **Spec, verbatim:** “A valid builder registration can use a validator's public key.” [specs/gloas/fork.md#L65-L69](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L65-L69). [fork.md#L83-L119](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L83-L119) tests credentials first; a valid builder deposit may register despite a matching validator, while non-builder deposits remain queued.
2. **Teku, quoted:** [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): `if (validatorsUtil.getValidatorIndex(state, pubkey).isPresent())` leads to `pendingDeposits.add(deposit);` and `continue;`. Builder lookup/top-up also precedes the credential test. `pendingValidators.isPendingValidator(pubkey)` prevents registration before checking the builder deposit's signature.
3. **Condition:** At Gloas transition, a valid builder deposit uses an existing/pending validator's key: master registers the builder, Teku queues it. A non-builder deposit following a same-key builder registration tops up the builder in Teku but stays queued in master. Upgrade state roots differ.
4. **Lighthouse:** [gloas.rs#L258-L303](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/consensus/state_processing/src/upgrade/gloas.rs#L258-L303) likewise checks existing/pending validators first and tops up existing builders without checking credentials. **Agrees with Teku/beta.4, differs from master.**
5. **High confidence; disproof:** Checked complete routing/signature/top-up guards. Behavior matches beta.4: **spec-version lag**, not a beta.4 failure. Fix unmerged; reported vector checks not repeated.
6. **Severity: consensus split** on mixed-version transition replay with affected deposits; occurrence on deployed testnets unverified. **Known:** [Teku PR 11582](https://github.com/Consensys-Incorporated/teku/pull/11582), **open/unmerged**; spec PR 5736 **closed/merged**. Teku all-state queries: `7732`, `gloas`, `epbs`, `5736`, `onboard builders`.

## C2 — Gloas proposer-boost equivocation suppression missing

1. **Spec, verbatim:** `return len(equivocations) == 0`. [specs/gloas/fork-choice.md#L531-L561](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L531-L561) suppresses boost for a weak immediately preceding parent when an early same-proposer conflicting block exists. FC#L567-L589 uses this predicate in weight calculation.
2. **Teku, quoted:** [ForkChoiceUtilGloas.java#L335-L365](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/util/ForkChoiceUtilGloas.java#L335-L365) ends `return true;` with the equivocation branch deferred. Active [ForkChoiceStrategy.java#L147-L166](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/protoarray/ForkChoiceStrategy.java#L147-L166) resolves the boost node and passes `proposerBoostAmount` into delta computation. `shouldApplyProposerBoost` has only definitions/test calls, no production call: active scoring lacks the gate.
3. **Condition:** Two valid previous-slot blocks share a proposer; the conflict was PTC-timely and the selected parent is weak. A timely current-slot child receives boost. A competitor's unboosted advantage is smaller than boost: spec suppresses it and can choose the competitor; Teku retains it and can choose the child. Imported conflicts suffice.
4. **Lighthouse:** [proto_array.rs#L853-L883](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/consensus/proto_array/src/proto_array.rs#L853-L883) suppresses boost on a PTC-timely same-slot/same-proposer conflict. **Agrees with spec** here. Choose no attester equivocators so Lighthouse's separate weakness approximation does not affect this comparison.
5. **High confidence; disproof:** Traced timeliness, model and scoring for an alternate suppression path; none found. PR 11041 is **closed/unmerged**, not a fix at this pin. Finding concerns Gloas suppression only.
6. **Severity: fork-choice divergence. Known:** [10608](https://github.com/Consensys-Incorporated/teku/issues/10608) and [11020](https://github.com/Consensys-Incorporated/teku/issues/11020), **open**; [PR 11041](https://github.com/Consensys-Incorporated/teku/pull/11041), **closed/unmerged**. Queries: common EIP/fork terms plus `should_apply_proposer_boost`, `proposer equivocation`, `proposer_equivocation`, all states.

## C3 — Payload-attestation gossip uses the referenced branch's PTC

1. **Spec, verbatim:** `state = store.block_states[get_head(store).root]`. [specs/gloas/p2p-interface.md#L926-L945](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L926-L945) uses that head state for membership/signature checks. Fork choice separately uses referenced state.
2. **Teku, quoted:** [PayloadAttestationMessageGossipValidator.java#L156-L198](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/payloadattestation/PayloadAttestationMessageGossipValidator.java#L156-L198) loads `.getStateAtBlockRoot(data.getBeaconBlockRoot())`, passes that state to `calculatePayloadTimelinessCommitteePositions`, and rejects empty membership. It never selects the head state here.
3. **Condition:** Two validated branches have different current-slot PTCs. Head is on one; the message names a same-slot block on the other. A signed message from a referenced-branch-only member passes Teku but fails spec; head-only membership reverses this. Divergence must predate selection inputs. State-dependent PTC: [specs/gloas/beacon-chain.md#L1266-L1281](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1266-L1281), cached lookup [#L1392-L1404](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L1392-L1404).
4. **Lighthouse:** [gossip_verified_payload_attestation.rs#L101-L118](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/payload_attestation_verification/gossip_verified_payload_attestation.rs#L101-L118) passes `beacon_block_root` to `with_cached_shuffling`, then checks that PTC. **Agrees with Teku, differs from the literal gossip spec** under differing branch committees. Fork-choice membership is a separate rule.
5. **Medium confidence; disproof:** Shared selection history makes shallow-fork PTCs equal, eliminating that trigger. Deep-branch invariance is not guaranteed. Spec ambiguity remains; no clarification found. Retained-store feasibility unverified; no deep-fork fixture.
6. **Severity: potential fork-choice divergence via propagation.** Direct difference: conditional gossip ACCEPT/REJECT. **Not found** as a matching Teku bug report. Queries: `7732`, `gloas`, `epbs`, `payload attestation state`, `"payload_attestation" "head"`, `"get_ptc" "gossip"`; web `"PayloadAttestationMessageGossipValidator" "head"`, repository-scoped. Hits 10174/11501 did not identify this discrepancy. Novelty unproven.

## C4 — ByRoot serving omits the non-finalized-history exception

1. **Spec, verbatim fragment:** “even if outside of this range.” [specs/gloas/p2p-interface.md#L1483-L1494](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L1483-L1494) requires retaining and serving envelopes newer than the latest finalized checkpoint, including outside the normal request window.
2. **Teku, quoted:** [ExecutionPayloadEnvelopesByRootMessageHandler.java#L98-L168](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/networking/eth2/src/main/java/tech/pegasys/teku/networking/eth2/rpc/beaconchain/methods/ExecutionPayloadEnvelopesByRootMessageHandler.java#L98-L168) derives `minServableEpoch` from current epoch, configured window and fork epoch. It skips old known slots before retrieval, and filters retrieved envelopes using `return spec.computeEpochAtSlot(slot).isGreaterThanOrEqualTo(minServableEpoch);`. Neither path checks finalization.
3. **Condition:** Finalization stalls beyond Teku's serving window. A held envelope is newer than finalization but older than the cutoff. A valid one-root request returns empty; spec requires service.
4. **Lighthouse:** [rpc_methods.rs#L596-L611](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/network/src/network_beacon_processor/rpc_methods.rs#L596-L611) passes requested roots to the envelope streamer and sends available envelopes. [mod.rs#L90-L146](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/payload_envelope_streamer/mod.rs#L90-L146) in `payload_envelope_streamer/` loads held data and bypasses canonical filtering for ByRoot, without Teku's age cutoff. **Matches spec for held data**; pruning policy unassessed.
5. **High confidence; disproof:** Neither slot-known nor retrieval/filter path grants the exception. Assume a held complete envelope, avoiding EL reconstruction assumptions. A larger configured window delays, but does not eliminate, the trigger.
6. **Severity: cosmetic under the supplied taxonomy**: wire-serving violation with possible recovery impact; no direct head change shown. **Not found** as a matching report. Queries: common EIP/fork terms, `envelopes retention`, `"ExecutionPayloadEnvelopesByRoot"`, `"isWithinServableRange"`; web `"unfinalized" "envelopes"`, repository-scoped. PRs 10598/10616/10627 did not identify this. `unfinalized envelopes` API query failed with 403 rate limit, not a negative result.

## C5 — Known envelope poisoning persists after correct payload import

1. **Spec, verbatim:** `payload_status == PAYLOAD_STATUS_INVALIDATED`. [specs/gloas/p2p-interface.md#L445-L462](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/p2p-interface.md#L445-L462) rejects full votes for invalidated payloads, not a now-valid committed payload whose root was associated with earlier malformed contents. [FC#L1121-L1133](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L1121-L1133) verifies/stores sync envelopes without permanently banning a root after one failed envelope.
2. **Teku, quoted:** [ExecutionPayloadGossipValidator.java#L323-L330](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/ExecutionPayloadGossipValidator.java#L323-L330) calls `seenPayloads.add(envelope.getBlockRootAndBuilderIndex())` before EL verification. [DefaultExecutionPayloadManager.java#L217-L239](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/execution/DefaultExecutionPayloadManager.java#L217-L239) adds `blockRootsWithInvalidExecutionPayload.add(` on failed verification, but successful import returns without removing it. [GossipValidationHelper.java#L256-L274](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/GossipValidationHelper.java#L256-L274) checks this mark before current payload status, returning `return InternalValidationResult.reject(`. [RecentExecutionPayloadsFetchService.java#L118-L128](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/beacon/sync/src/main/java/tech/pegasys/teku/beacon/sync/gossip/executionpayloads/RecentExecutionPayloadsFetchService.java#L118-L128) also stops recovery requests when an envelope has merely been seen.
3. **Condition:** A builder signs an envelope declaring the bid's hash but with EL-invalid contents. Gossip records the seen pair; failed import marks the root invalid. The correct envelope is then duplicate-ignored and by-root recovery suppressed. Even if it imports through sync/direct import, the stale invalid mark remains: Teku rejects a valid later-slot index-one attestation that spec's verified/VALID status permits.
4. **Lighthouse:** [gossip_verified_envelope.rs#L173-L186](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs#L173-L186) **shares initial gossip deduplication**; [gossip_verified_envelope.rs#L294-L306](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs#L294-L306) exempts non-gossip sources from duplicate rejection. [attestation_verification.rs#L954-L975](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/attestation_verification.rs#L954-L975) uses `payload_received`, not Teku's sticky invalid-root mark. After valid import, this allows the full vote. Other poisoning variants remain unassessed.
5. **High confidence; disproof:** No invalid-set clearing found on successful direct import. **Initial gossip acceptance/dedup is spec-permitted**: spec also has a seen set and no gossip EL-hash recomputation. Finding is recovery poisoning and later VALID-payload verdicts. PR 11588's hash check is a mitigation, not a normative gossip requirement.
6. **Severity: potential fork-choice divergence through rejected valid full votes/recovery failure.** **Known:** [issue 11568](https://github.com/Consensys-Incorporated/teku/issues/11568), **open**; [PR 11588](https://github.com/Consensys-Incorporated/teku/pull/11588), **open/unmerged**. EIP/fork queries plus direct reads. PR proposes hash verification/status clearing/separate fetch gate; its reported devnet checks were not repeated here.

## Live-code restriction

Teku — EIP-7732 — **affects live code, details withheld**.

## Rules checked and found correct

Traced paths only; candidate exceptions apply. Spec shorthand expands to pinned paths above.

| Rule and result | Teku file/lines at pin | Spec / comparison |
|---|---|---|
| `on_block` checks full parent before transition/PTC insertion | [Gloas fork-choice util#L228-L241](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/util/ForkChoiceUtilGloas.java#L228-L241); [ForkChoice.java#L596-L626](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/forkchoice/ForkChoice.java#L596-L626) stops on failed conditions. | FC#L1053-L1088. |
| Invalid ancestry/transition does not leak embedded PTC votes | [ForkChoice.java#L800-L859](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/forkchoice/ForkChoice.java#L800-L859) rechecks finality, commits block/state, then applies votes. | FC#L1063-L1101. Lighthouse inserts votes earlier: [block_verification.rs#L1782-L1806](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/beacon_node/beacon_chain/src/block_verification.rs#L1782-L1806). |
| Envelope root/parent/slot/bid/timestamp/withdrawals/signature consistency; DA before store | [Envelope verifier#L110-L209](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/execution/ExecutionPayloadVerifierGloas.java#L110-L209); [ForkChoice.java#L902-L935](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/forkchoice/ForkChoice.java#L902-L935). | FC#L683-L727, #L1113-L1133. C5 is a cache/recovery exception. |
| Previous-slot EMPTY/FULL comparison uses zero effective weight | [ForkChoiceModelGloas.java#L449-L490](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/protoarray/ForkChoiceModelGloas.java#L449-L490). | FC#L567-L570. |
| Payload-status tiebreak: EMPTY=1; FULL=2/0 in previous-slot decision, otherwise status | [ForkChoiceModelGloas.java#L470-L537](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/protoarray/ForkChoiceModelGloas.java#L470-L537). Validated payloads checked. | FC#L497-L525. |
| `is_head_weak` includes head-committee equivocators regardless of their voted branch | [Gloas fork-choice util#L463-L530](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/util/ForkChoiceUtilGloas.java#L463-L530) enumerates committees, adds justified-state balance to pending-node attestation weight. | FC#L810-L832. Lighthouse has a different approximation: [proto_array.rs#L792-L818](https://github.com/sigp/lighthouse/blob/a376defa30470923556d91bdeb15a802e297f31f/consensus/proto_array/src/proto_array.rs#L792-L818). [Lighthouse 9593](https://github.com/sigp/lighthouse/issues/9593) is an **open issue**, not a PR; no analogous Teku approximation found. |
| Timely-payload and DA thresholds are strictly greater, not greater-or-equal | [ForkChoiceModelGloas.java#L540-L561](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/protoarray/ForkChoiceModelGloas.java#L540-L561) uses `>` for both. | FC#L326-L363. |
| Attestation data index only 0/1; same-slot index 1 disallowed; full vote deferred without FULL node | [Gloas attestation util#L106-L134](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/gloas/util/AttestationUtilGloas.java#L106-L134); [ForkChoice.java#L1553-L1567](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/forkchoice/ForkChoice.java#L1553-L1567). | FC#L934-L944. |
| Bid without matching proposer preferences queued, not REJECTed | [Bid gossip validator#L176-L202](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/ExecutionPayloadBidGossipValidator.java#L176-L202) returns SAVE_FOR_FUTURE. | P2P#L1017-L1027; gossipsub mapping is Ignore, documented in [10795](https://github.com/Consensys-Incorporated/teku/issues/10795). |
| Beacon-attestation gossip index 1 ignores missing/optimistic payload, rejects invalid | [Gossip helper#L244-L288](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/GossipValidationHelper.java#L244-L288); [AttestationValidator.java#L196-L215](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/AttestationValidator.java#L196-L215). | P2P#L429-L462. **10795 closed/fixed**; C5 qualifies stale marks. |
| Envelope gossip: unknown block queued, invalid known block rejected; slot/builder/claimed hash/requests/signature checked | [Envelope gossip validator#L174-L310](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/validation/ExecutionPayloadGossipValidator.java#L174-L310). | P2P#L830-L883. Claimed-hash equality, not recomputation; C5. |
| Payload-attestation gossip pre-fork/invalid block REJECT; wrong time/duplicate/wrong block-slot IGNORE; unknown block queued | [PTC gossip validator#L77-L153](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/payloadattestation/PayloadAttestationMessageGossipValidator.java#L77-L153). | P2P#L904-L945. Membership state's exception is C3. |
| EnvelopesByRange zero count, including start zero, succeeds empty | [ByRange request#L66-L72](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/networking/libp2p/rpc/ExecutionPayloadEnvelopesByRangeRequestMessage.java#L66-L72) saturates subtraction; [ByRange handler#L165-L183](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/networking/eth2/src/main/java/tech/pegasys/teku/networking/eth2/rpc/beaconchain/methods/ExecutionPayloadEnvelopesByRangeMessageHandler.java#L165-L183) short-circuits empty range. | P2P#L1418-L1420 inherits BlocksByRange. |
| EnvelopesByRange canonical-only, including head's payload status | [ByRange handler#L299-L315](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/networking/eth2/src/main/java/tech/pegasys/teku/networking/eth2/rpc/beaconchain/methods/ExecutionPayloadEnvelopesByRangeMessageHandler.java#L299-L315) excludes EMPTY/PENDING after payload-aware ancestor walk. | P2P#L1422-L1431. **11246 closed**, [PR 11477](https://github.com/Consensys-Incorporated/teku/pull/11477) merged. Caveat: PR says older persisted orphan envelopes are not migrated. |
| ByRoot can serve noncanonical held envelopes and empty requests | [ByRoot handler#L105-L126](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/networking/eth2/src/main/java/tech/pegasys/teku/networking/eth2/rpc/beaconchain/methods/ExecutionPayloadEnvelopesByRootMessageHandler.java#L105-L126) iterates requested roots, no canonical filter; empty iteration ends successfully. | P2P#L1466-L1494. ByRange alone is canonical-only. C4 qualifies age. |
| Deadlines at fork boundary use envelope/calculated slot, not an earlier head's fork | [Payload manager#L338-L345](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/ethereum/statetransition/src/main/java/tech/pegasys/teku/statetransition/execution/DefaultExecutionPayloadManager.java#L338-L345) selects envelope-slot payload deadline; [SlotProcessor.java#L263-L272](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/services/beaconchain/src/main/java/tech/pegasys/teku/services/beaconchain/SlotProcessor.java#L263-L272) selects calculated-slot PTC deadline; [Gloas event adapter#L33-L64](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/validator/beaconnode/src/main/java/tech/pegasys/teku/validator/beaconnode/GloasTimeBasedEventAdapter.java#L33-L64) starts at Gloas slot. | FC#L782-L794; V#L413-L420. Static scheduling check only. |
| Restart restores FULL presence from persisted envelopes | [KV database#L341-L364](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/server/kvstore/KvStoreDatabase.java#L341-L364) extracts blinded-envelope rebuild data; [ForkChoiceModelGloas.java#L358-L370](https://github.com/Consensys-Incorporated/teku/blob/2c35574b3373cbe8ad121a768d98f066aec05b73/storage/src/main/java/tech/pegasys/teku/storage/protoarray/ForkChoiceModelGloas.java#L358-L370) reinserts payload metadata. | Restores metadata, not literal network replay; transient PTC/timeliness persistence unverified. Related [11547](https://github.com/Consensys-Incorporated/teku/issues/11547), [11555](https://github.com/Consensys-Incorporated/teku/issues/11555) are closed. |

## Known-check, disproof and public-results limitations

GitHub `/search/issues` used `repo:Consensys-Incorporated/teku`, with **no state/type filter**: open/closed issues and PRs. First 100 Gloas hits plus narrow queries inspected. “Not found” is bounded by those results, not proven novelty. Statuses verified via API.

For **each C1–C5**, Hive/EEST cross-check is **inconclusive, no matching result obtained**, not “passes.” [Hive](https://hive.ethpandaops.io/) returned HTTP 403 directly and no readable result rows through the page reader; searches produced no per-rule Teku matrix. The alternate historical host was blocked by the tool's address policy. [Execution-spec-tests README](https://raw.githubusercontent.com/ethereum/execution-spec-tests/main/README.md) directs its archived repository's fixtures to [execution-specs releases](https://github.com/ethereum/execution-specs/releases). [Glamsterdam tests milestone](https://github.com/ethereum/execution-specs/milestone/42) supplies no Teku CL case results. No node endpoint was contacted. Unavailable results do not disprove findings.

## URLs read

Pinned source/API URLs above; EIP-7732/7773; CL beta.4 release/compare and PR 5736; Teku issues 10608, 11020, 10795, 11246, 11568, 11547, 11555 and PRs 11041, 11501, 11477, 11556, 11582, 11588; Lighthouse issue 9593; Hive; execution-spec-tests README and execution-specs milestone 42. Issue JSON: `https://api.github.com/repos/<owner>/<repo>/issues/<number>`; merge state: `/pulls/<number>`. Embedded private links were not followed.
