Skip to content

l1-finality: Solana finality measured by wall clock after Alpenglow - #3169

Merged
Flotapponnier merged 1 commit into
devfrom
fix/solana-finality-wallclock
Oct 22, 2026
Merged

Flotapponnier merged 1 commit into
devfrom
fix/solana-finality-wallclock

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Solana's finality was computed from getBlockTime (whole seconds). Since Alpenglow (mainnet 2026-10-21 ~15:00 UTC) finality is sub-second, so the row read 0/1 s and published 0.14 s, which was the share of samples straddling a second, not a duration; the chart showed 1.0 s from the same rounding.

New solana_ws.go: slotSubscribe + rootSubscribe, lag = first root ≥ S minus first sight of S, in ms, on the existing l1_finality_wallclock_* metrics (same as BNB/Avalanche). Probe: p50 371 ms / p90 654 ms; cross-check against getSlot(finalized) polled every 250 ms: p50 373 ms. Spec queries and Solana copy updated for Alpenglow.

Checks: go vet, go test (parser test added), pnpm validate. Ran the harness locally: subscription connects, lags 293 to 491 ms.

…made it sub-second

Solana's row subtracted getBlockTime of the processed slot from that of
the finalized one. getBlockTime is whole seconds. Alpenglow went live on
mainnet on 2026-10-21 around 15:00 UTC and finality fell under a second,
so the difference read 0 on most samples and 1 on the rest: the published
"0.14 s" was the share of samples straddling a second boundary, and the
chart's "1.0 s" the same rounding. The harness already retired BNB and
Avalanche from this method for the same reason.

solana_ws.go measures it as evm_ws.go does: T1 = first slotSubscribe
notification of slot S, T2 = first rootSubscribe root >= S, lag in ms,
published on the existing l1_finality_wallclock_* metrics. A 60 s probe
gave p50 371 ms, p90 654 ms; polling getSlot(finalized) every 250 ms
instead of using roots gave p50 373 ms. Spec queries, tag, formula,
methodology and the Solana copy move to the new method.
@Flotapponnier
Flotapponnier merged commit f2191e6 into dev Oct 22, 2026
2 checks passed
bakabhai993 pushed a commit to bakabhai993/OpenChainBench that referenced this pull request Oct 23, 2026
…made it sub-second (ChainBench#3169)

Solana's row subtracted getBlockTime of the processed slot from that of
the finalized one. getBlockTime is whole seconds. Alpenglow went live on
mainnet on 2026-10-21 around 15:00 UTC and finality fell under a second,
so the difference read 0 on most samples and 1 on the rest: the published
"0.14 s" was the share of samples straddling a second boundary, and the
chart's "1.0 s" the same rounding. The harness already retired BNB and
Avalanche from this method for the same reason.

solana_ws.go measures it as evm_ws.go does: T1 = first slotSubscribe
notification of slot S, T2 = first rootSubscribe root >= S, lag in ms,
published on the existing l1_finality_wallclock_* metrics. A 60 s probe
gave p50 371 ms, p90 654 ms; polling getSlot(finalized) every 250 ms
instead of using roots gave p50 373 ms. Spec queries, tag, formula,
methodology and the Solana copy move to the new method.

(cherry picked from commit f2191e6)
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