Skip to content

feat(consensus): fast confirmation page - #448

Open
samcm wants to merge 2 commits into
masterfrom
feat/fast-confirmation
Open

samcm wants to merge 2 commits into
masterfrom
feat/fast-confirmation

Conversation

@samcm

@samcm samcm commented Sep 30, 2026

Copy link
Copy Markdown
Member

Adds a Fast Confirmation page at /ethereum/consensus/fast-confirmation. Every epoch a fast confirmation node has scored since it started reporting is drawn as one cell, one row per UTC day, coloured by the slowest block in that epoch, and clicking a cell or an entry in the scar list opens the epoch's 32 blocks per client. The page also has a per-client summary and the distribution of time to fast confirmation against time to finality. API types are added for the three fct_block_fast_confirmation_* tables from ethpandaops/xatu-cbt#304.

Adds /ethereum/consensus/fast-confirmation. Every epoch a fast confirmation
node has scored since it started reporting is drawn as one cell, one row per
UTC day, coloured by the slowest block in the epoch. Clicking a cell or a
scar opens that epoch's 32 blocks per client. The page also lists the worst
runs of late confirmations, the distribution of time to fast confirmation
against time to finality, and a per-client summary.

API types regenerated for fct_block_fast_confirmation_by_node,
fct_block_fast_confirmation_by_client_hourly and
fct_block_fast_confirmation_by_client_daily.
@samcm
samcm requested a review from Savid as a code owner September 30, 2026 08:17

@redpandabot redpandabot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Summary

Adds a Fast Confirmation page under /ethereum/consensus/fast-confirmation with an epoch lattice, per-client summary, scar list, epoch detail and a distribution chart, plus generated API types for the three fct_block_fast_confirmation_* tables. The page code follows existing repo conventions and the utility logic and tests are consistent. Only two minor display-accuracy issues found, nothing blocking.

Issues

  • 🟢 src/pages/ethereum/consensus/fast-confirmation/fast-confirmation.utils.ts:260 — Epoch straddling an hour boundary can be shown as 'not reporting' — see the thread on that line
  • 🟢 src/pages/ethereum/consensus/fast-confirmation/components/ConfirmationDistribution/ConfirmationDistribution.tsx:85 — Histogram is per node-observation but labelled 'Share of blocks' — The distribution feeds every canonical (block, node) row from fct_block_fast_confirmation_by_node without deduplicating per block (unlike summarizeSlots, which takes the min across nodes), so the y-axis 'Share of blocks (%)' actually measures share of observations and weights blocks by how many nodes reported them.

Reviewed @ b7fc6463
"All non-trivial abstractions, to some degree, are leaky." — Joel Spolsky

startTime,
day: (dayStart - firstDay) / 86_400,
column: Math.min(columns - 1, Math.floor((startTime - dayStart) / EPOCH_SECONDS)),
tier: covered.has(hour) ? tierForMs(lateEntry ? lateEntry.worstMs : null) : 'none',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟢 Epoch straddling an hour boundary can be shown as 'not reporting'

buildField paints an epoch only if the hour containing its start is covered (covered.has(hour)), but ~1 in 9 epochs spans two hours; if the node only scored that epoch's blocks in the second hour, the cell renders as 'Node not reporting' despite the epoch being scored.

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