Commit Graph

1807 Commits

Author SHA1 Message Date
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
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
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
dapplion
48b24e9029 Use SignedExecutionPayloadBid directly in pending payload cache
- Replace the `PendingPayloadBid` projection (slot + blob_kzg_commitments)
  with `Arc<SignedExecutionPayloadBid<E>>`. Cloning becomes a cheap Arc
  bump and the bid carries enough context for future bid<->envelope
  cross-checks. Add a `signed_payload_bid_from_block` helper.
- `PendingColumn` switches from a pre-sized `Vec<Option<_>>` to a sparse
  `HashMap<usize, _>`; the `new_with_capacity(num_blobs)` constructor is
  gone since callers no longer need to know the blob count up front.
- `PendingComponents::merge_data_columns` takes a slice instead of an
  owning iterator (it only borrows + clones cells).
- Store `block_root` in `PendingComponents` so `make_available` and
  `get_cached_data_columns` no longer require it as an argument (the
  arg was misnamed `block_hash` in `make_available`).
- Rename `PendingComponents::empty` -> `new`; it is the only constructor.
2026-05-01 02:05:48 +02:00
Daniel Knopik
16a3dfbc89 fix events test 2026-05-01 01:54:05 +02:00
Daniel Knopik
361bc374dd fix gloas tests 2026-05-01 01:20:18 +02:00
Josh King
aa6fdb8d6a fix: tighten genesis block fallback to match empty body root only 2026-04-30 17:28:09 +02:00
Eitan Seri-Levi
28a9342831 Merge branch 'unstable' of https://github.com/sigp/lighthouse into gloas-range-sync 2026-04-30 15:54:22 +02:00
Josh King
22a207ffa8 fix: fallback to empty genesis block for external genesis states 2026-04-30 15:26:20 +02:00
Daniel Knopik
8e199552d6 Fix pending_payload_cache tests for sampling column filtering
Tests were switched from put_kzg_verified_custody_data_columns (no
filtering) to put_rpc_custody_columns (filters to sampling columns) but
assertions still assumed all provided columns would be stored. Account
for the sampling filter in each test's setup and assertions.
2026-04-30 15:25:00 +02:00
dapplion
23d5be1a0e Fix pending payload cache test lint 2026-04-30 13:41:51 +02:00
dapplion
0b7397eb4e Refactor 2026-04-30 13:39:05 +02:00
Eitan Seri-Levi
0fe75382da fmt 2026-04-30 13:05:30 +02:00
hopinheimer
5360e76696 fix genesis_block init in tests 2026-04-30 12:52:17 +02:00