Commit Graph

1829 Commits

Author SHA1 Message Date
Eitan Seri-Levi
a822d4fb42 Merge branch 'glamsterdam-devnet-3' into glamsterdam-devnet-4 2026-05-25 23:29:10 +03:00
Eitan Seri-Levi
5da759f88f Merge branch 'gloas-head-block-number' into glamsterdam-devnet-4 2026-05-24 18:03:02 +03:00
Eitan Seri-Levi
26d0a99a7b cleanup 2026-05-24 17:13:46 +03:00
Eitan Seri-Levi
73b177015a Merge branch 'gloas-head-block-number' into glamsterdam-devnet-4 2026-05-24 16:54:21 +03:00
Eitan Seri-Levi
28240f4712 calculate head block number for gloas 2026-05-24 16:51:57 +03:00
Eitan Seri-Levi
c579328a53 Merge branch 'gloas-proposer-preferences-sse' into glamsterdam-devnet-4 2026-05-24 13:26:40 +03:00
Eitan Seri-Levi
d35c1cb363 fix tests 2026-05-22 19:31:48 +03:00
Eitan Seri-Levi
58c5b2c803 resolve merge conflicts 2026-05-22 18:15:37 +03:00
Eitan Seri-Levi
97c125505a fix tests 2026-05-22 18:03:41 +03:00
Eitan Seri-Levi
c230bebf26 Resolve merge conflicts 2026-05-22 17:35:31 +03:00
Eitan Seri-Levi
5a34031b84 fix tests 2026-05-22 14:08:31 +03:00
Eitan Seri-Levi
4760df5e6b use correct state 2026-05-22 13:23:59 +03:00
Eitan Seri-Levi
60abd4b5b9 Gloas alpha spec 8 (#9315)
https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.8


  


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Michael Sproul <michael@sigmaprime.io>
2026-05-22 06:21:20 +00:00
Lion - dapplion
1caaa10fa8 Drop unused EthSpec generic from Stores (#9281)
Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
2026-05-21 08:35:35 +00:00
Daniel Knopik
a9637c1650 Partial columns cleanup (#9321)
#8314 left a few ugly potentially panicking location behind - all of them believed to be unreachable, but this PR fixes them regardless for good hygiene.


  Update to `ethereum_ssz 0.10.4` for two new helpers: `not_inplace` and `clone_zeroed`.

Remove remaining `expect` and `todo!` in favour of these helpers and one new fallible (but practically infallible) method.


Co-Authored-By: Daniel Knopik <daniel@dknopik.de>
2026-05-21 03:25:02 +00:00
Lion - dapplion
2c76ee5b6b Gloas lookup sync boilerplate (#9322)
Implements the boring boilerplate to send envelopes by root requests and process them. Pre-step to

- https://github.com/sigp/lighthouse/pull/9155


  


Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
2026-05-20 12:56:49 +00:00
Eitan Seri- Levi
a5bd456a58 proposer preferences SSE event 2026-05-16 08:08:30 -07:00
Daniel Knopik
1a68631180 Gloas payload cache (#9209)
In Gloas, beacon blocks are imported into fork choice immediately - the payload envelope and data columns arrive
separately. KZG commitments moved from the column sidecar into the execution payload bid, so the existing
`DataAvailabilityChecker` (which assumes block and data are coupled) can't be used for Gloas.


  * Introduced `PendingPayloadCache` to keep track of payload and data columns per block root.
* Added gossip column verification
* Added support for Gloas data column reconstruction
* Payload envelope verification simplified: removed `MaybeAvailableEnvelope`, `ExecutedEnvelope`, `EnvelopeImportData`

Not yet implemented (tracked with TODOs):
- Proper lookup sync for Gloas columns arriving before blocks
- Partial column merging for Gloas
- Moving `load_gloas_payload_bid` disk reads off the async runtime
- Backfill/range sync for Gloas

Based on @eserilev's PR and work in progress. See also #9202 for verification.


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Eitan Seri- Levi <eserilev@gmail.com>

Co-Authored-By: Daniel Knopik <daniel@dknopik.de>

Co-Authored-By: Daniel Knopik <107140945+dknopik@users.noreply.github.com>

Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
2026-05-13 07:03:34 +00:00
Eitan Seri-Levi
9101ddc69d ignore-ws-check flag doesnt allow the node to start outside the weak subjectivity period (#9290)
Using the `ignore-ws-check` doesn't actually let you start up a node thats outside the weak subjectivity period


  


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>
2026-05-13 04:20:08 +00:00
hopinheimer
757873200b Fix stale beacon_state_root in test helpers (#9289)
Test helpers `add_attested_block_at_slot` and `add_attested_blocks_at_slot` accepted `state_root` argument which was computed before applying the block.


  


Co-Authored-By: hopinheimer <knmanas6@gmail.com>
2026-05-12 06:24:18 +00:00
Eitan Seri-Levi
7aec7a768e fix: only require parent envelope when bid references parent's payload
The previous check triggered ParentEnvelopeUnknown for any block whose
parent didn't have its envelope received, even when the block's bid
didn't actually reference that parent's payload (e.g. building on
grandparent's execution state).

This caused a permanent stall when an envelope was rejected (e.g.
WithdrawalsRootMismatch from a buggy proposer): the parent's
payload_received stayed false, and all subsequent child blocks would
trigger infinite lookup retries for the broken envelope.

Fix: only require the parent's envelope if the block's bid
parent_block_hash matches the parent's execution_payload_block_hash,
meaning this block directly depends on the parent's payload.
2026-05-08 11:37:22 +00:00
Eitan Seri-Levi
b53a969c30 fix: use execution_payload_block_hash for Pending payload status in fcU
When gloas envelopes are imported optimistically (EL returns SYNCING),
the payload status is Pending. Previously, Pending used
execution_payload_parent_hash for the head_hash in forkchoiceUpdated,
which tells geth to stay at the parent — never advancing.

Fix: use execution_payload_block_hash (the bid's committed hash) for
Pending status, same as Full. This tells geth to sync to the new head,
which is the purpose of optimistic sync. Geth will validate it and
transition from SYNCING to VALID on subsequent newPayload calls.

Also re-enables backfill sync for gloas with a dedicated
import_historical_gloas_block_batch that properly handles RangeSyncBlock::Gloas
variants (storing envelopes alongside blocks).
2026-05-08 08:53:25 +00:00
Eitan Seri-Levi
c52cee9d95 Allow optimistic payload verification for GLOaS envelopes
Remove the OptimisticSyncNotSupported check in into_executed_payload_envelope.
When the EL returns SYNCING (optimistic) for a payload envelope's newPayload
call, the envelope import should proceed rather than being rejected. This
commonly occurs after range sync imports blocks that the EL hasn't yet
validated - subsequent envelopes arriving via gossip would be rejected because
the EL is still catching up.

The downstream import path already handles optimistic status correctly:
- fork choice marks the payload as received regardless of EL status
- the payload_verification_status is propagated to SSE events/metrics
- if the payload is later found invalid, the normal invalidation mechanism
  handles it (same as for blocks)
2026-05-07 14:53:36 +00:00
Eitan Seri-Levi
f818612795 fix: remove premature on_valid_payload_envelope_received + disable backfill for GLOaS
1. Remove on_valid_payload_envelope_received call before process_block
   in chain segment import. The block isn't in fork choice yet, so it
   always fails with NodeUnknown. import_envelope_from_range_sync
   handles this correctly after process_block.

2. Disable backfill sync when GLOaS is scheduled. Backfill calls
   into_available_block which panics on GLOaS RangeSyncBlock variant.
   Backfill for GLOaS is not yet implemented.
2026-05-07 14:26:04 +00:00
Eitan Seri-Levi
def1a6cacc fix: store envelope for DuplicateFullyImported + fix load_parent
Two fixes for GLOaS range sync:

1. DuplicateFullyImported: persist envelope for blocks that are already
   in fork choice (e.g. post-checkpoint-sync blocks between finalized
   and head).

2. load_parent: if parent envelope isn't in store, check if parent is
   already in fork choice. If it is, the parent was already imported
   and validated — proceed without requiring the envelope in store.
   This handles the case where PayloadEnvelopesByRange doesn't return
   envelopes for all blocks (fewer envelopes than blocks).
2026-05-07 13:26:53 +00:00
Eitan Seri-Levi
3ff03ecd89 Merge branch 'gloas-parent-envelope-unknown-lookup' into glamsterdam-devnet-2 2026-05-07 12:37:41 +03:00
Eitan Seri-Levi
be178899cd Merge branch 'gloas-parent-envelope-unknown-lookup' of https://github.com/eserilev/lighthouse into gloas-parent-envelope-unknown-lookup 2026-05-07 12:37:26 +03:00
Eitan Seri-Levi
d8e359a7b6 Prevent chain stall 2026-05-07 12:37:03 +03:00
Mac L
3351db1ba8 Remove TestRandom (#9006)
We  have a legacy `TestRandom` trait which generates random types for testing and fuzzing.
This function overlaps with `arbitrary` which is used very commonly in the ecosystem.


  Remove `TestRandom` and generate random type instances using `Arbitrary`.


Co-Authored-By: Mac L <mjladson@pm.me>

Co-Authored-By: Michael Sproul <michael@sigmaprime.io>
2026-05-05 06:35:57 +00:00
Eitan Seri-Levi
2d68396a08 FIX CHECKPOINT SYNC 2026-05-04 17:27:38 +03:00
Eitan Seri-Levi
a6144def54 Merge branch 'unstable' into gloas-parent-envelope-unknown-lookup 2026-05-04 16:01:26 +02:00
Eitan Seri-Levi
3dea23c6ba Conflicts 2026-05-04 16:50:56 +03:00
Eitan Seri-Levi
8341b44105 Merge 2026-05-04 16:33:31 +03:00
Eitan Seri-Levi
fff72716ba hacky fix 2026-05-04 16:33:03 +03:00
Eitan Seri-Levi
75d4333776 Hack for checkpoint sync 2026-05-04 15:46:48 +03:00
Eitan Seri-Levi
36aee54be2 Merge remote-tracking branch 'origin/gloas-range-sync' into glamsterdam-devnet-2 2026-05-04 14:58:45 +03:00
Eitan Seri-Levi
3d23f9be0d Merge branch 'unstable' of https://github.com/sigp/lighthouse into gloas-range-sync 2026-05-04 14:58:16 +03:00
Eitan Seri-Levi
9cf155a0dd Implement gloas proposer preference vc duty (#9208)
Allow for the vc to submit its proposer preferences to the network


  


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
2026-05-04 11:33:09 +00:00
Eitan Seri-Levi
d6e3b006ea fix 2026-05-01 22:18:15 +02:00
Eitan Seri-Levi
7e502a5e65 Fix 2026-05-01 18:23:33 +02:00
Eitan Seri-Levi
7af3e813fe Merge branch 'glamsterdam-devnet-2' of https://github.com/sigp/lighthouse into glamsterdam-devnet-2 2026-05-01 12:04:23 +02:00
Eitan Seri-Levi
cbe7bec40d Update beacon_node/beacon_chain/src/pending_payload_cache/mod.rs 2026-05-01 11:10:49 +02:00
Eitan Seri-Levi
5ce7c59f5e Rename validate_full_data_columns_with_commitments 2026-05-01 11:10:15 +02:00
Eitan Seri-Levi
2120ebba9b smol refactor 2026-05-01 10:54:50 +02:00
Eitan Seri-Levi
8510bb462d smol cleanup 2026-05-01 10:51:05 +02:00
dapplion
d75963bb86 Address remaining review comments
- pending_column.rs: split try_to_sidecar into is_complete-checked to_sidecar
  with typed PendingColumnError so 'incomplete column' is no longer conflated
  with VariableList size-bound failures (jimmygchen, dapplion).
- pending_components.rs: get_cached_data_columns filters by is_complete first,
  then logs an error if a complete column fails to assemble (dknopik's sanity
  check on filter_map silent drops).
- data_column_verification.rs: add the missing column.slot == bid.slot
  consistency check in validate_data_column_sidecar_for_gossip_gloas, using
  the previously-defined-but-unused BlockSlotMismatch error variant
  (jimmygchen).
2026-05-01 10:28:59 +02:00
dapplion
0ce058835a Address review comments
- data_availability_checker.rs: use !gloas_enabled() instead of < ForkName::Gloas
  (jimmygchen, dapplion).
- beacon_chain.rs: get_data_columns checks data_availability_checker first,
  then pending_payload_cache (dapplion).
- pending_components.rs: merge_data_columns drops the unused Result return
  (jimmygchen). num_completed_columns uses filter() instead of filter_map (jimmygchen).
- pending_column.rs: TODO marker on the hard-coded Gloas variant in
  try_to_sidecar (jimmygchen).
- pending_payload_cache/mod.rs: gloas_spec test helper collapsed to
  ForkName::Gloas.make_genesis_spec(E::default_spec()) (jimmygchen).
- gossip_methods.rs / sync/manager.rs: replace UnknownBlockHashFromAttestation
  fallback with TODO(gloas) for proper Gloas lookup sync (dapplion).
2026-05-01 10:16:06 +02:00
dapplion
dac8a6ec8d Gloas: fix test failures (KZG verifier wiring, harness columns, WSS sync)
Brings the FORK_NAME=gloas beacon_chain test suite from 31 failures to green:

- v1 KZG batch verifier couldn't verify Gloas columns. Added
  verify_columns_against_block helper that picks commitments per fork
  (Fulu: inline on column; Gloas: signed_execution_payload_bid).
- BeaconChainHarness::process_envelope didn't persist columns. Now mirrors
  what production does in import_available_execution_payload_envelope.
- get_or_reconstruct_blobs returned an error for Gloas. Now short-circuits to
  Ok(None); WSS test copies columns from source to dest directly.
- update_data_column_signed_header (block_verification tests) only handled
  Fulu shape. Added a Gloas branch that re-keys to canonical_root.
- BlockError::EnvelopeBlockRootUnknown changed to tuple variant.
- Removed duplicate process_payload_envelope_availability.
2026-05-01 10:06:52 +02:00
dapplion
73ba76312e Gloas: fix test failures (KZG verifier wiring, harness columns, WSS sync)
Brings the FORK_NAME=gloas beacon_chain test suite from 31 failures to green:

- v1 KZG batch verifier couldn't verify Gloas columns. Added
  verify_columns_against_block helper that picks commitments per fork
  (Fulu: inline on column; Gloas: signed_execution_payload_bid).
- BeaconChainHarness::process_envelope didn't persist columns. Now mirrors
  what production does in import_available_execution_payload_envelope.
- get_or_reconstruct_blobs returned an error for Gloas. Now short-circuits to
  Ok(None); WSS test copies columns from source to dest directly.
- update_data_column_signed_header (block_verification tests) only handled
  Fulu shape. Added a Gloas branch that re-keys to canonical_root.
- BlockError::EnvelopeBlockRootUnknown changed to tuple variant.
- Removed duplicate process_payload_envelope_availability.
2026-05-01 09:59:53 +02:00
Eitan Seri-Levi
aa531bac22 yeet some comments 2026-05-01 03:55:09 +02:00