From f2b945a5b5a8724f9426bf5a6e6e3404b09fef41 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Mon, 17 Nov 2025 13:07:42 +1100 Subject: [PATCH] Do not require blobs from checkpoint servers from Fulu epochs. (#8413) Addressed this comment here: https://github.com/sigp/lighthouse/issues/6837#issuecomment-3509209465 Lighthouse can only checkpoint sync from a server that can serve blob sidecars, which means they need to be at least custdoying 50% of columns (semi-supernodes) This PR lifts this constraint, as blob sidecar endpoint is getting deprecated in Fulu, and we plan to fetch the checkpoint data columns from peers (#6837) Co-Authored-By: Jimmy Chen --- beacon_node/client/src/builder.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/beacon_node/client/src/builder.rs b/beacon_node/client/src/builder.rs index c3c827f0aa..d55afbffe6 100644 --- a/beacon_node/client/src/builder.rs +++ b/beacon_node/client/src/builder.rs @@ -345,7 +345,13 @@ where .map_err(|e| format!("Unable to parse weak subj state SSZ: {:?}", e))?; let anchor_block = SignedBeaconBlock::from_ssz_bytes(&anchor_block_bytes, &spec) .map_err(|e| format!("Unable to parse weak subj block SSZ: {:?}", e))?; - let anchor_blobs = if anchor_block.message().body().has_blobs() { + + // `BlobSidecar` is no longer used from Fulu onwards (superseded by `DataColumnSidecar`), + // which will be fetched via rpc instead (unimplemented). + let is_before_fulu = !spec + .fork_name_at_slot::(anchor_block.slot()) + .fulu_enabled(); + let anchor_blobs = if is_before_fulu && anchor_block.message().body().has_blobs() { let max_blobs_len = spec.max_blobs_per_block(anchor_block.epoch()) as usize; let anchor_blobs_bytes = anchor_blobs_bytes .ok_or("Blobs for checkpoint must be provided using --checkpoint-blobs")?; @@ -409,7 +415,11 @@ where debug!("Downloaded finalized block"); - let blobs = if block.message().body().has_blobs() { + // `get_blob_sidecars` API is deprecated from Fulu and may not be supported by all servers + let is_before_fulu = !spec + .fork_name_at_slot::(finalized_block_slot) + .fulu_enabled(); + let blobs = if is_before_fulu && block.message().body().has_blobs() { debug!("Downloading finalized blobs"); if let Some(response) = remote .get_blob_sidecars::(BlockId::Root(block_root), None, &spec)