Commit Graph

4015 Commits

Author SHA1 Message Date
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
Lion - dapplion
7148bfcdd1 Implement beacon_blocks_by_head (#9237)
Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
2026-05-07 02:41:01 +00:00
Lion - dapplion
31e5f308c3 Generalise reconstruct_historic_states for ranged replay (#9222)
Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
2026-05-06 02:25:46 +00: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
jking-aus
d9be76afe7 fix: payload_attestation_data when no block received for slot (#9225)
Addresses issue #9220

The `payload_attestation_data` endpoint returns 400 when no block has been received for the requested slot. This causes the VC to log at CRIT level for what is expected behaviour per spec: validators should simply not submit a payload attestation when no block has been seen.


  - Return 404 (Not Found) instead of 400 from `payload_attestation_data` when no block exists for the slot. This is consistent with other beacon api endpoints.
- Downgrade the VC log from `crit` to `debug` when a 503 is received, since this is an expected no-op per spec.
- Add `BlockNotFound` rejection type to `warp_utils`.
- Add a test asserting the 404 response for an empty slot.


Co-Authored-By: Josh King <josh@sigmaprime.io>

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

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
2026-05-04 23:39:33 +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
22da18f640 Merge remote-tracking branch 'origin/gloas-range-sync' into glamsterdam-devnet-2 2026-05-04 16:51:06 +03:00
Eitan Seri-Levi
3dea23c6ba Conflicts 2026-05-04 16:50:56 +03:00
Eitan Seri-Levi
e0048b5206 Another hack 2026-05-04 16:50:35 +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
3015fa4842 Merge branch 'gloas-range-sync' of https://github.com/eserilev/lighthouse into gloas-range-sync 2026-05-04 14:58:07 +03:00
Eitan Seri-Levi
6af1a927b8 Actually do something with the responses... 2026-05-04 14:57:49 +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
e2171419df Merge branch 'unstable' of https://github.com/sigp/lighthouse into glamsterdam-devnet-2 2026-05-01 18:04:19 +02:00
jking-aus
330348ea14 fix: prevent duplicate column reconstruction dispatch (#9250)
Fixes a flaky CI failure in `data_column_reconstruction_at_deadline` where 2 `column_reconstruction` events are emitted instead of the expected 1.


  - Change `queued_column_reconstructions` from `HashMap<Hash256, DelayKey>` to `HashMap<Hash256, Option<DelayKey>>`, where `None` indicates reconstruction was already dispatched.
- On dispatch (`ReadyColumnReconstruction`), set the entry to `None` instead of removing it. This prevents a subsequent gossip column from inserting a fresh reconstruction request into the now-vacant slot.
- Prune stale `None` entries on each dispatch to keep the map bounded.


Co-Authored-By: Josh King <josh@sigmaprime.io>
2026-05-01 12:44:25 +00: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
47bcd0b347 Fix TODO 2026-05-01 11:12:18 +02:00
Michael Sproul
8b8124d4a4 Avoid 0x00 block hashes in fcU (#9233)
- Avoid sending 0x00 block hashes for the safe and finalized block hashes post-Gloas.
- Add code to check this inside the mock EL, which will be reached in all Gloas beacon chain tests


Co-Authored-By: Michael Sproul <michael@sigmaprime.io>
2026-05-01 09:12:11 +00: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
Eitan Seri-Levi
f14e7b13b5 remove unneeded field 2026-05-01 03:50:50 +02:00
Eitan Seri-Levi
82f28433aa Merge branch 'gloas-payload-cache' of https://github.com/dknopik/lighthouse into gloas-payload-cache 2026-05-01 03:32:10 +02:00
Eitan Seri-Levi
f7c7ed8457 clean up gloas-payload-cache 2026-05-01 03:31:51 +02:00
dapplion
a4e8b689d8 pending payload cache: drop unused vec ctor arg 2026-05-01 03:30:07 +02:00
dapplion
33c250b54f pending payload cache: restore vec-backed column shape 2026-05-01 03:30:07 +02:00
Eitan Seri-Levi
64c53c6553 remove duplicate fn impl 2026-05-01 03:13:36 +02:00
Eitan Seri-Levi
fd1a8e1564 use slot so we dont hit the cache twice 2026-05-01 02:54:57 +02:00
Eitan Seri-Levi
378eaedf9c Merge branch 'unstable' of https://github.com/sigp/lighthouse into gloas-payload-cache 2026-05-01 02:22:42 +02:00
Eitan Seri-Levi
e9ffd1913e smol fixes 2026-05-01 02:17:20 +02:00
Eitan Seri-Levi
60093f3b94 minor fixes 2026-05-01 02:15:39 +02:00
Eitan Seri-Levi
4b76f4da28 minor fixes 2026-05-01 02:12:46 +02:00