Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
210 commits
Select commit Hold shift + click to select a range
3641d46
chore(obs): temporary [DRAFT-TRACE] logs on bench draft fallback path…
Flotapponnier May 26, 2026
026cc0e
fix(harness): bump Astralane default tip 500k → 1M lamports (#148)
Flotapponnier May 26, 2026
0a994c6
fix(perf): bump Prom timeout 4s→10s + cron pre-warms bench cache (#149)
Flotapponnier May 26, 2026
002c826
fix(logo): wrap 1RPC / Blocknative / Lava / Tenderly / Jito / Astrala…
Flotapponnier May 26, 2026
0825020
fix(logo): also chip dydx v4 and Sky maker (#151)
Flotapponnier May 26, 2026
0834a83
fix(logo): chip Merkle, Moralis, Nodies — invisible in dark mode (#152)
Flotapponnier May 26, 2026
941cb15
fix(logo): introduce NEEDS_DARK_CHIP for white-fill marks (Jito, Astr…
Flotapponnier May 26, 2026
3e7c8bb
fix(build): tolerate all-bench-draft state instead of crashing build …
Flotapponnier May 26, 2026
7be72a8
crop 1rpc/tenderly/lava logos to icon-only (#155)
Flotapponnier May 27, 2026
3624543
replace blocknative logo with cleaner vector version (#156)
Flotapponnier May 27, 2026
e243e12
feat(bench-005): add 4 providers to network-coverage (#157)
Flotapponnier May 27, 2026
0677b79
feat(products): add coinpaprika/covalent/coinstats/sim-dune/dune to p…
Flotapponnier May 27, 2026
62b7fb8
fix(bench-005): rename sim-dune to dune + sync OSS harness mirror wit…
Flotapponnier May 27, 2026
3ca6c5b
feat(bench-027): add Mobula Swap-Send to solana-tx-landing-latency (#…
Flotapponnier May 27, 2026
ba06cfb
fix(bench-027): trim Mobula formula to 240 chars (Zod schema limit) (…
Flotapponnier May 27, 2026
1520fd7
fix(bench-027): rename Mobula Swap-Send to Mobula in product ledger (…
Flotapponnier May 27, 2026
785a16d
feat(products): consolidate alias slugs (helius-sender/avalanche-offi…
Flotapponnier May 27, 2026
2e749e2
feat(bench): simplify provider display names to brand-only across ben…
Flotapponnier May 27, 2026
bcaa28b
fix(distribution): auto log scale when dynamic range > 50x
Flotapponnier May 28, 2026
4aa2991
Merge pull request #165 from ChainBench/fix/distribution-log-scale
Flotapponnier May 28, 2026
2f55f70
fix(distribution): anchor left edge at fieldMin, not absolute zero
Flotapponnier May 29, 2026
e856b58
Merge pull request #166 from ChainBench/fix/distribution-min-baseline
Flotapponnier May 29, 2026
4819e5e
scrub deploy IDs and team scope from public workflow
Flotapponnier May 29, 2026
7ae2204
Merge pull request #167 from ChainBench/chore/scrub-deploy-leak
Flotapponnier May 29, 2026
f38518b
feat(bench-001): add GMGN as a provider (Solana-only) + sync harness
Flotapponnier May 29, 2026
601d757
chore(harness/aggregator-head-lag): drop committed build binary + git…
Flotapponnier May 29, 2026
1abb424
Merge pull request #168 from ChainBench/feat/add-gmgn-bench-001
Flotapponnier May 29, 2026
885ee65
scrub slack webhook and grafana URL from metadata-coverage
Flotapponnier May 29, 2026
1b52175
Merge pull request #169 from ChainBench/chore/scrub-slack-webhook
Flotapponnier May 29, 2026
6f1b587
remove alerting from metadata-coverage harness
Flotapponnier May 29, 2026
aa2cc52
Merge pull request #170 from ChainBench/chore/remove-alerting-metadat…
Flotapponnier May 29, 2026
97991e6
restore alerting with env-var webhook (envsubst pattern)
Flotapponnier May 29, 2026
5fcdfd7
Merge pull request #171 from ChainBench/chore/restore-alerting-env-we…
Flotapponnier May 29, 2026
4ddc636
feat(products): wire GMGN logo + registry entry for /products/gmgn
Flotapponnier May 29, 2026
a780e4f
Merge pull request #172 from ChainBench/feat/wire-gmgn-product-page
Flotapponnier May 29, 2026
49190b3
rename relay-link-revenue bench to bridge-revenue
Flotapponnier May 29, 2026
53e146d
Merge pull request #173 from ChainBench/chore/rename-relay-to-bridge-…
Flotapponnier May 29, 2026
a133265
add 30d range to time-series chart
Flotapponnier May 29, 2026
b3f3f81
Merge pull request #174 from ChainBench/feat/timeseries-30d-range
Flotapponnier May 29, 2026
def57ff
drop relay-link-revenue redirect (low traffic, not worth keeping)
Flotapponnier May 29, 2026
529d199
Merge pull request #175 from ChainBench/chore/drop-relay-bench-redirect
Flotapponnier May 29, 2026
b90896f
fix bridge-revenue seo_description over 320-char Zod limit
Flotapponnier May 29, 2026
65a7a35
Merge pull request #176 from ChainBench/fix/bridge-revenue-seo-length
Flotapponnier May 29, 2026
a66fc47
rpc-capabilities: per-region metric labels + multi-region YAML aggreg…
Flotapponnier May 29, 2026
177c2ca
rpc-capabilities: auto-detect RAILWAY_REPLICA_REGION + 3-region text …
Flotapponnier May 29, 2026
d19f38c
Merge pull request #177 from ChainBench/feat/rpc-capabilities-multi-r…
Flotapponnier May 29, 2026
691260d
rpc-capabilities: per-region queries enable region tabs on chart
Flotapponnier May 29, 2026
17130fc
Merge pull request #178 from ChainBench/feat/rpc-capabilities-region-…
Flotapponnier May 29, 2026
534ed24
metadata-coverage: per-chain editorial (Solana/BNB leaders explicit)
Flotapponnier May 29, 2026
21fb988
bridge-fee: flag cross-corridor aggregate; defer per-corridor rewrite
Flotapponnier May 29, 2026
7af475d
bridge-quote-latency: flag cross-corridor aggregate; defer per-corrid…
Flotapponnier May 29, 2026
26920ec
rpc-capabilities: per-chain editorial (Ethereum/Base/BNB/Arbitrum lea…
Flotapponnier May 29, 2026
0ec7fec
seo: chain-aware @id suffix in jsonld + page-metadata helpers
Flotapponnier May 29, 2026
d814a5b
feat(products): add chain-coverage chip + per-chain contract bridge
Flotapponnier May 29, 2026
08ed38d
seo: bench generateMetadata reads ?chain= and renders chain-honest ti…
Flotapponnier May 29, 2026
228f0fa
feat(providers): chain-aware ranking + per-chain win counting
Flotapponnier May 29, 2026
9405abd
seo: emit per-chain OG + twitter cards via generateImageMetadata
Flotapponnier May 29, 2026
5e6569d
feat(badge): accept ?chain= and label scope in SVG
Flotapponnier May 29, 2026
afc516e
feat(seo): chain-aware metadata + OG + sitemap + JSON-LD
Flotapponnier May 29, 2026
bd53b79
feat(products page): render per-chain rank chips and clarify wins column
Flotapponnier May 29, 2026
78a925d
feat(products+badge): chain-aware ranking + per-chain badge + coverag…
Flotapponnier May 29, 2026
759491d
core: bestPerChain + worstPerChain stash with chain-aware helpers
Flotapponnier May 29, 2026
85fb96b
bench-001(yaml): rewrite findings/faq/seo_intro for per-chain leaders
Flotapponnier May 29, 2026
7c4ed0b
feat(core): per-chain best computation + chain-aware placeholders
Flotapponnier May 29, 2026
9f8fb4c
merge: core lib per-chain best computation + placeholders (A1)
Flotapponnier May 29, 2026
1f0de51
merge: editorial rewrite 4 affected YAMLs (A4)
Flotapponnier May 29, 2026
d8f7f1d
merge: SEO surface chain-aware metadata + OG + sitemap + jsonld (A2)
Flotapponnier May 29, 2026
c2228b1
merge: products + badge + chain coverage chip (A3)
Flotapponnier May 29, 2026
fe388e9
Merge pull request #179 from ChainBench/feat/per-chain-fix-bundle
Flotapponnier May 29, 2026
107d90d
rpc-capabilities: declare region as top-level dimension for full-page…
Flotapponnier May 29, 2026
0a84256
Merge pull request #180 from ChainBench/feat/rpc-capabilities-region-…
Flotapponnier May 29, 2026
78fe8c2
fix: persist bestPerChain in KV snapshot + bump cache key
Flotapponnier May 29, 2026
07d36be
Merge pull request #181 from ChainBench/fix/snapshot-bestperchain-rou…
Flotapponnier May 29, 2026
2af9998
fix: compute bestPerChain for filtered variants too
Flotapponnier May 29, 2026
7b5d372
Merge pull request #182 from ChainBench/fix/per-chain-compute-on-filt…
Flotapponnier May 29, 2026
b335d89
fix(products): use relative path for badge preview img
Flotapponnier May 29, 2026
8c56c09
Merge pull request #183 from ChainBench/fix/badge-preview-relative-img
Flotapponnier May 29, 2026
ef8b86f
fix: per-chain chips only for providers with real data on that chain
Flotapponnier May 29, 2026
28d26b5
fix(providers): scope rankPerChainForBench to providersPerChain set
Flotapponnier May 29, 2026
276055b
Merge pull request #184 from ChainBench/fix/per-chain-chips-scope-to-…
Flotapponnier May 29, 2026
3846fa1
fix: bump outer all-benchmarks cache key to v6
Flotapponnier May 29, 2026
ca159d0
Merge pull request #185 from ChainBench/fix/bump-all-benchmarks-cache…
Flotapponnier May 29, 2026
90c55b4
timeseries: click-to-exclude with smooth Y-axis re-zoom
Flotapponnier May 29, 2026
9ccefe2
Merge pull request #186 from ChainBench/feat/timeseries-exclude-with-…
Flotapponnier May 29, 2026
0a355d9
timeseries: drag-to-zoom with smooth Y rescale + reset button
Flotapponnier May 29, 2026
1773b9c
Merge pull request #187 from ChainBench/feat/timeseries-drag-zoom
Flotapponnier May 29, 2026
4dfa037
perf: inherit editorial copy on filtered variants instead of re-compu…
Flotapponnier May 29, 2026
aa2436a
Merge pull request #188 from ChainBench/fix/inherit-editorial-from-ag…
Flotapponnier May 29, 2026
3494e01
timeseries: hide hover dots and tooltip rows for excluded providers
Flotapponnier May 29, 2026
4f16850
Merge pull request #189 from ChainBench/fix/timeseries-excluded-hide-…
Flotapponnier May 29, 2026
d98ebea
fix(ledger): move chain coverage chips to second row so titles fit
Flotapponnier May 29, 2026
82a609e
Merge pull request #190 from ChainBench/fix/ledger-chips-second-row
Flotapponnier May 29, 2026
ac9b7bb
timeseries: per-line hover index + gap-aware dots and tooltip rows
Flotapponnier May 29, 2026
84b7c30
Merge pull request #191 from ChainBench/fix/timeseries-hover-per-line…
Flotapponnier May 29, 2026
7a82993
fix(ledger): only render #1 chips on the bench leaderboard row
Flotapponnier May 29, 2026
a5e2efb
Merge pull request #192 from ChainBench/fix/leaderboard-chips-leaders…
Flotapponnier May 29, 2026
b305147
retire Leaderboard view from bench pages, default count/usd to Distri…
Flotapponnier May 29, 2026
9eeb33c
Merge pull request #193 from ChainBench/feat/retire-leaderboard-view
Flotapponnier May 29, 2026
a9a470f
Revert "Merge pull request #193 from ChainBench/feat/retire-leaderboa…
Flotapponnier May 29, 2026
c627956
Merge pull request #194 from ChainBench/revert/restore-leaderboard-view
Flotapponnier May 29, 2026
82e914b
distribution + ranked-bar: stop clamping sub-1 values to position 0 o…
Flotapponnier May 29, 2026
d408aae
Merge pull request #195 from ChainBench/fix/distribution-log-scale-su…
Flotapponnier May 29, 2026
b0e289c
distribution: position p50 dot at p50Pct% (was stuck at left:0)
Flotapponnier May 29, 2026
75b5daa
Merge pull request #196 from ChainBench/fix/distribution-p50-dot-posi…
Flotapponnier May 29, 2026
d959adb
distribution: redesign as percentile whisker with landmark axis
Flotapponnier May 29, 2026
53f79f1
Merge pull request #197 from ChainBench/feat/distribution-whisker-red…
Flotapponnier May 29, 2026
6cbce68
distribution: add mean marker (outlined ring) to whisker
Flotapponnier May 29, 2026
4ed0ced
Merge pull request #198 from ChainBench/feat/distribution-add-mean-ma…
Flotapponnier May 29, 2026
3b2c5cd
audit: refresh MCP allowlist + fix bridge-revenue 404 source links + …
Flotapponnier May 29, 2026
f6726c4
Merge pull request #199 from ChainBench/chore/audit-stale-refs-and-mc…
Flotapponnier May 29, 2026
d30a4e5
fix(bench): wrap GitHub source link on mobile
Flotapponnier May 31, 2026
97754cc
Merge pull request #201 from ChainBench/fix/source-link-mobile-wrap
Flotapponnier May 31, 2026
8ea9a30
site-header: interactive 3D logo sphere
Flotapponnier May 31, 2026
bbf8afa
Merge pull request #202 from ChainBench/feat/3d-site-logo
Flotapponnier May 31, 2026
87648b5
Revert "Merge pull request #202 from ChainBench/feat/3d-site-logo"
Flotapponnier May 31, 2026
8f4d46d
Merge pull request #204 from ChainBench/revert/3d-site-logo
Flotapponnier May 31, 2026
a0983f4
chore: remove GMGN from bench-001 + assets (#200)
Flotapponnier May 31, 2026
ed7f268
feat(bench-029): add Solana DEX quote latency spec (#203)
Flotapponnier May 31, 2026
e48ecab
chore(harnesses): port solana-quote-latency to public repo + polish s…
Flotapponnier May 31, 2026
6148e9f
chore: update repo refs from OpenChainBench/OpenChainBench to ChainBe…
Flotapponnier May 31, 2026
7f76996
bench-029: flip status draft -> live (Prom has samples on all 4 provi…
Flotapponnier May 31, 2026
e37fde0
feat(products): wire raydium + openocean logos and registry entries (…
Flotapponnier May 31, 2026
fadfff1
bench-029: add region dimension + correct hosting claims (#209)
Flotapponnier May 31, 2026
e7653c9
bench-029: warm-path harness + remove false 'Mobula operates' disclos…
Flotapponnier May 31, 2026
4c93b55
alternatives: pad JSON-LD description to Schema.org Dataset 50-char m…
Flotapponnier May 31, 2026
065b10e
Merge pull request #211 from ChainBench/fix/alternatives-jsonld-descr…
Flotapponnier May 31, 2026
8ace115
fix: bust bench cache keys to surface bench-029 (#212)
Flotapponnier May 31, 2026
795e719
fix(brand): distinct provider colors + sgp region glyph (#213)
Flotapponnier May 31, 2026
042f38e
fix(bench): hide chart's internal region tabs when bench declares dim…
Flotapponnier May 31, 2026
b81059a
site-header: 3D logo on desktop, SVG on touch (#215)
Flotapponnier May 31, 2026
f7dc0ee
mobile: reliable sticky header + soften dot pattern (#216)
Flotapponnier May 31, 2026
7c1c980
feat: hyperliquid frontends quality bench № 030 (draft, SQLite cohort…
Flotapponnier May 31, 2026
e4d82a6
Merge pull request #217 from ChainBench/feat/hyperliquid-frontends-qu…
Flotapponnier May 31, 2026
c511e00
hl-frontends: COALESCE null retention sum + METRICS_ADDR local-dev ov…
Flotapponnier May 31, 2026
bc3089e
Merge pull request #218 from ChainBench/fix/hl-frontends-retention-nu…
Flotapponnier May 31, 2026
9204afc
mobile: fixed header + dynamic spacer, dots more visible
Flotapponnier May 31, 2026
6d901df
Merge pull request #219 from ChainBench/fix/mobile-header-fixed-dots-…
Flotapponnier May 31, 2026
7e52e5b
bench-029 v2: rotate USDC → long-tail trending tokens (#220)
Flotapponnier May 31, 2026
e33908f
mobile: opaque bg + GPU hint on fixed header (kill notch see-through)…
Flotapponnier May 31, 2026
f9536a7
hyperliquid-frontends: flip status to live (page renders, awaits real…
Flotapponnier May 31, 2026
e3a1bd4
Merge pull request #222 from ChainBench/chore/hyperliquid-frontends-g…
Flotapponnier May 31, 2026
dc79d02
site-logo-switcher: layer SVG under 3D to kill the swap flash
Flotapponnier May 31, 2026
f82f9d3
hl-frontends: shorten disclaimer + 2 methodology bullets to satisfy Z…
Flotapponnier May 31, 2026
def7331
Merge pull request #224 from ChainBench/fix/hl-frontends-zod-length-l…
Flotapponnier May 31, 2026
858250c
logo-switcher: never paint SVG on desktop (CSS-gate)
Flotapponnier May 31, 2026
8bb00db
Merge pull request #226 from ChainBench/fix/logo-3d-only-on-desktop
Flotapponnier May 31, 2026
74c9aea
bench-029 v3: switch rotation source from REST volume-ranks to Pulse …
Flotapponnier May 31, 2026
59fda2c
hl-frontends: real builder addresses (Phantom, Axiom, pvp.trade, Insi…
Flotapponnier May 31, 2026
425b369
Merge pull request #228 from ChainBench/chore/hl-frontends-real-addre…
Flotapponnier May 31, 2026
8fba74c
Merge pull request #227 from ChainBench/feat/bench-029-v3-pulse-ws
Flotapponnier May 31, 2026
fd791da
logo-switcher: instant sphere placeholder on desktop while 3D loads
Flotapponnier May 31, 2026
265190c
Merge pull request #229 from ChainBench/fix/logo-sphere-placeholder
Flotapponnier May 31, 2026
464e6d8
add logos + registry entries for 8 hyperliquid frontends
Flotapponnier May 31, 2026
3e5da64
Merge pull request #230 from ChainBench/feat/hl-frontends-logos-and-p…
Flotapponnier May 31, 2026
ded4cc1
logo: static import 3D, drop dynamic + placeholder
Flotapponnier May 31, 2026
b6c243b
Merge remote-tracking branch 'origin/dev' into fix/logo-3d-instant-st…
Flotapponnier May 31, 2026
9ae9e92
hl-frontends: registry entries + logo manifest mappings (dropped from…
Flotapponnier May 31, 2026
34979a5
Merge pull request #232 from ChainBench/fix/hl-frontends-registry-and…
Flotapponnier May 31, 2026
2f01da3
Merge pull request #231 from ChainBench/fix/logo-3d-instant-static-im…
Flotapponnier May 31, 2026
141a044
fix(l1-finality): switch Litecoin from Blockchair to litecoinspace.or…
Flotapponnier May 31, 2026
48238f7
hl-frontends: switch headline from rolling 24h to last complete UTC day
Flotapponnier May 31, 2026
f3e1ccb
Merge pull request #235 from ChainBench/fix/hl-frontends-utc-day-window
Flotapponnier May 31, 2026
9747e6f
fix: mobile overflow on benchmark detail pages
Flotapponnier Jun 1, 2026
bd84de3
Merge pull request #236 from ChainBench/fix/mobile-overflow-benchmark…
Flotapponnier Jun 1, 2026
9296920
fix: site-logo mask id collides between hidden header + visible footer
Flotapponnier Jun 1, 2026
0069e91
hl-frontends: walk back 3 days to handle Hyperliquid bucket publish lag
Flotapponnier Jun 1, 2026
16cc4f0
Merge pull request #238 from ChainBench/fix/hl-frontends-bucket-publi…
Flotapponnier Jun 1, 2026
c1ae0ba
Merge pull request #237 from ChainBench/fix/site-logo-mask-id-collision
Flotapponnier Jun 1, 2026
d53130e
fix(l1-finality): slow Cardano polling to 60s to stay under Koios fre…
Flotapponnier Jun 1, 2026
a3a7841
Merge pull request #239 from ChainBench/fix/l1-finality-cardano-koios…
Flotapponnier Jun 1, 2026
0cf43c6
fix(l2-block-time): head-watchdog to catch ghost WS connections
Flotapponnier Jun 1, 2026
ad88f50
Merge pull request #240 from ChainBench/fix/l2-block-time-scroll-ghos…
Flotapponnier Jun 1, 2026
154abf5
timeseries: interpolate hover-dot Y between sample brackets so it sit…
Flotapponnier Jun 1, 2026
57cda34
fix: stronger mobile overflow safety net for Safari + Telegram WebView
Flotapponnier Jun 1, 2026
68a765d
Merge pull request #242 from ChainBench/fix/mobile-overflow-safety-ne…
Flotapponnier Jun 1, 2026
0112eaa
fix: shrink region-grid + hide extra ledger cols on mobile
Flotapponnier Jun 1, 2026
34028c0
Merge pull request #241 from ChainBench/fix/timeseries-dot-interpolate
Flotapponnier Jun 1, 2026
e2dbf99
Merge pull request #243 from ChainBench/fix/mobile-overflow-region-gr…
Flotapponnier Jun 1, 2026
1fbdc5b
fix: defensive overflow-x: clip on main + article (mobile WebView)
Flotapponnier Jun 1, 2026
e12b3c5
Merge pull request #244 from ChainBench/fix/mobile-overflow-defensive…
Flotapponnier Jun 1, 2026
5a54026
fix(solana-quote): align region key to sgp so SGP tab renders (#245)
Flotapponnier Jun 1, 2026
9ca56ea
chore: remove em-dashes / en-dashes from user-facing content (#246)
Flotapponnier Jun 1, 2026
e2d716b
feat(hl-frontends): cutover to v2 (sub-minute freshness from local hl…
Flotapponnier Jun 1, 2026
e0764b1
feat(hl-frontends): refresh findings + FAQ with v2 bangers (deviation…
Flotapponnier Jun 1, 2026
1a67c74
feat(bench): switchable companion metric panels under main ledger (#249)
Flotapponnier Jun 1, 2026
8e4bba4
feat(bench): metric view tabs swap the main chart instead of stacking…
Flotapponnier Jun 1, 2026
daf0df6
fix(chart): include metric panel id in seriesKey so chart remounts on…
Flotapponnier Jun 1, 2026
493a7c1
docs(hl-frontends): refresh disclaimer, seo_intro, abstract, methodol…
Flotapponnier Jun 1, 2026
9e99874
chore: safe cleanup — dead code, stale lint suppressions, unused vars…
Flotapponnier Jun 2, 2026
aa04bba
hl-frontends: expand providers 8 → 60 (DefiLlama registry sync) (#254)
Flotapponnier Jun 2, 2026
1254a35
chore: remove SiteBanner (#256)
Flotapponnier Jun 2, 2026
f0a079f
chart: add Top 5/10/20/All selector when cohort > 10 providers (#257)
Flotapponnier Jun 2, 2026
1f85f24
chart: size top-N selector off registered cohort, not emitted series …
Flotapponnier Jun 2, 2026
68fede9
chore: delete verified dead code (real pass, not agent guesses) (#255)
Flotapponnier Jun 2, 2026
6c4eb57
fix: drop overflow-x clip from body so position: fixed sticks on WKWe…
Flotapponnier Jun 2, 2026
c3efcb7
hl-frontends: 60-builder registry, real logos, methodology refresh, a…
Flotapponnier Jun 2, 2026
a25db43
hotfix(hl-frontends): trim methodology line 8 to <=500 chars (Zod lim…
Flotapponnier Jun 2, 2026
8f09d02
fix: switch header to position: sticky (iOS 26 WebKit fixed jitter bu…
Flotapponnier Jun 2, 2026
b4bb3b5
fix: drop rows with zero headline value from ledger and ranked-bar (#…
Flotapponnier Jun 2, 2026
67c7cf2
chart: slice seriesOverride by range so panel tabs respect 1h/6h (#265)
Flotapponnier Jun 2, 2026
4f66872
chart: Top-N buttons reflect available data (hide useless options) (#…
Flotapponnier Jun 2, 2026
9049f00
fix: drop sticky on mobile (iOS 26 WebKit jitter workaround) (#267)
Flotapponnier Jun 2, 2026
7fc956e
fix: keep sticky header on regular mobile, only drop it in iOS WebVie…
Flotapponnier Jun 2, 2026
7954d43
fix(chart): Top-N selector on all 4 chart views (ranked, time, distri…
Flotapponnier Jun 2, 2026
6ed6763
ledger: follow active panel — sort/filter/value per panel metric (#271)
Flotapponnier Jun 2, 2026
9c10962
wallet-labels-coverage: drop All chains aggregate tab (#272)
Flotapponnier Jun 2, 2026
c0ff479
feat(bench): network fees — current native transfer cost USD across 1…
Flotapponnier Jun 2, 2026
c037dd3
bench-body: pass activePanel to LedgerTable + dynamic ledger title (#…
Flotapponnier Jun 2, 2026
b85c39e
hotfix(bench-body): restore ledger title template literal + closing b…
Flotapponnier Jun 2, 2026
17ca7b2
feat(network-fees): L1/L2 toggle + 9 L2 providers
Flotapponnier Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/skills/contribute-benchmark/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Walks a contributor through adding a new benchmark to OpenChainBenc

You are helping someone add a new benchmark to OpenChainBench, an open registry of crypto-infrastructure benchmarks.

If the user does not already have the repo cloned, your first step is to suggest `git clone https://github.com/OpenChainBench/OpenChainBench && cd OpenChainBench`. Everything below assumes that working directory.
If the user does not already have the repo cloned, your first step is to suggest `git clone https://github.com/ChainBench/OpenChainBench && cd OpenChainBench`. Everything below assumes that working directory.

## Mental model

Expand All @@ -24,7 +24,7 @@ Walk the user through these six steps in order. Do not skip ahead.

### 1. Open an issue

Direct them to the `Propose a benchmark` issue template at https://github.com/OpenChainBench/OpenChainBench/issues/new?template=new-benchmark.yml. Maintainers need to see the proposed metric, providers, methodology and harness location before code review. Brainstorm-stage ideas belong in https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas instead.
Direct them to the `Propose a benchmark` issue template at https://github.com/ChainBench/OpenChainBench/issues/new?template=new-benchmark.yml. Maintainers need to see the proposed metric, providers, methodology and harness location before code review. Brainstorm-stage ideas belong in https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas instead.

### 2. Write the spec

Expand Down
4 changes: 2 additions & 2 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ OpenChainBench publishes performance numbers about real services run by real peo
## Expected behavior

- **Critique numbers, not people.** It's fair to question a methodology, a sample window, a regional bias. It's not fair to suggest someone is incompetent or dishonest.
- **Cite, don't assert.** If you think a published figure is wrong, file a [provider correction](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=provider-correction.yml) with a reproducer. "This number is bullshit" without a reproducer is a non-issue.
- **Cite, don't assert.** If you think a published figure is wrong, file a [provider correction](https://github.com/ChainBench/OpenChainBench/issues/new?template=provider-correction.yml) with a reproducer. "This number is bullshit" without a reproducer is a non-issue.
- **Disclose conflicts.** If you work for a provider that's measured here, say so when you participate in discussions about that provider. It doesn't disqualify your input. it just keeps the conversation honest.
- **Respect contributors' time.** Maintainers are not obligated to debate. If a thread is going in circles, a maintainer may close it with a dated decision and that decision stands until new evidence is filed.

Expand All @@ -28,7 +28,7 @@ Decisions are recorded in the affected thread.

## Reporting

For private reports. including suspected manipulation, harassment, or undisclosed conflicts of interest. email **conduct@openchainbench.com** or open a [private security advisory](https://github.com/OpenChainBench/OpenChainBench/security/advisories/new) (the same channel works for non-security disclosures).
For private reports. including suspected manipulation, harassment, or undisclosed conflicts of interest. email **conduct@openchainbench.com** or open a [private security advisory](https://github.com/ChainBench/OpenChainBench/security/advisories/new) (the same channel works for non-security disclosures).

We treat reporters' identities as confidential by default.

Expand Down
4 changes: 2 additions & 2 deletions .github/DISCUSSIONS_AND_PROJECT_SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Default categories like "General" and "Polls" should be deleted to keep the surf

- **Name**: `OpenChainBench Roadmap`
- **Visibility**: Public
- **Linked repository**: `OpenChainBench/OpenChainBench`
- **Linked repository**: `ChainBench/OpenChainBench`

### Columns

Expand All @@ -41,7 +41,7 @@ Requested → Approved → In progress → Live → Archived

In Project Settings → Workflows, enable:

- **Auto-add to project**. for issues in `OpenChainBench/OpenChainBench` matching the filter `is:issue label:bench-request`. They land in `Requested` automatically.
- **Auto-add to project**. for issues in `ChainBench/OpenChainBench` matching the filter `is:issue label:bench-request`. They land in `Requested` automatically.
- **Item closed → Archived**. when an issue is closed without a `live` label, move it to `Archived`.
- **PR merged → Live** (manual; GitHub doesn't have a native trigger, so a maintainer moves the card after merge).

Expand Down
8 changes: 4 additions & 4 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: 💡 Idea or rough proposal
url: https://github.com/OpenChainBench/OpenChainBench/discussions/new?category=ideas
url: https://github.com/ChainBench/OpenChainBench/discussions/new?category=ideas
about: Have an idea but not ready for a formal benchmark proposal? Start a discussion in Ideas.
- name: 🙋 Question (How do I…?)
url: https://github.com/OpenChainBench/OpenChainBench/discussions/new?category=q-a
url: https://github.com/ChainBench/OpenChainBench/discussions/new?category=q-a
about: Ask a question about a spec, harness, methodology, or how the site works.
- name: 📊 Show & tell
url: https://github.com/OpenChainBench/OpenChainBench/discussions/new?category=show-and-tell
url: https://github.com/ChainBench/OpenChainBench/discussions/new?category=show-and-tell
about: Show a fork, a dashboard, or a benchmark you ran locally.
- name: 🔐 Security disclosure
url: https://github.com/OpenChainBench/OpenChainBench/security/advisories/new
url: https://github.com/ChainBench/OpenChainBench/security/advisories/new
about: Privately report a vulnerability. Do not file a public issue for security problems.
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/new-benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ body:

OpenChainBench prefers to align on **what** is measured and **how** before any code is written. Fill out the sections below. fields marked required are the bare minimum needed for the maintainers to give meaningful feedback. If you're not sure on some of them, write what you have and leave a note.

Have a rough idea but not ready to fill all this? Open a thread in [Discussions → Ideas](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas) instead.
Have a rough idea but not ready to fill all this? Open a thread in [Discussions → Ideas](https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas) instead.
- type: input
id: metric
attributes:
Expand Down Expand Up @@ -97,5 +97,5 @@ body:
options:
- label: I understand that the harness code, methodology, and any corrections will be published under the project's MIT/CC-BY-4.0 license.
required: true
- label: I have searched [existing benchmarks](https://github.com/OpenChainBench/OpenChainBench/tree/main/benchmarks) and [open issues](https://github.com/OpenChainBench/OpenChainBench/issues?q=is%3Aissue+label%3Abench-request) for duplicates.
- label: I have searched [existing benchmarks](https://github.com/ChainBench/OpenChainBench/tree/main/benchmarks) and [open issues](https://github.com/ChainBench/OpenChainBench/issues?q=is%3Aissue+label%3Abench-request) for duplicates.
required: true
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Reporting a vulnerability

Open a [private security advisory](https://github.com/OpenChainBench/OpenChainBench/security/advisories/new) on this repository. Do **not** open a public issue for a security report. the advisory mechanism keeps the disclosure private until a fix is in place.
Open a [private security advisory](https://github.com/ChainBench/OpenChainBench/security/advisories/new) on this repository. Do **not** open a public issue for a security report. the advisory mechanism keeps the disclosure private until a fix is in place.

If GitHub is not an option, email **security@openchainbench.com** with:

Expand Down
14 changes: 7 additions & 7 deletions .github/SUPPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ OpenChainBench is community-run. Before opening an issue, pick the right channel

| Goal | Where to go |
| --- | --- |
| Propose a new benchmark formally | [New issue → 📊 Propose a benchmark](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=new-benchmark.yml) |
| Float an idea before writing it up | [Discussions → Ideas](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas) |
| Ask a question about a spec, harness, methodology, or the site | [Discussions → Q&A](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/q-a) |
| Show a fork or a dashboard you built | [Discussions → Show & tell](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/show-and-tell) |
| Report a number that looks wrong on the site | [New issue → 🐞 Data quality](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=data-quality.yml) |
| Submit a provider correction (you measured a different number) | [New issue → ✏️ Provider correction](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=provider-correction.yml) |
| Privately report a security vulnerability | [Security advisories](https://github.com/OpenChainBench/OpenChainBench/security/advisories/new) |
| Propose a new benchmark formally | [New issue → 📊 Propose a benchmark](https://github.com/ChainBench/OpenChainBench/issues/new?template=new-benchmark.yml) |
| Float an idea before writing it up | [Discussions → Ideas](https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas) |
| Ask a question about a spec, harness, methodology, or the site | [Discussions → Q&A](https://github.com/ChainBench/OpenChainBench/discussions/categories/q-a) |
| Show a fork or a dashboard you built | [Discussions → Show & tell](https://github.com/ChainBench/OpenChainBench/discussions/categories/show-and-tell) |
| Report a number that looks wrong on the site | [New issue → 🐞 Data quality](https://github.com/ChainBench/OpenChainBench/issues/new?template=data-quality.yml) |
| Submit a provider correction (you measured a different number) | [New issue → ✏️ Provider correction](https://github.com/ChainBench/OpenChainBench/issues/new?template=provider-correction.yml) |
| Privately report a security vulnerability | [Security advisories](https://github.com/ChainBench/OpenChainBench/security/advisories/new) |
| See what's planned and where to contribute code | [Roadmap project board](https://github.com/orgs/OpenChainBench/projects) |
| Read about how the data is produced | [`benchmarks/README.md`](../benchmarks/README.md) and [`harnesses/README.md`](../harnesses/README.md) |

Expand Down
12 changes: 1 addition & 11 deletions .github/workflows/staging-deploy.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
name: Vercel staging deploy

# Auto-deploy to Vercel Preview on every push to dev. Workaround for the
# Vercel ↔ GitHub App pairing being unreliable across the OpenChainBench
# (user account) + mobula-labs (Vercel team) setup. The Action calls the
# Vercel CLI directly with VERCEL_TOKEN, bypassing the App webhook flow.
#
# Required GitHub secrets (Settings → Secrets and variables → Actions):
# VERCEL_TOKEN — vercel.com/account/tokens, scope = mobula-labs
# VERCEL_ORG_ID — ***SCRUBBED***
# VERCEL_PROJECT_ID — ***SCRUBBED***

on:
push:
branches:
Expand Down Expand Up @@ -61,7 +51,7 @@ jobs:
vercel alias set "${{ steps.deploy.outputs.url }}" \
staging-openchainbench.vercel.app \
--token=${{ secrets.VERCEL_TOKEN }} \
--scope=mobula-labs
--scope=${{ secrets.VERCEL_ORG_ID }}

- name: Comment summary
run: |
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ This version has breaking changes. APIs, conventions, and file structure may all
Two long-lived branches:

- `main` → openchainbench.com (production). Vercel auto-deploy on push is **disabled**; production deploys are **manual** via `vercel --prod` from a checkout of `main`.
- `dev` → staging. Each push triggers `.github/workflows/vercel-staging.yml` which calls Vercel CLI with a token and emits a Preview URL. The Vercel GitHub App is NOT used for staging because the OpenChainBench user account + mobula-labs Vercel team pairing wouldn't propagate.
- `dev` → staging. Each push triggers `.github/workflows/staging-deploy.yml` which calls Vercel CLI with a token and emits a Preview URL.

**Standard flow:**

Expand Down
14 changes: 7 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@ OpenChainBench is a federation. Each harness is hosted by whoever wrote it. the

| Goal | Right channel |
| --- | --- |
| Float a rough idea | [Discussions → Ideas](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas) |
| Ask a methodology / harness question | [Discussions → Q&A](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/q-a) |
| Propose a benchmark formally | [Issue → 📊 Propose a benchmark](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=new-benchmark.yml) |
| Report a number that looks wrong | [Issue → 🐞 Data quality](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=data-quality.yml) |
| Submit a provider correction | [Issue → ✏️ Provider correction](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=provider-correction.yml) |
| Float a rough idea | [Discussions → Ideas](https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas) |
| Ask a methodology / harness question | [Discussions → Q&A](https://github.com/ChainBench/OpenChainBench/discussions/categories/q-a) |
| Propose a benchmark formally | [Issue → 📊 Propose a benchmark](https://github.com/ChainBench/OpenChainBench/issues/new?template=new-benchmark.yml) |
| Report a number that looks wrong | [Issue → 🐞 Data quality](https://github.com/ChainBench/OpenChainBench/issues/new?template=data-quality.yml) |
| Submit a provider correction | [Issue → ✏️ Provider correction](https://github.com/ChainBench/OpenChainBench/issues/new?template=provider-correction.yml) |
| See what's planned | [Roadmap project board](https://github.com/orgs/OpenChainBench/projects) |

## Submitting a benchmark

1. **Open an issue** with the [📊 Propose a benchmark template](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=new-benchmark.yml). Sketch the metric, providers, methodology, where you'll host the harness. get feedback before you write code. The issue lands in the `Requested` column of the roadmap.
1. **Open an issue** with the [📊 Propose a benchmark template](https://github.com/ChainBench/OpenChainBench/issues/new?template=new-benchmark.yml). Sketch the metric, providers, methodology, where you'll host the harness. get feedback before you write code. The issue lands in the `Requested` column of the roadmap.
2. **Write the spec.** Drop a YAML at `benchmarks/<slug>.yml`. The format is described in [`benchmarks/README.md`](./benchmarks/README.md) and validated by `src/lib/spec-schema.ts`.
3. **Build the harness** at `harnesses/<slug>/`. A harness is a data producer only. it exposes `/metrics` over HTTPS with the metric names and labels your spec references. See [`harnesses/README.md`](./harnesses/README.md) for the contract and the existing Go harnesses as reference implementations.
4. **Deploy the harness** on whatever infra fits. Railway, Fly, Cloud Run, a VPS. Expose `/metrics` over HTTPS at a stable public URL. You own the runtime, the secrets and the budget. The maintainers never see your API keys.
Expand All @@ -56,7 +56,7 @@ pnpm build # production build

## Corrections

If you can't reproduce a number, file a [provider correction](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=provider-correction.yml) (you measured a different value for your service) or a [data quality issue](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=data-quality.yml) (the site is showing something obviously wrong or stale). Material errors are corrected in place with a dated note on the report.
If you can't reproduce a number, file a [provider correction](https://github.com/ChainBench/OpenChainBench/issues/new?template=provider-correction.yml) (you measured a different value for your service) or a [data quality issue](https://github.com/ChainBench/OpenChainBench/issues/new?template=data-quality.yml) (the site is showing something obviously wrong or stale). Material errors are corrected in place with a dated note on the report.

## Code of conduct & security

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ To render the site against your local harness, run a local Prometheus scraping `

Full guide in [CONTRIBUTING.md](./CONTRIBUTING.md). For a concrete end-to-end example, read [`docs/walkthrough.md`](./docs/walkthrough.md). Short version:

1. **Open an issue** with the [📊 Propose a benchmark template](https://github.com/OpenChainBench/OpenChainBench/issues/new?template=new-benchmark.yml). Sketch the metric, providers, methodology. get feedback before you build. Want to brainstorm first? Use [Discussions → Ideas](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas) instead.
1. **Open an issue** with the [📊 Propose a benchmark template](https://github.com/ChainBench/OpenChainBench/issues/new?template=new-benchmark.yml). Sketch the metric, providers, methodology. get feedback before you build. Want to brainstorm first? Use [Discussions → Ideas](https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas) instead.
2. **Write the spec** at `benchmarks/<slug>.yml`. Format documented in [`benchmarks/README.md`](./benchmarks/README.md), validated by `src/lib/spec-schema.ts`.
3. **Build the harness** in `harnesses/<slug>/`. Any language works as long as it exposes `/metrics` over HTTPS with the metric names and labels your spec references. The harness is a data producer only. no Prometheus, Grafana, or Alertmanager packaging.
4. **Deploy the harness** on whatever infra fits. Railway, Fly, Cloud Run, a VPS, even a home server with a static IP. Expose `/metrics` over HTTPS at a stable public URL. You own the runtime, the secrets and the budget.
Expand Down Expand Up @@ -314,11 +314,11 @@ PNG URL — the downloaded image matches what the user is looking at.

## Community

- 💡 [Discussions → Ideas](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/ideas). brainstorm new benchmarks before writing them up
- 🙋 [Discussions → Q&A](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/q-a). methodology / harness / spec questions
- 📊 [Discussions → Show & tell](https://github.com/OpenChainBench/OpenChainBench/discussions/categories/show-and-tell). share forks and dashboards
- 💡 [Discussions → Ideas](https://github.com/ChainBench/OpenChainBench/discussions/categories/ideas). brainstorm new benchmarks before writing them up
- 🙋 [Discussions → Q&A](https://github.com/ChainBench/OpenChainBench/discussions/categories/q-a). methodology / harness / spec questions
- 📊 [Discussions → Show & tell](https://github.com/ChainBench/OpenChainBench/discussions/categories/show-and-tell). share forks and dashboards
- 🗺️ [Roadmap](https://github.com/orgs/OpenChainBench/projects). what's planned and what's live
- 🐞 [New issue](https://github.com/OpenChainBench/OpenChainBench/issues/new/choose). formal benchmark proposal, data-quality flag, or provider correction
- 🐞 [New issue](https://github.com/ChainBench/OpenChainBench/issues/new/choose). formal benchmark proposal, data-quality flag, or provider correction
- See [SUPPORT.md](./.github/SUPPORT.md) for the full triage matrix.

## SEO TODOs
Expand All @@ -339,7 +339,7 @@ Tracking the work to make benchmark pages rank for the queries they target.
- Site. [openchainbench.com](https://openchainbench.com)
- Live stream. folded into [openchainbench.com](https://openchainbench.com)
- Twitter. [@openchainbench](https://twitter.com/openchainbench)
- GitHub. [OpenChainBench/OpenChainBench](https://github.com/OpenChainBench/OpenChainBench)
- GitHub. [ChainBench/OpenChainBench](https://github.com/ChainBench/OpenChainBench)

## License

Expand Down
Loading
Loading