Skip to content
Draft
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
2c3a6f5
extend data structures for gloas forkchoice
Tomi-3-0 Dec 16, 2025
9001418
update vote processing
Tomi-3-0 Dec 17, 2025
c4017ed
payload timeliness and extension logic
Tomi-3-0 Dec 17, 2025
c748e52
implement payload extension logic
Tomi-3-0 Dec 19, 2025
2fc45b9
implement is_supporting_vote logic
Tomi-3-0 Dec 23, 2025
327276f
implement vote support logic for gloas
Tomi-3-0 Dec 31, 2025
391b5fd
Implement get node children
Tomi-3-0 Dec 31, 2025
33613d2
Implement head selection logic for gloas
Tomi-3-0 Dec 31, 2025
2a60f8d
update process_block with forkchoice chnages
Tomi-3-0 Dec 31, 2025
26452f4
update process_attestation call sites
Tomi-3-0 Jan 1, 2026
134c290
update copyright year
Tomi-3-0 Jan 1, 2026
3a3767e
Calculate correct physical index
Tomi-3-0 Jan 3, 2026
f3a13dd
remove redundant tests
Tomi-3-0 Jan 4, 2026
5ed3f36
Review: use BitArray for ptc votes
Tomi-3-0 Jan 4, 2026
e67698b
run make test
Tomi-3-0 Jan 4, 2026
abcf6a2
clean up
Tomi-3-0 Jan 4, 2026
d9eca30
remove gloas fork choice test file
Tomi-3-0 Jan 6, 2026
ff65b17
updatw with latest changes from unstable
Tomi-3-0 Feb 1, 2026
34ad6d1
Merge branch 'unstable' into gloas/fork-choice
Tomi-3-0 Feb 1, 2026
429b402
Store parent payload status in ProtoNode
Tomi-3-0 Feb 1, 2026
c3e6acb
Merge branch 'unstable' into gloas/fork-choice
Tomi-3-0 Feb 10, 2026
439e7c3
Add new forkchoice constants
Tomi-3-0 Feb 12, 2026
fa89ee3
refactor is supporting vote
Tomi-3-0 Feb 12, 2026
957ccb3
Merge branch 'unstable'
Tomi-3-0 Feb 12, 2026
79f217a
misc
Tomi-3-0 Feb 12, 2026
7e6752d
update find head
Tomi-3-0 Feb 13, 2026
e850cfb
update should extend payload
Tomi-3-0 Feb 13, 2026
c2b6115
update get weight
Tomi-3-0 Feb 13, 2026
ddb93b3
Update get head
Tomi-3-0 Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions AllTests-mainnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,11 @@ AllTests-mainnet
+ put()/hasSidecar(index, slot, proposer_index)/remove() test OK
+ put(sidecar)/put([sidecars])/hasSidecars/popSidecars/remove() test OK
```
## Block Processing
```diff
+ on_execution_payload: Enables FULL branch in fork choice OK
+ on_execution_payload: Marks payload as locally available OK
```
## Block pool altair processing [Preset: mainnet]
```diff
+ Invalid signatures [Preset: mainnet] OK
Expand Down Expand Up @@ -709,6 +714,17 @@ AllTests-mainnet
+ Obtaining the graffiti of an unconfigured validator returns the suggested default [Beacon OK
+ Setting the graffiti on a missing validator creates a record for it [Beacon Node] [Preset: OK
```
## Head Selection - LMD-GHOST with Payload Status
```diff
+ Descends multiple levels OK
+ Gloas: Handles virtual node expansion correctly OK
+ Gloas: Lexicographic tiebreak on root when weights equal OK
+ Gloas: Payload tiebreaker when same root, equal weight OK
+ Gloas: Pick child with highest weight OK
+ Pre-Gloas: Use standard proto_array logic OK
+ Safety: Iteration limit prevents infinite loops OK
+ Start at justified checkpoint with PENDING OK
```
## Honest validator
```diff
+ General pubsub topics OK
Expand Down
14 changes: 14 additions & 0 deletions ConsensusSpecPreset-mainnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -5398,6 +5398,20 @@ ConsensusSpecPreset-mainnet
+ ForkChoice - mainnet/fulu/fork_choice/on_block/pyspec_tests/proposer_boost_is_first_block OK
+ ForkChoice - mainnet/fulu/fork_choice/on_block/pyspec_tests/proposer_boost_root_same_slot_ OK
ForkChoice - mainnet/fulu/fork_choice/should_override_forkchoice_update/pyspec_tests/shoul Skip
+ ForkChoice - mainnet/gloas/fork_choice/ex_ante/pyspec_tests/ex_ante_sandwich_with_honest_a OK
+ ForkChoice - mainnet/gloas/fork_choice/ex_ante/pyspec_tests/ex_ante_sandwich_without_attes OK
+ ForkChoice - mainnet/gloas/fork_choice/ex_ante/pyspec_tests/ex_ante_vanilla OK
+ ForkChoice - mainnet/gloas/fork_choice/get_head/pyspec_tests/chain_no_attestations OK
+ ForkChoice - mainnet/gloas/fork_choice/get_head/pyspec_tests/discard_equivocations_on_atte OK
+ ForkChoice - mainnet/gloas/fork_choice/get_head/pyspec_tests/genesis OK
+ ForkChoice - mainnet/gloas/fork_choice/get_head/pyspec_tests/shorter_chain_but_heavier_wei OK
+ ForkChoice - mainnet/gloas/fork_choice/get_head/pyspec_tests/split_tie_breaker_no_attestat OK
+ ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/basic OK
+ ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/on_block_bad_parent_root OK
ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/on_block_future_block Skip
+ ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/proposer_boost OK
+ ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/proposer_boost_is_first_block OK
+ ForkChoice - mainnet/gloas/fork_choice/on_block/pyspec_tests/proposer_boost_root_same_slot OK
```
## Sync
```diff
Expand Down
12 changes: 7 additions & 5 deletions beacon_chain/consensus_object_pools/attestation_pool.nim
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# beacon_chain
# Copyright (c) 2018-2025 Status Research & Development GmbH
# Copyright (c) 2018-2026 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
Expand Down Expand Up @@ -182,10 +182,10 @@ proc init*(T: type AttestationPool, dag: ChainDAGRef,
proc addForkChoiceVotes(
pool: var AttestationPool, slot: Slot,
attesting_indices: openArray[ValidatorIndex], block_root: Eth2Digest,
wallTime: BeaconTime) =
committee_index: CommitteeIndex, wallTime: BeaconTime) =
# Add attestation votes to fork choice
if (let v = pool.forkChoice.on_attestation(
pool.dag, slot, block_root, attesting_indices, wallTime);
pool.dag, slot, block_root, attesting_indices, committee_index, wallTime);
v.isErr):
# This indicates that the fork choice and the chain dag are out of sync -
# this is most likely the result of a bug, but we'll try to keep going -
Expand Down Expand Up @@ -464,7 +464,8 @@ proc addAttestation*(
addAttToPool(pool.electraCandidates, newAttEntry, Opt.some committee_index)
pool.addForkChoiceVotes(
attestation.data.slot, attesting_indices,
attestation.data.beacon_block_root, wallTime)
attestation.data.beacon_block_root,
attestation.data.index.CommitteeIndex, wallTime)

# There does not seem to be an SSE stream event corresponding to this,
# because both attestation and single_attestation specifically specify
Expand All @@ -486,7 +487,8 @@ proc addAttestation*(
Opt.some attestation.committee_index.CommitteeIndex)
pool.addForkChoiceVotes(
attestation.data.slot, attesting_indices,
attestation.data.beacon_block_root, wallTime)
attestation.data.beacon_block_root,
attestation.data.index.CommitteeIndex, wallTime)

# Send notification about new attestation via callback.
if not(isNil(pool.onSingleAttestationAdded)):
Expand Down
Loading
Loading