Skip to content

fix: consolidate blob source test into single summary log with supernode detection#21719

Merged
alexghr merged 1 commit into
nextfrom
claudebox/fix-blob-sink-warns
Mar 23, 2026
Merged

fix: consolidate blob source test into single summary log with supernode detection#21719
alexghr merged 1 commit into
nextfrom
claudebox/fix-blob-sink-warns

Conversation

@AztecBot

@AztecBot AztecBot commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator

Fix A-700

Summary

  • Reworks testSources() to detect supernodes by probing the blob sidecar endpoint
  • Keeps individual per-source validation logs (info for reachable, error for failures)
  • Emits a consolidated summary after all sources are validated:
    Blob client running with consensusSuperNodes=N archiveSources=N blobSinks=N. M consensus client(s) ignored because they are not running in supernode or semi-supernode mode
  • Warns if no consensus supernodes are reachable; throws if no sources at all (unless blobAllowEmptySources)

How supernode detection works

Post-Fusaka (PeerDAS), non-supernode beacon nodes no longer serve the blob sidecar endpoint. Each consensus host is tested by:

  1. Fetching /eth/v1/beacon/headers/head to verify reachability and get the head slot
  2. Fetching /eth/v1/beacon/blobs/{headSlot} to check blob sidecar support
  3. A 200 response (even with an empty data array for a slot with no blobs) means the node serves blob sidecars (supernode/semi-supernode)
  4. A non-200 response means the node does not serve blob sidecars

Log level logic

  • info — at least one consensus supernode available
  • warn — no consensus supernodes (but other sources like archive/filestore may exist)
  • throw — no sources at all (unless blobAllowEmptySources)

@AztecBot AztecBot added ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels Mar 18, 2026
@AztecBot AztecBot changed the title fix: demote blob source warnings to info when source is simply unconfigured fix: consolidate blob source test into single summary log with supernode detection Mar 18, 2026
@aminsammara

Copy link
Copy Markdown
Contributor

Functionally looks good! Added backport to v4-next label

