Skip to content

cl/beacon: report pending blob backfill availability - #23213

Draft
domiwei wants to merge 1 commit into
kewei/fix-blob-backfill-boundaryfrom
kewei/blob-backfill-availability
Draft

cl/beacon: report pending blob backfill availability#23213
domiwei wants to merge 1 commit into
kewei/fix-blob-backfill-boundaryfrom
kewei/blob-backfill-availability

Conversation

@domiwei

@domiwei domiwei commented Aug 12, 2026

Copy link
Copy Markdown
Member

Summary

  • return a retryable JSON 503 when requested canonical blob data is still pending backfill instead of returning a misleading empty success
  • track completed canonical coverage as precise Deneb/Fulu ranges and preserve partial progress across retries
  • accept legal partial or reordered blob_sidecars_by_root responses, verify them by identity and proof, and retry only missing sidecars
  • make Deneb and Fulu recovery failures truthful and repair stale Fulu recovery state from actual persisted sidecars
  • invalidate completion before canonical commits become visible and publish the new head only after a successful commit
  • harden persisted blob metadata and Beacon API selection against partial, malformed, duplicate, or oversized input

Relationship to #23138

This is a stacked follow-up to #23138. That PR remains the focused #22429 fix: the exclusive FrozenBlobs() boundary, the lower peer startup gate, and the bounded request safety that gate requires.

This PR starts at the API behavior requested during review. Returning 503 safely requires trustworthy availability state across legal partial network responses, fork-specific retention windows, Fulu recovery, canonical reorgs, commit visibility, and partial persisted data; those cohesive lifecycle changes live here.

The temporary base is kewei/fix-blob-backfill-boundary. After #23138 merges, this PR can be retargeted to main without changing its effective diff.

API compatibility

The Beacon API endpoint schemas do not explicitly enumerate 503 for these blob endpoints. This PR intentionally uses it as an Erigon extension for temporary backfill unavailability. The response follows the shared JSON error shape (code and message) and uses Content-Type: application/json.

Available requested indices or versioned hashes remain a 200. Empty blocks, unmatched filters, side branches, frozen data, and completed or disabled backfill preserve their normal behavior.

Validation

  • go test ./cl/phase1/network ./cl/beacon/handler ./cl/das ./cl/persistence/blob_storage ./cl/phase1/stages ./cl/phase1/forkchoice ./cmd/caplin/caplin1 -count=1
  • make lint (complete pass: 0 issues)
  • the pre-split combined tree passed make erigon integration and full make test-all; the rebuilt follow-up was revalidated with the affected package set above
  • five independent Standards, Spec, and Adversarial review/fix rounds converged with no remaining High/Medium finding other than the explicitly documented non-standard 503

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant