Repository navigation
l1-finality: Solana finality measured by wall clock after Alpenglow - #3169
Merged
Merged
Conversation
…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.
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 existingl1_finality_wallclock_*metrics (same as BNB/Avalanche). Probe: p50 371 ms / p90 654 ms; cross-check againstgetSlot(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.