Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
6b03e84
refactor(beacon): name every fork at each fork gate
MegaRedHand Sep 24, 2026
10661ac
build: bump libssz for in-place ProgressiveList writes
MegaRedHand Sep 24, 2026
14dfe49
feat(ssz-tree): add a tree-backed ProgressiveList
MegaRedHand Sep 24, 2026
75995bd
test(beacon): run the v1.7.0-beta.2 spec fixtures
MegaRedHand Sep 24, 2026
dd6ad0d
refactor(beacon): read and write the registry by element
MegaRedHand Sep 24, 2026
8443fd9
refactor(beacon): name every fork at the gates bci added
MegaRedHand Sep 24, 2026
eaefff0
feat(types): add NewPayloadRequest and the partial data column contai…
MegaRedHand Sep 24, 2026
417e750
test(beacon): run the gossip vectors from the main fixture tree
MegaRedHand Sep 24, 2026
e3f39cd
feat(types): add the gloas preset, constants and containers
MegaRedHand Sep 24, 2026
5aab222
feat(beacon): add the gloas fork variant and config
MegaRedHand Sep 25, 2026
a6923f3
fix(beacon): stop retiring the eth1-bridge deposit path a second time…
MegaRedHand Sep 25, 2026
baa549c
fix(beacon): port the v1.7.0-beta.2 fork-choice changes
MegaRedHand Sep 25, 2026
c5c0f06
test(beacon): run the gloas ssz_static vectors
MegaRedHand Sep 25, 2026
2436bea
fix(beacon): use the minimal preset's consolidation churn quotient
MegaRedHand Sep 25, 2026
633b294
feat(beacon): add the gloas accessors, predicates and churn
MegaRedHand Sep 25, 2026
ae9a05b
feat(beacon): upgrade a fulu state to gloas
MegaRedHand Sep 25, 2026
07c1bb6
feat(beacon): add gloas epoch processing
MegaRedHand Sep 25, 2026
5b396db
feat(beacon): add gloas withdrawals, bids and parent payloads
MegaRedHand Sep 28, 2026
0d9ff37
feat(beacon): add the gloas fork choice nodes, weight and head
MegaRedHand Sep 28, 2026
a66c0c6
feat(beacon): add gloas block operations
MegaRedHand Sep 28, 2026
8200261
feat(beacon): carry the gloas fork choice across the fulu boundary
MegaRedHand Sep 28, 2026
435480e
feat(beacon): add the gloas state transition
MegaRedHand Sep 28, 2026
bf7cf12
feat(beacon): add the gloas fork-choice handlers
MegaRedHand Sep 28, 2026
69d9bd7
test(beacon): run the gloas fork-choice suite
MegaRedHand Sep 28, 2026
908e697
test(beacon): run every gloas suite
MegaRedHand Sep 28, 2026
e698f22
refactor(beacon): name gloas in every fork match
MegaRedHand Sep 29, 2026
9534e6a
docs: describe gloas in the beacon stf reference
MegaRedHand Sep 29, 2026
b9c9dd0
perf(beacon): one bottom-up head computation for every fork
MegaRedHand Sep 29, 2026
af123e1
fix(beacon): refuse gloas where the node cannot answer it
MegaRedHand Sep 30, 2026
f31ef79
refactor(beacon): share what gloas leaves unmodified
MegaRedHand Sep 30, 2026
5102c81
docs(beacon): correct stale gloas comments
MegaRedHand Sep 30, 2026
4137aa2
test(ssz-tree): cover progressive subtrees that span leaves
MegaRedHand Sep 30, 2026
1d667c4
docs(beacon): refresh the lib test counts
MegaRedHand Sep 30, 2026
225461a
feat(beacon): validate gloas data column sidecars
MegaRedHand Sep 30, 2026
beb3b83
refactor(beacon): split the gloas column rule and test its deviations
MegaRedHand Sep 30, 2026
d91c6e5
feat(beacon): add Platåberget as a built-in network
MegaRedHand Sep 30, 2026
2dd8f5e
feat(p2p): cross fork digests without a restart
MegaRedHand Sep 30, 2026
4f5893f
fix(p2p): tighten the fork-digest switch
MegaRedHand Sep 30, 2026
29d0981
test(p2p): make the fork-digest tests prove what they claim
MegaRedHand Sep 30, 2026
539e9f6
fix(beacon): time fork-choice events at arrival, not at the slot tick
MegaRedHand Sep 30, 2026
02eba80
feat(beacon): persist verified envelopes and block timeliness
MegaRedHand Sep 30, 2026
d7cc62b
fix(beacon): seed the PTC vote vectors a resumed store expects
MegaRedHand Sep 30, 2026
1ed3ec4
test(beacon): cover the live head walk on a resumed store
MegaRedHand Sep 30, 2026
f1f62da
feat(beacon): gloas beacon_block gossip rules
MegaRedHand Sep 30, 2026
3b661ca
fix(beacon): match gloas block gossip limits to the spec
MegaRedHand Sep 30, 2026
484947f
feat(beacon): receive, store and replay gloas data column sidecars
MegaRedHand Sep 30, 2026
07e4b60
refactor(beacon): move column parking into its own module
MegaRedHand Sep 30, 2026
7144c0a
fix(beacon): bound gloas column parking
MegaRedHand Sep 30, 2026
2ec76c2
feat(beacon): gloas attestation and aggregate gossip
MegaRedHand Sep 30, 2026
fe3a1fe
fix(beacon): bound gloas aggregation bits and judge pre-gloas payload…
MegaRedHand Oct 1, 2026
9edbcdf
feat(engine): newPayloadV5 for gloas envelopes
MegaRedHand Oct 1, 2026
f0ecbf1
fix(engine): refuse a mismatched envelope and quiet the V5 warning
MegaRedHand Oct 1, 2026
6692839
feat(beacon): gloas execution_payload and payload_attestation_message…
MegaRedHand Oct 1, 2026
0304c1c
fix(beacon): gate queued envelopes on their shape
MegaRedHand Oct 1, 2026
ce29681
feat(p2p): serve execution payload envelopes over req/resp
MegaRedHand Oct 1, 2026
1580cd5
refactor(p2p): move the envelope req/resp handlers into their own module
MegaRedHand Oct 1, 2026
4af0326
fix(p2p): pin MAX_REQUEST_PAYLOADS and record the head-envelope devia…
MegaRedHand Oct 1, 2026
894f793
feat(engine): forkchoiceUpdatedV4 for gloas
MegaRedHand Oct 1, 2026
1311ce4
feat(beacon): import gloas blocks and their execution payload envelopes
MegaRedHand Oct 1, 2026
2bfb08a
test(beacon): gate the fixture-driven envelope tests
MegaRedHand Oct 1, 2026
7738f2b
fix(beacon): keep an honest envelope recoverable
MegaRedHand Oct 1, 2026
61f9fa4
fix(beacon): re-ask for missing envelopes and bound the unmatched queue
MegaRedHand Oct 1, 2026
8deb2ca
feat(beacon): follow execution_payload and payload_attestation_messag…
MegaRedHand Oct 1, 2026
2bef861
fix(beacon): apply verified payload votes without re-verifying them
MegaRedHand Oct 1, 2026
071cd52
feat(beacon): follow gloas
MegaRedHand Oct 1, 2026
4e831ae
fix(beacon): pair the head's payload status with its root
MegaRedHand Oct 1, 2026
462ed1b
feat(p2p): fetch execution payload envelopes by root and by range
MegaRedHand Oct 1, 2026
95e6b68
refactor(p2p): move the envelope fetch client into its own module
MegaRedHand Oct 1, 2026
d93ec1f
fix(p2p): keep range envelopes in batch order
MegaRedHand Oct 1, 2026
0784bdb
fix(beacon): reconcile the merged gloas branches
MegaRedHand Oct 1, 2026
f4ab3b5
feat(rpc): serve gloas execution payload envelopes
MegaRedHand Oct 1, 2026
92f39d1
feat(beacon): fetch a gloas anchor's envelope during checkpoint sync
MegaRedHand Oct 1, 2026
b5861c1
fix(rpc): judge gloas optimism read-only and cautiously
MegaRedHand Oct 1, 2026
39bcb7c
fix(beacon): forward envelopes whose block state is not cached yet
MegaRedHand Oct 1, 2026
d5fa1fe
feat(beacon): validate gloas payloads with newPayloadV5 and forkchoic…
MegaRedHand Oct 1, 2026
029e8fb
docs(beacon): record how the execution client judges gloas payloads
MegaRedHand Oct 1, 2026
281acea
fix(beacon): follow the execution chain, and check consensus before a…
MegaRedHand Oct 1, 2026
4a8b244
fix(beacon): scope hash-mismatch verdicts to the envelope and probe a…
MegaRedHand Oct 1, 2026
1ab5abe
docs(beacon): describe the gloas follower as it runs
MegaRedHand Oct 1, 2026
1ab6dee
fix(beacon): ask for envelopes of held blocks at once and keep those …
MegaRedHand Oct 1, 2026
f1b0e33
fix(beacon): bound envelopes held for stored blocks
MegaRedHand Oct 1, 2026
d1ef2fe
fix(beacon): let the finalized block's own gloas columns through
MegaRedHand Oct 2, 2026
ee15eeb
chore(beacon): lay out the interfaces gloas validator duties will share
MegaRedHand Oct 5, 2026
bc02069
feat(validator): pick duty deadlines by the fork of the slot
MegaRedHand Oct 5, 2026
ba8a336
feat(validator): propose gloas blocks and reveal the self-built envelope
MegaRedHand Oct 5, 2026
a4f6294
feat(validator): attest and aggregate at gloas slots
MegaRedHand Oct 5, 2026
e75554b
feat(validator): vote on payload timeliness from the committee
MegaRedHand Oct 5, 2026
1ee2374
feat(beacon): serve duties and attestation data at gloas epochs
MegaRedHand Oct 5, 2026
5f5b94a
feat(beacon): accept gloas attestations and aggregates through the po…
MegaRedHand Oct 5, 2026
450bc0a
feat(beacon): key the payload attestation pool by slot, data and vali…
MegaRedHand Oct 5, 2026
3e06974
feat(beacon): share one payload attestation pool across p2p and the B…
MegaRedHand Oct 5, 2026
7e9d3d9
feat(beacon): gossip payload attestations a validator client signed
MegaRedHand Oct 5, 2026
4341234
feat(beacon): record when a block's envelope arrived for payload_present
MegaRedHand Oct 5, 2026
6a32f5d
feat(beacon): serve PTC duties, payload attestation data and the pool
MegaRedHand Oct 5, 2026
0648151
feat(engine): build gloas payloads through forkchoiceUpdatedV4 and ge…
MegaRedHand Oct 5, 2026
85a54ba
feat(beacon): assemble self-built gloas blocks and their payload enve…
MegaRedHand Oct 5, 2026
34d4935
feat(beacon): serve gloas block production and envelope publication
MegaRedHand Oct 5, 2026
868e013
feat(beacon): gossip a self-built payload envelope with its data columns
MegaRedHand Oct 5, 2026
390c3be
docs(beacon): document gloas validator duties
MegaRedHand Oct 5, 2026
6513e08
test(beacon): port the validator-client tests to the gloas-aware clie…
MegaRedHand Oct 5, 2026
5535deb
refactor(beacon): expose the per-slot payload attestation aggregation
MegaRedHand Oct 5, 2026
ef556a8
fix(beacon): list the payload attestation pool as aggregates
MegaRedHand Oct 5, 2026
ddcd935
test(beacon): drive the validator client end to end at a gloas slot
MegaRedHand Oct 5, 2026
8dc1640
docs(beacon): the payload attestation pool is listed as aggregates
MegaRedHand Oct 5, 2026
55adf1b
fix(rpc): accept blob-carrying blocks and envelopes over 2 MiB
MegaRedHand Oct 5, 2026
32ceea0
feat(rpc): serve the single-validator and fork_schedule endpoints
MegaRedHand Oct 5, 2026
573b7bb
fix(rpc): accept SSZ bodies on attestation, aggregate and payload-vot…
MegaRedHand Oct 5, 2026
e893d3b
docs(rpc): document the endpoints and SSZ request bodies added for fo…
MegaRedHand Oct 5, 2026
c6a1a91
feat(types): deserialize the block, envelope and request containers f…
MegaRedHand Oct 5, 2026
73d2ead
fix(rpc): accept JSON bodies on block and envelope publication
MegaRedHand Oct 5, 2026
dcc325a
docs(rpc): block and envelope publication take JSON or SSZ
MegaRedHand Oct 5, 2026
b87637e
Merge main into feat/beacon-gloas
MegaRedHand Oct 22, 2026
2c53521
Merge feat/beacon-gloas into feat/beacon-plataberget-devnet
MegaRedHand Oct 22, 2026
9d8bcbd
Merge feat/beacon-plataberget-devnet into feat/beacon-gloas-live
MegaRedHand Oct 22, 2026
be417a3
Merge feat/beacon-gloas-live into feat/beacon-gloas-validator-duties
MegaRedHand Oct 22, 2026
bd9b1c7
Merge feat/beacon-gloas-validator-duties into fix/beacon-foreign-vc-e…
MegaRedHand Oct 22, 2026
931a704
Merge main into feat/beacon-gloas
MegaRedHand Oct 22, 2026
a59bbd3
Merge feat/beacon-gloas into feat/beacon-plataberget-devnet
MegaRedHand Oct 22, 2026
42b467b
Merge feat/beacon-plataberget-devnet into feat/beacon-gloas-live
MegaRedHand Oct 22, 2026
6632055
fix(beacon): skip a proposer boost outside the justified subtree
MegaRedHand Oct 22, 2026
2bf2bc6
Merge feat/beacon-gloas into feat/beacon-plataberget-devnet
MegaRedHand Oct 22, 2026
87499d4
Merge feat/beacon-plataberget-devnet into feat/beacon-gloas-live
MegaRedHand Oct 22, 2026
7864f96
Merge feat/beacon-gloas-live into feat/beacon-gloas-validator-duties
MegaRedHand Oct 22, 2026
77743d7
Merge feat/beacon-gloas-validator-duties into fix/beacon-foreign-vc-e…
MegaRedHand Oct 22, 2026
cdfd3c6
Merge main into feat/beacon-gloas
MegaRedHand Oct 22, 2026
cc1e28a
Merge feat/beacon-gloas into feat/beacon-plataberget-devnet
MegaRedHand Oct 22, 2026
e00690a
Merge feat/beacon-plataberget-devnet into feat/beacon-gloas-live
MegaRedHand Oct 22, 2026
f1684ff
Merge feat/beacon-gloas-live into feat/beacon-gloas-validator-duties
MegaRedHand Oct 22, 2026
bfdd582
Merge feat/beacon-gloas-validator-duties into fix/beacon-foreign-vc-e…
MegaRedHand Oct 22, 2026
e8f0e05
chore(beacon): refresh Platåberget's bootnodes from upstream
MegaRedHand Oct 23, 2026
214543c
Merge feat/beacon-plataberget-devnet into feat/beacon-gloas-live
MegaRedHand Oct 23, 2026
c34b730
Merge feat/beacon-gloas-live into feat/beacon-gloas-validator-duties
MegaRedHand Oct 23, 2026
0025f5b
Merge feat/beacon-gloas-validator-duties into fix/beacon-foreign-vc-e…
MegaRedHand Oct 23, 2026
360f977
feat(beacon): gloas builder market: bid and preference gossip, endpoi…
MegaRedHand Oct 26, 2026
3ab9024
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 26, 2026
5538aa3
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 26, 2026
5836a85
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 26, 2026
14e24a4
style: cargo fmt
MegaRedHand Oct 26, 2026
2716be7
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 26, 2026
d15d08b
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 26, 2026
7615a75
test(rpc): give the builder market test routers the sync pool and own…
MegaRedHand Oct 26, 2026
4211407
Merge main into fix/beacon-foreign-vc-endpoints
MegaRedHand Oct 27, 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
17 changes: 12 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -343,9 +343,11 @@ actual_slot = finalized_slot + 1 + relative_index
until its `until_epoch`, under every held digest) and advertised in MetaData
`syncnets`, never the ENR. Messages and contributions validate in p2p on their own
permit pool (`gossip::sync_committee`, `p2p/src/beacon/sync_committee.rs`), and
accepted ones go into the shared `SyncCommitteePool`. Gloas digests add two more topics,
`execution_payload` and `payload_attestation_message` (`BeaconTopics::for_fork`; earlier
digests never carry them). Gloas has its own rules for `beacon_block`,
accepted ones go into the shared `SyncCommitteePool`. Gloas digests add four more topics,
`execution_payload`, `payload_attestation_message`, `execution_payload_bid` and
`proposer_preferences` (`BeaconTopics::for_fork`; earlier digests never carry them).
Bids and preferences are validated in p2p against one shared `BuilderMarket`
(`state_transition::beacon::builder_market`) and never reach the chain actor. Gloas has its own rules for `beacon_block`,
`data_column_sidecar` (fork enum `DataColumnSidecar`, fork from the topic's digest),
aggregates (`SignedAggregateAndProof::Gloas`, aggregation-bits length bounded before
expansion) and attestations (`verify_attestation_payload_status`). Deliberate
Expand Down Expand Up @@ -788,8 +790,13 @@ transitions are in `ethlambda-types`, per the section above. Nothing above
the parking of gloas column sidecars (they carry no signature). Fork-choice
events are timed at arrival, not at the slot tick, and the head's payload
status is kept with its root (`Store::head_payload_status`, recomputed after
a restart). The node also serves gloas validator duties, self-build only (no
bids, no proposer preferences; see `docs/spec_deviations.md`).
a restart). The node also serves gloas validator duties and the builder market:
it validates, pools and relays gossip bids and proposer preferences, serves
`POST /eth/v1/beacon/execution_payload_bids` and `/proposer_preferences` plus the
builder endpoints, and `produceBlockV4` weighs the best pooled p2p bid against
the local build per `BuilderConfig` (`min_bid`, `builder_boost_factor`; the local
build wins a tie). A winning bid returns the block only. The builder API (relay
or `builder_pubkeys` bids) is phase 2; see `docs/spec_deviations.md`.
`state_transition/src/beacon/gloas_block_production.rs` assembles the block and
its envelope (`gloas_payload_inputs`, `parse_gloas_execution_requests`,
`pack_gloas_attestations`, `pack_payload_attestations`, `assemble_gloas_block`,
Expand Down
6 changes: 6 additions & 0 deletions bin/ethlambda/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,10 @@ async fn run_node(options: Options) -> eyre::Result<()> {
// by block production and `GET .../pool/payload_attestations`.
let payload_attestation_pool =
ethlambda_state_transition::beacon::payload_attestation_pool::SharedPayloadAttestationPool::default();
// Bids, proposer preferences and known payloads: filled by gossip and the
// Beacon API's bid and preferences endpoints, read by block production.
let builder_market =
ethlambda_state_transition::beacon::builder_market::SharedBuilderMarket::default();
// Filled by gossip and the Beacon API's sync committee endpoints, read by
// block production and the contribution endpoint.
let sync_committee_pool =
Expand All @@ -715,6 +719,7 @@ async fn run_node(options: Options) -> eyre::Result<()> {
setup.node_names,
discovery,
payload_attestation_pool.clone(),
builder_market.clone(),
sync_committee_pool.clone(),
)
.await
Expand Down Expand Up @@ -756,6 +761,7 @@ async fn run_node(options: Options) -> eyre::Result<()> {
ethlambda_rpc::BeaconApiHandles {
p2p: rpc_p2p,
payload_attestation_pool: payload_attestation_pool.clone(),
builder_market: builder_market.clone(),
sync_committee_pool: sync_committee_pool.clone(),
custody_columns: rpc_custody_columns,
engine: rpc_engine,
Expand Down
Loading
Loading