Base automatically changed from merge-train/spartan to next March 20, 2026 22:34
Comment on lines +134 to +141
const blobRes = await this.fetch(blobUrl, blobOptions);
if (blobRes.ok) {
this.log.info(`L1 consensus host serves blob sidecars (supernode)`, { l1ConsensusHostUrl });
consensusSuperNodes++;
} else {
this.log.info(`L1 consensus host does not serve blob sidecars`, { l1ConsensusHostUrl });
consensusNonSuperNodes++;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have verified this API call for lighthouse running in supernode and non-supernode mode and it works as expected 👍

@alexghr alexghr marked this pull request as ready for review March 23, 2026 15:15
@alexghr alexghr force-pushed the claudebox/fix-blob-sink-warns branch from e64c294 to b123347 Compare March 23, 2026 15:23
@alexghr alexghr enabled auto-merge March 23, 2026 15:23
@alexghr alexghr added this pull request to the merge queue Mar 23, 2026
Merged via the queue into next with commit 6d9ded7 Mar 23, 2026
19 checks passed
@alexghr alexghr deleted the claudebox/fix-blob-sink-warns branch March 23, 2026 16:15
AztecBot pushed a commit that referenced this pull request Mar 23, 2026
…ode detection (#21719)

Fix A-700

## Summary
- Reworks `testSources()` to detect supernodes by probing the blob
sidecar endpoint
- Keeps individual per-source validation logs (info for reachable, error
for failures)
- Emits a consolidated summary after all sources are validated:
`Blob client running with consensusSuperNodes=N archiveSources=N
blobSinks=N. M consensus client(s) ignored because they are not running
in supernode or semi-supernode mode`
- Warns if no consensus supernodes are reachable; throws if no sources
at all (unless `blobAllowEmptySources`)

## How supernode detection works
Post-Fusaka (PeerDAS), non-supernode beacon nodes no longer serve the
blob sidecar endpoint. Each consensus host is tested by:
1. Fetching `/eth/v1/beacon/headers/head` to verify reachability and get
the head slot
2. Fetching `/eth/v1/beacon/blobs/{headSlot}` to check blob sidecar
support
3. A 200 response (even with an empty data array for a slot with no
blobs) means the node serves blob sidecars (supernode/semi-supernode)
4. A non-200 response means the node does not serve blob sidecars

## Log level logic
- `info` — at least one consensus supernode available
- `warn` — no consensus supernodes (but other sources like
archive/filestore may exist)
- `throw` — no sources at all (unless `blobAllowEmptySources`)
@AztecBot

Copy link
Copy Markdown
Collaborator Author

✅ Successfully backported to backport-to-v4-next-staging #21899.

AztecBot pushed a commit that referenced this pull request Mar 24, 2026
…ode detection (#21719)

Fix A-700

## Summary
- Reworks `testSources()` to detect supernodes by probing the blob
sidecar endpoint
- Keeps individual per-source validation logs (info for reachable, error
for failures)
- Emits a consolidated summary after all sources are validated:
`Blob client running with consensusSuperNodes=N archiveSources=N
blobSinks=N. M consensus client(s) ignored because they are not running
in supernode or semi-supernode mode`
- Warns if no consensus supernodes are reachable; throws if no sources
at all (unless `blobAllowEmptySources`)

## How supernode detection works
Post-Fusaka (PeerDAS), non-supernode beacon nodes no longer serve the
blob sidecar endpoint. Each consensus host is tested by:
1. Fetching `/eth/v1/beacon/headers/head` to verify reachability and get
the head slot
2. Fetching `/eth/v1/beacon/blobs/{headSlot}` to check blob sidecar
support
3. A 200 response (even with an empty data array for a slot with no
blobs) means the node serves blob sidecars (supernode/semi-supernode)
4. A non-200 response means the node does not serve blob sidecars

## Log level logic
- `info` — at least one consensus supernode available
- `warn` — no consensus supernodes (but other sources like
archive/filestore may exist)
- `throw` — no sources at all (unless `blobAllowEmptySources`)
Thunkar pushed a commit that referenced this pull request Mar 24, 2026
…ode detection (#21719)

Fix A-700

## Summary
- Reworks `testSources()` to detect supernodes by probing the blob
sidecar endpoint
- Keeps individual per-source validation logs (info for reachable, error
for failures)
- Emits a consolidated summary after all sources are validated:
`Blob client running with consensusSuperNodes=N archiveSources=N
blobSinks=N. M consensus client(s) ignored because they are not running
in supernode or semi-supernode mode`
- Warns if no consensus supernodes are reachable; throws if no sources
at all (unless `blobAllowEmptySources`)

## How supernode detection works
Post-Fusaka (PeerDAS), non-supernode beacon nodes no longer serve the
blob sidecar endpoint. Each consensus host is tested by:
1. Fetching `/eth/v1/beacon/headers/head` to verify reachability and get
the head slot
2. Fetching `/eth/v1/beacon/blobs/{headSlot}` to check blob sidecar
support
3. A 200 response (even with an empty data array for a slot with no
blobs) means the node serves blob sidecars (supernode/semi-supernode)
4. A non-200 response means the node does not serve blob sidecars

## Log level logic
- `info` — at least one consensus supernode available
- `warn` — no consensus supernodes (but other sources like
archive/filestore may exist)
- `throw` — no sources at all (unless `blobAllowEmptySources`)
AztecBot added a commit that referenced this pull request Mar 25, 2026
BEGIN_COMMIT_OVERRIDE
fix(aztec-up): narrow PATH cleanup regex to avoid removing user PATH
entries (#21828)
fix: consolidate blob source test into single summary log with supernode
detection (#21719)
fix: use anchor block on getL1ToL2MsgWitness (#21872)
fix: make sure queries are not made ahead of the anchor block (#21874)
chore(docs): backport docs infrastructure changes to v4 (#21437)
chore: backport PR #21836 (fix: explicitly handle initial block case for
getBlockHashMembershipWitness) to v4-next (#21891)
chore: backport PR #21813 (fix(aztec-up): strip leading v prefix from
version strings) to v4-next (#21912)
docs: document defi-wonderland immutable macro (#21764)
fix: pin typescript and harden lockfile check in docs examples CI (v4
backport) (#21914)
docs: expand circuit profiling guide and document kernel gate cost
overhead (#21770)
feat: cli-wallet (#21757)
chore: sync backport staging with v4-next HEAD (#21931)
fix: bot gas estimations (backport #21945) (#21947)
refactor(aztec-nr): use logging wrappers in
compute_note_hash_and_nullifier (#21897)
fix: backport v4 next staging (#21934)
fix: make PXE#getSyncedBlockHeader a concurrency=1 job to prevent IDB tx
liveness issues (#21944)
feat: add error page mapping for incompatible oracles (#21943)
fix(aztec-up): validate semver in uninstall to prevent path traversal
(#21892)
chore: merge v4-next into backport staging (fix ancestry) (#21954)
fix(aztec-up): add truncation protection to install scripts (#21896)
fix: noir format in compute_note_hash_and_nullifier.nr (#21956)
fix(stdlib): decode `EthAddress`, `FunctionSelector` and wrapped field
structs in `AbiDecoder` (#21926)
chore: update noir to nightly-2026-02-12-patch.1 (#21960)
fix: ensure empty docs examples does not populate yarn lock backport
(#21963)
fix: docs examples does not build on simple bootstrap backport (#21964)
fix: add rc/testnet version detection to API reference pages (#21966)
docs: document EmbeddedWallet automatic gas estimation and private
authwits (#21790)
fix(pxe): robust error handling in message processing (backport #21093)
(#21981)
chore: manually recreate backport (#21969)
chore: (A-779) load all accounts before calling
LogService.#getSecretsForSenders (#21923)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-to-v4-next ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants