From 0cec05cbf51035c02d8c68a16b19b9c5dec8fe2a Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 14:59:08 +0200 Subject: [PATCH 01/11] feat(robinhood): add QuickNode to keyed-rpc-robinhood bench (#243) --- benchmarks/keyed-rpc-robinhood.yml | 59 +++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/benchmarks/keyed-rpc-robinhood.yml b/benchmarks/keyed-rpc-robinhood.yml index 2e4478e9..9fa5bbb7 100644 --- a/benchmarks/keyed-rpc-robinhood.yml +++ b/benchmarks/keyed-rpc-robinhood.yml @@ -2,10 +2,10 @@ slug: keyed-rpc-robinhood number: "243" -title: "Fastest Robinhood Chain RPC with API key: Chainstack vs Alchemy" -seo_title: "Fastest Robinhood Chain RPC API key 2026: Chainstack vs Alchemy latency" -seo_description: "Live Robinhood Chain RPC latency: Chainstack and Alchemy keyed endpoints probed every 60s from 3 regions. First public benchmark for this Arbitrum Orbit L2." -subtitle: eth_getBlockByNumber latency against keyed Robinhood Chain endpoints (Chainstack, Alchemy), probed every 60 seconds from 3 regions. +title: "Fastest Robinhood Chain RPC with API key: Chainstack, Alchemy, QuickNode" +seo_title: "Fastest Robinhood Chain RPC API key 2026: Chainstack vs Alchemy vs QuickNode latency" +seo_description: "Live Robinhood Chain RPC latency: Chainstack, Alchemy, and QuickNode keyed endpoints probed every 60s from 3 regions. First public benchmark for this Arbitrum Orbit L2." +subtitle: eth_getBlockByNumber latency against keyed Robinhood Chain endpoints (Chainstack, Alchemy, QuickNode), probed every 60 seconds from 3 regions. category: RPCs status: live metric: RPC latency @@ -19,10 +19,10 @@ seo_intro: | launched a Global Node before Alchemy, giving it an early infrastructure advantage on a financially-sensitive chain with low tolerance for RPC latency. - This bench probes Chainstack and Alchemy on their keyed Robinhood - Chain endpoints every 60 seconds from us-east, eu-west, and Singapore. - Chainstack recorded p50 of 72ms in internal pre-launch tests vs - Alchemy at 86ms; the public Robinhood RPC lagged at 170ms. Live + This bench probes Chainstack, Alchemy, and QuickNode on their keyed + Robinhood Chain endpoints every 60 seconds from us-east, eu-west, and + Singapore. Chainstack recorded p50 of 72ms in internal pre-launch tests + vs Alchemy at 86ms; the public Robinhood RPC lagged at 170ms. Live data on this page reflects continuous measurement since the bench launched; Robinhood Chain data accumulates over the first 24 hours. This is the only independently-run public latency benchmark for @@ -30,9 +30,9 @@ seo_intro: | abstract: | We measure the round-trip latency of eth_getBlockByNumber against the - keyed endpoints of Chainstack and Alchemy on Robinhood Chain. The probe - uses a rotating JSON-RPC id to defeat edge caches, fires every 60 - seconds from 3 regions, and classifies each response as ok, http_err, + keyed endpoints of Chainstack, Alchemy, and QuickNode on Robinhood Chain. + The probe uses a rotating JSON-RPC id to defeat edge caches, fires every + 60 seconds from 3 regions, and classifies each response as ok, http_err, jsonrpc_err, stale, or timeout. Only ok responses contribute to the latency distribution. This is a new bench; the first 24h of live data will replace the pre-launch internal test numbers in the findings. @@ -40,22 +40,22 @@ abstract: | methodology: - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp). Robinhood Chain runs on the Arbitrum Orbit stack with ~100ms block times; the 60s probe cadence captures 600 blocks per hour. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real Robinhood Chain tip." - - "Authentication: Chainstack Global Node key (node-scoped, dedicated to Robinhood Chain; key in Railway env, not in repo). Alchemy uses its standard multi-chain key with the Robinhood Chain endpoint. Both are from paid accounts; the serving infrastructure matches the free-tier Global Node product." + - "Authentication: Chainstack Global Node key (node-scoped, dedicated to Robinhood Chain; key in Railway env, not in repo). Alchemy uses its standard multi-chain key. QuickNode uses its shared-endpoint key for Robinhood Chain. All keys in Railway env, not in repo." - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Chainstack and Alchemy. QuickNode supports Robinhood Chain per their documentation but a keyed endpoint is pending provisioning. Infura and Ankr do not currently list Robinhood Chain in their supported networks." + - "Cohort: Chainstack, Alchemy, and QuickNode. Infura and Ankr do not currently list Robinhood Chain in their supported networks." findings: - - "{{name:chainstack}} leads at {{p50:chainstack}} (p50, 24h). In pre-launch internal tests (50 samples, single region), it recorded 72ms vs Alchemy at 86ms and the official public RPC at 170ms." - - "{{name:alchemy}} follows at {{p50:alchemy}}, a solid second option for teams already using Alchemy for other chains. The same multi-chain key covers Robinhood Chain with no additional account required." - - "This bench is the first publicly available, continuously-updated RPC latency measurement for Robinhood Chain. Data accumulates over 24h after launch." + - "{{name:chainstack}} leads at {{p50:chainstack}} (p50, 24h). In pre-launch internal tests (50 samples, single region), it recorded 72ms vs Alchemy at 86ms and the official public RPC at 170ms. Chainstack was the first provider to launch a dedicated Global Node on Robinhood Chain." + - "{{name:quicknode}} delivers {{p50:quicknode}}, leveraging its shared-endpoint fleet across Arbitrum Orbit chains." + - "{{name:alchemy}} follows at {{p50:alchemy}}, a solid option for teams already using Alchemy across other chains. The same multi-chain key covers Robinhood Chain with no additional account required." faq: - q: "Which Robinhood Chain RPC provider is fastest?" - a: "Per the live data above: {{name:chainstack}} at {{p50:chainstack}} (p50 over 24h). In internal pre-launch tests Chainstack recorded 72ms vs Alchemy at 86ms. If you already use Alchemy for Ethereum or Arbitrum, adding Robinhood Chain requires no new account." + a: "Per the live data above: {{name:chainstack}} at {{p50:chainstack}} (p50 over 24h). In internal pre-launch tests Chainstack recorded 72ms vs Alchemy at 86ms. QuickNode also supports Robinhood Chain via its shared-endpoint fleet. If you already use Alchemy for Ethereum or Arbitrum, adding Robinhood Chain requires no new account." - q: "What is Robinhood Chain?" a: "Robinhood Chain (chain ID 4663) is an Arbitrum Orbit L2 built by Robinhood for tokenized equity trading. It launched in March 2026 with ~100ms block times and a gas fee subsidy running through September 29, 2026. It supports EVM-compatible tooling and standard eth_ JSON-RPC methods." - q: "Why is this the only Robinhood Chain latency benchmark?" - a: "Robinhood Chain is a new chain with limited third-party RPC support at launch. OpenChainBench added it within days of Chainstack and Alchemy support going live, making this the first and so far only independent latency measurement. Additional providers will be added as they launch keyed endpoints." + a: "Robinhood Chain is a new chain. OpenChainBench added it within days of Chainstack, Alchemy, and QuickNode support going live, making this the first and so far only independent latency measurement. Infura and Ankr do not currently list Robinhood Chain in their supported networks." source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency @@ -96,6 +96,29 @@ providers: p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed",region="sgp"}) series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="robinhood",tier="keyed",region="sgp"}[1h])) + - slug: quicknode + name: QuickNode + tag: Shared endpoint fleet, keyed Robinhood Chain endpoint, plan disclosed + formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on QuickNode's keyed Robinhood Chain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="quicknode",chain="robinhood",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="quicknode",chain="robinhood",tier="keyed"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="us-east"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="us-east"}[1h])) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="eu-west"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="eu-west"}[1h])) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="sgp"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="sgp"}[1h])) + - slug: alchemy name: Alchemy tag: 30M CU/mo free, keyed Robinhood Chain endpoint From 7b4b280451c117b12d71993a9fce4be8b213b86b Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:24:47 +0200 Subject: [PATCH 02/11] =?UTF-8?q?fix(keyed-rpc-robinhood):=20update=20find?= =?UTF-8?q?ings=20=E2=80=94=20Alchemy=20leads=20overall,=20Chainstack=20wi?= =?UTF-8?q?ns=20us-east?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/keyed-rpc-robinhood.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/keyed-rpc-robinhood.yml b/benchmarks/keyed-rpc-robinhood.yml index 9fa5bbb7..96b8626c 100644 --- a/benchmarks/keyed-rpc-robinhood.yml +++ b/benchmarks/keyed-rpc-robinhood.yml @@ -45,13 +45,13 @@ methodology: - "Cohort: Chainstack, Alchemy, and QuickNode. Infura and Ankr do not currently list Robinhood Chain in their supported networks." findings: - - "{{name:chainstack}} leads at {{p50:chainstack}} (p50, 24h). In pre-launch internal tests (50 samples, single region), it recorded 72ms vs Alchemy at 86ms and the official public RPC at 170ms. Chainstack was the first provider to launch a dedicated Global Node on Robinhood Chain." - - "{{name:quicknode}} delivers {{p50:quicknode}}, leveraging its shared-endpoint fleet across Arbitrum Orbit chains." - - "{{name:alchemy}} follows at {{p50:alchemy}}, a solid option for teams already using Alchemy across other chains. The same multi-chain key covers Robinhood Chain with no additional account required." + - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) averaged across all 3 regions. It edges out Chainstack in eu-west and Singapore while sitting within 2ms of Chainstack in us-east." + - "{{name:chainstack}} wins us-east at {{p50:chainstack}} in that region, reflecting its US-based Global Node placement. Pre-launch internal tests (50 samples, single region) had Chainstack at 72ms vs Alchemy at 86ms; live multi-region data flips the aggregate ranking while preserving Chainstack's us-east advantage." + - "{{name:quicknode}} delivers {{p50:quicknode}} across all regions via its shared-endpoint fleet." faq: - q: "Which Robinhood Chain RPC provider is fastest?" - a: "Per the live data above: {{name:chainstack}} at {{p50:chainstack}} (p50 over 24h). In internal pre-launch tests Chainstack recorded 72ms vs Alchemy at 86ms. QuickNode also supports Robinhood Chain via its shared-endpoint fleet. If you already use Alchemy for Ethereum or Arbitrum, adding Robinhood Chain requires no new account." + a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore). {{name:chainstack}} wins the us-east region specifically at {{p50:chainstack}}, likely due to its US-based node placement. If you deploy primarily in the US, Chainstack competes for the lead; for a global footprint, Alchemy's edge infrastructure gives it the aggregate win." - q: "What is Robinhood Chain?" a: "Robinhood Chain (chain ID 4663) is an Arbitrum Orbit L2 built by Robinhood for tokenized equity trading. It launched in March 2026 with ~100ms block times and a gas fee subsidy running through September 29, 2026. It supports EVM-compatible tooling and standard eth_ JSON-RPC methods." - q: "Why is this the only Robinhood Chain latency benchmark?" From e1ac8e0bd7eb52dae72b0a94d65b28e29537144e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:30:07 +0200 Subject: [PATCH 03/11] =?UTF-8?q?fix(ws-head-latency-robinhood):=20update?= =?UTF-8?q?=20findings=20=E2=80=94=20QuickNode=20leads=20at=200.27ms,=20Al?= =?UTF-8?q?chemy=2040ms,=20Chainstack=20139ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/ws-head-latency-robinhood.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/ws-head-latency-robinhood.yml b/benchmarks/ws-head-latency-robinhood.yml index b468d282..f694fee5 100644 --- a/benchmarks/ws-head-latency-robinhood.yml +++ b/benchmarks/ws-head-latency-robinhood.yml @@ -51,13 +51,13 @@ methodology: - "Vantage points: us-east, eu-west, Singapore (3 regions). Multi-region deployment provides geographic diversity across Robinhood Chain's validator topology." findings: - - "{{name:chainstack}} leads at {{p50:chainstack}} (p50, 24h). Chainstack was the first provider to launch a dedicated Global Node on Robinhood Chain, giving it an early infrastructure advantage on this latency-sensitive chain." - - "{{name:alchemy}} follows at {{p50:alchemy}} across us-east, eu-west, and Singapore. Alchemy's multi-chain key covers Robinhood Chain with no additional account required." - - "{{name:quicknode}} delivers {{p50:quicknode}} via its shared-endpoint fleet. QuickNode's shared infrastructure across Arbitrum Orbit chains may give it routing advantages on Robinhood's sequencer path." + - "{{name:quicknode}} leads at {{p50:quicknode}} (p50, 24h) — near-zero lag across all 3 regions, meaning QuickNode's push pipeline wins or ties the race for nearly every Robinhood Chain block. Its shared-endpoint fleet spans Arbitrum Orbit chains and likely shares sequencer proximity with Robinhood's validator path." + - "{{name:alchemy}} follows at {{p50:alchemy}} with consistent lag across us-east, eu-west, and Singapore. A solid option for teams already using Alchemy across other chains; the same multi-chain key covers Robinhood Chain with no additional account." + - "{{name:chainstack}} delivers {{p50:chainstack}} (p50, 24h). Despite being the first provider to launch a dedicated Robinhood Chain Global Node, its push pipeline trails QuickNode and Alchemy in the WebSocket race — a different competitive picture than HTTP latency, where Chainstack wins us-east." faq: - q: "Which Robinhood Chain WebSocket provider is fastest for newHeads?" - a: "Per the live data above: {{name:chainstack}} at {{p50:chainstack}} (p50, 24h, averaged across 3 regions). Chainstack was first to market with a dedicated Robinhood Chain Global Node. If you already use Alchemy for Ethereum or Arbitrum, adding Robinhood Chain requires no new account." + a: "Per the live data above: {{name:quicknode}} at {{p50:quicknode}} (p50, 24h, averaged across 3 regions). QuickNode's near-zero lag indicates it wins or ties the push race for nearly every block. {{name:alchemy}} follows at {{p50:alchemy}}. Note that HTTP latency (eth_getBlockByNumber) tells a different story — see the [keyed-rpc-robinhood](/benchmarks/keyed-rpc-robinhood) bench." - q: "Why does Robinhood Chain have no keyless WebSocket endpoint?" a: "Robinhood Chain is a new Arbitrum Orbit L2 with a small set of supported infrastructure providers. At the time this bench launched, all three providers (Chainstack, Alchemy, QuickNode) require an API key for WebSocket access. This bench will add keyless providers as they become available." - q: "How does Robinhood Chain's 100ms block time affect these measurements?" From aa29ac86da199e83957da884a9ecf350cd83d09e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:46:15 +0200 Subject: [PATCH 04/11] fix: bump cache keys v55/v22 to flush stale miss for ws-head-latency-robinhood --- src/lib/spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 3d14c119..757de2df 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -325,7 +325,8 @@ const loadBenchmarkUnfilteredCached = unstable_cache( // v53: overlayEditorial now prunes providers absent from spec.providers. // Bump to flush v52 cached entries that still carry stale Flashbots row. // v54: add 6 new chain benches 216-221 (NEAR, Flow, Hedera, CKB, MultiversX, NEO). - ["bench-unfiltered-v54", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v55: add ws-head-latency-robinhood (244) + keyed-rpc-robinhood (243). Bench SET grew. + ["bench-unfiltered-v55", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); @@ -634,7 +635,7 @@ const loadBenchmarkFiltered = unstable_cache( // v18: bumped with bench-unfiltered-v27 (dense series with nulls). // v19: bumped with bench-unfiltered-v28 (bench vague 2, 081-085). // v21: bumped with bench-unfiltered-v46 (network-coverage split). - ["bench-filters-v21", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + ["bench-filters-v22", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] } ); From 4b47a10645174859258f1035af161cf17202e86a Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:54:17 +0200 Subject: [PATCH 05/11] fix: remove em-dashes from ws-head-latency-robinhood findings (noAiDashes Zod) --- benchmarks/ws-head-latency-robinhood.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/ws-head-latency-robinhood.yml b/benchmarks/ws-head-latency-robinhood.yml index f694fee5..6c6dd8ad 100644 --- a/benchmarks/ws-head-latency-robinhood.yml +++ b/benchmarks/ws-head-latency-robinhood.yml @@ -51,13 +51,13 @@ methodology: - "Vantage points: us-east, eu-west, Singapore (3 regions). Multi-region deployment provides geographic diversity across Robinhood Chain's validator topology." findings: - - "{{name:quicknode}} leads at {{p50:quicknode}} (p50, 24h) — near-zero lag across all 3 regions, meaning QuickNode's push pipeline wins or ties the race for nearly every Robinhood Chain block. Its shared-endpoint fleet spans Arbitrum Orbit chains and likely shares sequencer proximity with Robinhood's validator path." + - "{{name:quicknode}} leads at {{p50:quicknode}} (p50, 24h): near-zero lag across all 3 regions, meaning QuickNode's push pipeline wins or ties the race for nearly every Robinhood Chain block. Its shared-endpoint fleet spans Arbitrum Orbit chains and likely shares sequencer proximity with Robinhood's validator path." - "{{name:alchemy}} follows at {{p50:alchemy}} with consistent lag across us-east, eu-west, and Singapore. A solid option for teams already using Alchemy across other chains; the same multi-chain key covers Robinhood Chain with no additional account." - - "{{name:chainstack}} delivers {{p50:chainstack}} (p50, 24h). Despite being the first provider to launch a dedicated Robinhood Chain Global Node, its push pipeline trails QuickNode and Alchemy in the WebSocket race — a different competitive picture than HTTP latency, where Chainstack wins us-east." + - "{{name:chainstack}} delivers {{p50:chainstack}} (p50, 24h). Despite being the first provider to launch a dedicated Robinhood Chain Global Node, its push pipeline trails QuickNode and Alchemy in the WebSocket race, a different competitive picture than HTTP latency, where Chainstack wins us-east." faq: - q: "Which Robinhood Chain WebSocket provider is fastest for newHeads?" - a: "Per the live data above: {{name:quicknode}} at {{p50:quicknode}} (p50, 24h, averaged across 3 regions). QuickNode's near-zero lag indicates it wins or ties the push race for nearly every block. {{name:alchemy}} follows at {{p50:alchemy}}. Note that HTTP latency (eth_getBlockByNumber) tells a different story — see the [keyed-rpc-robinhood](/benchmarks/keyed-rpc-robinhood) bench." + a: "Per the live data above: {{name:quicknode}} at {{p50:quicknode}} (p50, 24h, averaged across 3 regions). QuickNode's near-zero lag indicates it wins or ties the push race for nearly every block. {{name:alchemy}} follows at {{p50:alchemy}}. Note that HTTP latency (eth_getBlockByNumber) tells a different story: see the [keyed-rpc-robinhood](/benchmarks/keyed-rpc-robinhood) bench." - q: "Why does Robinhood Chain have no keyless WebSocket endpoint?" a: "Robinhood Chain is a new Arbitrum Orbit L2 with a small set of supported infrastructure providers. At the time this bench launched, all three providers (Chainstack, Alchemy, QuickNode) require an API key for WebSocket access. This bench will add keyless providers as they become available." - q: "How does Robinhood Chain's 100ms block time affect these measurements?" From 399217040c74fe60cd3212f109a516b23085e3d1 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 17:14:22 +0200 Subject: [PATCH 06/11] drop ws-head-latency-robinhood bench (244) --- benchmarks/ws-head-latency-robinhood.yml | 153 ----------------------- 1 file changed, 153 deletions(-) delete mode 100644 benchmarks/ws-head-latency-robinhood.yml diff --git a/benchmarks/ws-head-latency-robinhood.yml b/benchmarks/ws-head-latency-robinhood.yml deleted file mode 100644 index 6c6dd8ad..00000000 --- a/benchmarks/ws-head-latency-robinhood.yml +++ /dev/null @@ -1,153 +0,0 @@ -# OpenChainBench. Bench № 244 - -slug: ws-head-latency-robinhood -number: "244" -title: "Fastest Robinhood Chain WebSocket RPC: Chainstack vs Alchemy vs QuickNode newHeads push lag" -seo_title: "Fastest Robinhood Chain WebSocket RPC 2026: Chainstack vs Alchemy vs QuickNode" -seo_description: "Live Robinhood Chain WebSocket newHeads push lag: Chainstack, Alchemy, and QuickNode keyed endpoints racing per block from 3 regions. First public WS benchmark for this Arbitrum Orbit L2." -subtitle: Per-block WebSocket push lag in milliseconds versus the earliest provider to deliver the same Robinhood Chain head, measured continuously from 3 regions on keyed endpoints. - -category: RPCs -status: live -metric: Block push lag -unit: ms -higher_is_better: false - -seo_intro: | - Robinhood Chain (chain ID 4663) produces a block every 100 milliseconds, - roughly 20 times faster than Ethereum. Any real-time bot on Robinhood - Chain (settlement keeper, price updater, live order-book) inherits its - provider's head push pipeline 20 times as often. There is no public - keyless WebSocket for Robinhood Chain; all three providers in this - cohort (Chainstack, Alchemy, QuickNode) require an API key. - This bench holds one persistent `eth_subscribe("newHeads")` keyed - WebSocket per provider from us-east, eu-west, and Singapore, - timestamps every frame on receipt, and scores each block as a race: - earliest arrival sets T0, every other provider's lag is arrival minus T0. - At 10 blocks per second, the 24h window carries 864000 racing events - per provider, making this the densest latency distribution on - OpenChainBench. - This is the first and only independent public WebSocket latency - benchmark for Robinhood Chain. - -abstract: | - We measure the per-block WebSocket push lag of Chainstack, Alchemy, and - QuickNode on Robinhood Chain, using keyed eth_subscribe("newHeads") - connections from 3 probe regions. Each block is scored as a race: - earliest provider sets T0, every other provider's lag is arrival minus T0 - in milliseconds. The cohort closes 5 seconds after first arrival; late - arrivals are counted as missed blocks via ws_block_gap_total rather than - as large latency samples. p50/p90/p99 are computed via histogram_quantile - over the 24h rate. All providers use keyed endpoints; no public keyless - WebSocket exists for Robinhood Chain. - -methodology: - - "Providers: Chainstack (Global Node, keyed), Alchemy (multi-chain keyed endpoint), QuickNode (shared-endpoint fleet, keyed). No keyless WebSocket endpoint exists for Robinhood Chain; all three require an API key. Keys are stored in Railway env vars, not in the repo." - - "Chain scope: all queries pin to chain=\"robinhood\". Robinhood Chain block cadence is 100ms (10 blocks/sec, ~864000 blocks/24h), roughly 20x faster than Ethereum and 5x faster than Base. Sample volume per provider per 24h window is substantially higher than any other chain in this bench cluster." - - "Race scoring: first provider to deliver block N sets T0. Each provider's sample for block N is arrival(N) minus T0 in milliseconds. Cohort closes 5 seconds after first arrival; blocks not delivered within that window are counted as missed (ws_block_gap_total) rather than scored with extreme latency values." - - "Relative, not absolute: subtracting two arrival timestamps over the same vantage path removes network latency to the probe host. The fastest provider reads near zero by construction; honest signals are win rate, trailers' lag distribution, and gap counts." - - "Aggregation: per-provider lag histogram, p50/p90/p99 via histogram_quantile over the 24h rate. Coverage = ws_head_blocks_seen_total divided by cohort maximum, clamped to 1." - - "Connection discipline: one persistent WebSocket per (provider, chain, region), client ping every 30s, read deadline 60s, 90s head watchdog forcing reconnect. Exponential backoff 2s to 60s on reconnect." - - "Vantage points: us-east, eu-west, Singapore (3 regions). Multi-region deployment provides geographic diversity across Robinhood Chain's validator topology." - -findings: - - "{{name:quicknode}} leads at {{p50:quicknode}} (p50, 24h): near-zero lag across all 3 regions, meaning QuickNode's push pipeline wins or ties the race for nearly every Robinhood Chain block. Its shared-endpoint fleet spans Arbitrum Orbit chains and likely shares sequencer proximity with Robinhood's validator path." - - "{{name:alchemy}} follows at {{p50:alchemy}} with consistent lag across us-east, eu-west, and Singapore. A solid option for teams already using Alchemy across other chains; the same multi-chain key covers Robinhood Chain with no additional account." - - "{{name:chainstack}} delivers {{p50:chainstack}} (p50, 24h). Despite being the first provider to launch a dedicated Robinhood Chain Global Node, its push pipeline trails QuickNode and Alchemy in the WebSocket race, a different competitive picture than HTTP latency, where Chainstack wins us-east." - -faq: - - q: "Which Robinhood Chain WebSocket provider is fastest for newHeads?" - a: "Per the live data above: {{name:quicknode}} at {{p50:quicknode}} (p50, 24h, averaged across 3 regions). QuickNode's near-zero lag indicates it wins or ties the push race for nearly every block. {{name:alchemy}} follows at {{p50:alchemy}}. Note that HTTP latency (eth_getBlockByNumber) tells a different story: see the [keyed-rpc-robinhood](/benchmarks/keyed-rpc-robinhood) bench." - - q: "Why does Robinhood Chain have no keyless WebSocket endpoint?" - a: "Robinhood Chain is a new Arbitrum Orbit L2 with a small set of supported infrastructure providers. At the time this bench launched, all three providers (Chainstack, Alchemy, QuickNode) require an API key for WebSocket access. This bench will add keyless providers as they become available." - - q: "How does Robinhood Chain's 100ms block time affect these measurements?" - a: "At 10 blocks per second, the 24h window carries roughly 864000 racing events per provider, compared to 43000 on Base (2s blocks) and 7200 on Ethereum (12s blocks). The confidence intervals on all percentiles are correspondingly tighter: a 24h p50 on Robinhood Chain is drawn from an extremely dense sample. The flip side is that a provider that misses 1% of blocks loses 8640 race points per day." - - q: "What is the fastest Robinhood Chain RPC by HTTP latency?" - a: "The [keyed-rpc-robinhood](/benchmarks/keyed-rpc-robinhood) bench measures eth_getBlockByNumber round-trip latency on the same providers. HTTP and WebSocket push performance are correlated but not identical: HTTP measures request-response, WebSocket measures push pipeline. Both benches run continuously." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/ws-head-latency - -expected_n: 50000 - -prometheus: - window: 24h - freshness_metric: ws_head_blocks_seen_total - -rank_matrix_query: histogram_quantile(0.50, sum by (provider, region, le) (rate(ws_head_lag_milliseconds_bucket{chain="robinhood"}[24h]))) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Robinhood Chain WebSocket - formula: "Median ms behind the earliest provider to push each Robinhood Chain newHeads frame, from a persistent keyed WebSocket (Chainstack Global Node), histogram_quantile over 24h from 3 regions." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood"}[24h]))) - mean: sum(rate(ws_head_lag_milliseconds_sum{provider="chainstack", chain="robinhood"}[24h])) / sum(rate(ws_head_lag_milliseconds_count{provider="chainstack", chain="robinhood"}[24h])) - success: clamp_max(sum(increase(ws_head_blocks_seen_total{provider="chainstack", chain="robinhood"}[24h])) / max(sum by (provider) (increase(ws_head_blocks_seen_total{chain="robinhood"}[24h]))), 1) - sample_size: sum(increase(ws_head_lag_milliseconds_count{provider="chainstack", chain="robinhood"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood"}[1h]))) - regions: - - region: us-east - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="us-east"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="us-east"}[1h]))) - - region: eu-west - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="eu-west"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="eu-west"}[1h]))) - - region: ap-southeast - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="sgp"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="chainstack", chain="robinhood", region="sgp"}[1h]))) - - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Robinhood Chain WebSocket - formula: "Median ms behind the earliest provider to push each Robinhood Chain newHeads frame, from a persistent keyed WebSocket (Alchemy), histogram_quantile over 24h from 3 regions." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood"}[24h]))) - mean: sum(rate(ws_head_lag_milliseconds_sum{provider="alchemy", chain="robinhood"}[24h])) / sum(rate(ws_head_lag_milliseconds_count{provider="alchemy", chain="robinhood"}[24h])) - success: clamp_max(sum(increase(ws_head_blocks_seen_total{provider="alchemy", chain="robinhood"}[24h])) / max(sum by (provider) (increase(ws_head_blocks_seen_total{chain="robinhood"}[24h]))), 1) - sample_size: sum(increase(ws_head_lag_milliseconds_count{provider="alchemy", chain="robinhood"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood"}[1h]))) - regions: - - region: us-east - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="us-east"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="us-east"}[1h]))) - - region: eu-west - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="eu-west"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="eu-west"}[1h]))) - - region: ap-southeast - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="sgp"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="alchemy", chain="robinhood", region="sgp"}[1h]))) - - - slug: quicknode - name: QuickNode - tag: Shared endpoint fleet, keyed Robinhood Chain WebSocket - formula: "Median ms behind the earliest provider to push each Robinhood Chain newHeads frame, from a persistent keyed WebSocket (QuickNode), histogram_quantile over 24h from 3 regions." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood"}[24h]))) - mean: sum(rate(ws_head_lag_milliseconds_sum{provider="quicknode", chain="robinhood"}[24h])) / sum(rate(ws_head_lag_milliseconds_count{provider="quicknode", chain="robinhood"}[24h])) - success: clamp_max(sum(increase(ws_head_blocks_seen_total{provider="quicknode", chain="robinhood"}[24h])) / max(sum by (provider) (increase(ws_head_blocks_seen_total{chain="robinhood"}[24h]))), 1) - sample_size: sum(increase(ws_head_lag_milliseconds_count{provider="quicknode", chain="robinhood"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood"}[1h]))) - regions: - - region: us-east - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="us-east"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="us-east"}[1h]))) - - region: eu-west - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="eu-west"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="eu-west"}[1h]))) - - region: ap-southeast - p50: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="sgp"}[24h]))) - series: histogram_quantile(0.50, sum by (le) (rate(ws_head_lag_milliseconds_bucket{provider="quicknode", chain="robinhood", region="sgp"}[1h]))) From b0bef24d883ec8292f7f826263190a66cb8a9a5e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 17:35:55 +0200 Subject: [PATCH 07/11] drop all non-robinhood keyed-rpc benches --- benchmarks/keyed-rpc-arbitrum.yml | 140 ------------------------- benchmarks/keyed-rpc-base.yml | 140 ------------------------- benchmarks/keyed-rpc-bnb.yml | 163 ------------------------------ benchmarks/keyed-rpc-ethereum.yml | 142 -------------------------- benchmarks/keyed-rpc-polygon.yml | 140 ------------------------- benchmarks/keyed-rpc-solana.yml | 140 ------------------------- 6 files changed, 865 deletions(-) delete mode 100644 benchmarks/keyed-rpc-arbitrum.yml delete mode 100644 benchmarks/keyed-rpc-base.yml delete mode 100644 benchmarks/keyed-rpc-bnb.yml delete mode 100644 benchmarks/keyed-rpc-ethereum.yml delete mode 100644 benchmarks/keyed-rpc-polygon.yml delete mode 100644 benchmarks/keyed-rpc-solana.yml diff --git a/benchmarks/keyed-rpc-arbitrum.yml b/benchmarks/keyed-rpc-arbitrum.yml deleted file mode 100644 index 82d8558d..00000000 --- a/benchmarks/keyed-rpc-arbitrum.yml +++ /dev/null @@ -1,140 +0,0 @@ -# OpenChainBench. Bench № 238 - -slug: keyed-rpc-arbitrum -number: "238" -title: "Fastest Arbitrum RPC with API key: Alchemy, Infura, Chainstack" -seo_title: "Fastest Arbitrum RPC API key 2026: Alchemy vs Infura vs Chainstack latency" -seo_description: "Live Arbitrum RPC latency: Alchemy, Infura, and Chainstack keyed endpoints measured every 60s from 3 regions. Free API key comparison." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed Arbitrum One endpoints (Alchemy, Infura, Chainstack), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - Arbitrum One is the dominant EVM L2 by TVL, making the choice of - keyed RPC provider a practical question for most DeFi builders. - This bench probes Alchemy, Infura, and Chainstack on their keyed - Arbitrum endpoints every 60 seconds from us-east, eu-west, and - Singapore, staying inside each provider's free monthly quota. - Alchemy leads at 5-6ms across all regions. Chainstack delivers - 67-70ms as the clear second option. Infura's free tier shows - 450ms+ on Arbitrum, consistent with the same throttling pattern - observed on Ethereum and Base. - The multi-chain overview is at - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency); this page - isolates Arbitrum for builders who only need that one chain. - -abstract: | - We measure the round-trip latency of a single eth_getBlockByNumber - call against the keyed free tier of Alchemy, Infura, and Chainstack - on Arbitrum One. The probe uses a rotating JSON-RPC id to defeat - edge caches, fires every 60 seconds from 3 regions, and classifies - each response as ok, http_err, jsonrpc_err, stale, or timeout. - Only ok responses contribute to the latency distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real Arbitrum chain tip." - - "Authentication: each provider's standard free-tier key, obtained via normal signup, no credit card. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack, Infura /v3/)." - - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy, Chainstack (Global Node, plan disclosed), Infura / MetaMask Developer. QuickNode and Ankr do not have confirmed keyed Arbitrum data at this time. A provider is absent when its free tier does not cover Arbitrum or its key quota was exhausted." - -findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) across all 3 regions, consistent with Alchemy's Arbitrum-optimized RPC infrastructure." - - "{{name:chainstack}} delivers {{p50:chainstack}} as the clear second option; no other keyed provider comes close outside of Alchemy." - - "{{name:infura}} sits at {{p50:infura}}, roughly 70x slower than Alchemy, consistent with its shared free-tier pool throttling on L2 chains." - -faq: - - q: "Which Arbitrum RPC provider is fastest with a free API key?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore probes). Chainstack is the second-fastest option at {{p50:chainstack}}. If you need both Ethereum and Arbitrum on one key, Alchemy covers both chains." - - q: "Is a keyed Arbitrum endpoint worth the signup vs the public RPC?" - a: "The [rpc-capabilities](/benchmarks/rpc-capabilities) bench measures no-key public endpoints with the same probe methodology. Comparing the two pages shows whether the signup yields a measurable latency improvement on Arbitrum for your region." - - q: "Why does Infura lag on Arbitrum?" - a: "Infura's free tier meters 3M credits per day. The 450ms+ latency on Arbitrum is consistent with Infura routing free-tier L2 traffic through a slower shared pool, not quota exhaustion. Our probe cadence (60s from 3 regions) uses under 5k calls per day per chain, well inside any free quota." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="arbitrum",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Arbitrum endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed Arbitrum endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="arbitrum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="arbitrum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="arbitrum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="arbitrum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="arbitrum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="arbitrum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="arbitrum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="arbitrum",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Arbitrum endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed Arbitrum Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="arbitrum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="arbitrum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="arbitrum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="arbitrum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="arbitrum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="arbitrum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="arbitrum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="arbitrum",tier="keyed",region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, keyed Arbitrum - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Infura's free-tier keyed Arbitrum endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="arbitrum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura",chain="arbitrum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura",chain="arbitrum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura",chain="arbitrum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura",chain="arbitrum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="infura",chain="arbitrum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura",chain="arbitrum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="arbitrum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="arbitrum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="arbitrum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="arbitrum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="arbitrum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="arbitrum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="arbitrum",tier="keyed",region="sgp"}[1h])) diff --git a/benchmarks/keyed-rpc-base.yml b/benchmarks/keyed-rpc-base.yml deleted file mode 100644 index 68deaacd..00000000 --- a/benchmarks/keyed-rpc-base.yml +++ /dev/null @@ -1,140 +0,0 @@ -# OpenChainBench. Bench № 239 - -slug: keyed-rpc-base -number: "239" -title: "Fastest Base RPC with API key: Alchemy, Infura, Chainstack" -seo_title: "Fastest Base RPC API key 2026: Alchemy vs Infura vs Chainstack latency" -seo_description: "Live Base RPC latency: Alchemy, Infura, and Chainstack keyed endpoints measured every 60s from 3 regions. Best free API key for Base." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed Base endpoints (Alchemy, Infura, Chainstack), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - Base, Coinbase's OP Stack L2, has become one of the fastest-growing - chains for consumer apps. This bench probes Alchemy, Infura, and - Chainstack on their keyed Base endpoints every 60 seconds from - us-east, eu-west, and Singapore, staying inside each provider's - free monthly quota. - Alchemy leads at 6-7ms across all regions. Chainstack sits at - 69-74ms as a consistent second option. Infura shows 450ms+ on Base, - the same throttling pattern as on other chains in its shared - free-tier pool. - The multi-chain overview across all providers and chains is at - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency); this page - isolates Base for teams building there. - -abstract: | - We measure the round-trip latency of a single eth_getBlockByNumber - call against the keyed free tier of Alchemy, Infura, and Chainstack - on Base. The probe uses a rotating JSON-RPC id to defeat edge caches, - fires every 60 seconds from 3 regions, and classifies each response - as ok, http_err, jsonrpc_err, stale, or timeout. Only ok responses - contribute to the latency distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real Base chain tip." - - "Authentication: each provider's standard free-tier key, no credit card required. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack, Infura /v3/)." - - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy, Chainstack (Global Node, plan disclosed; free plan caps at one node), Infura / MetaMask Developer. A provider is absent when its free tier does not cover Base or its key quota was exhausted; that absence is itself a finding." - -findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) across all 3 regions." - - "{{name:chainstack}} delivers {{p50:chainstack}} as the second-fastest option on Base; its Global Node anycast product routes to the closest node automatically." - - "{{name:infura}} sits at {{p50:infura}}, consistent with its shared free-tier pool routing pattern across OP Stack chains." - -faq: - - q: "Which Base RPC provider is fastest with a free API key?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore probes). Chainstack is the closest second at {{p50:chainstack}}." - - q: "Does Alchemy have an advantage on Base specifically?" - a: "Alchemy built Base's sequencer and maintains close infrastructure ties to Coinbase. This co-location advantage is visible in the sub-10ms p50 across all 3 probe regions. Chainstack and Infura rely on external access to the same sequencer, so an additional hop adds latency." - - q: "Does the keyed tier add any reliability vs the public Base RPC?" - a: "The public Base RPC (base.llamarpc.com, etc.) is compared on the [rpc-capabilities](/benchmarks/rpc-capabilities) bench with the same probe. The keyed tier adds quota attribution and (on paid plans) dedicated capacity, but at the free tier the infrastructure is typically shared." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="base",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Base endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed Base endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="base",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="base",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="base",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="base",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="base",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="base",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="base",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="base",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="base",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="base",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="base",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="base",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="base",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="base",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Base endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed Base Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="base",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="base",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="base",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="base",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="base",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="base",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="base",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="base",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="base",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="base",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="base",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="base",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="base",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="base",tier="keyed",region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, keyed Base - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Infura's free-tier keyed Base endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="base",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura",chain="base",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura",chain="base",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura",chain="base",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura",chain="base",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="infura",chain="base",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura",chain="base",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="base",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="base",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="base",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="base",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="base",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="base",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="base",tier="keyed",region="sgp"}[1h])) diff --git a/benchmarks/keyed-rpc-bnb.yml b/benchmarks/keyed-rpc-bnb.yml deleted file mode 100644 index 152a0860..00000000 --- a/benchmarks/keyed-rpc-bnb.yml +++ /dev/null @@ -1,163 +0,0 @@ -# OpenChainBench. Bench № 240 - -slug: keyed-rpc-bnb -number: "240" -title: "Fastest BNB Chain RPC with API key: Alchemy, QuickNode, Chainstack, Infura" -seo_title: "Fastest BNB Chain RPC API key 2026: Alchemy, QuickNode, Chainstack compared" -seo_description: "Live BNB Chain RPC latency: Alchemy, QuickNode, Chainstack, and Infura keyed endpoints measured every 60s from 3 regions." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed BNB Chain endpoints (Alchemy, QuickNode, Chainstack, Infura), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - BNB Chain is the broadest-reach EVM chain outside Ethereum, with - one of the highest RPC call volumes in the industry. This bench - probes Alchemy, QuickNode, Chainstack, and Infura on their keyed - BNB endpoints every 60 seconds from us-east, eu-west, and Singapore. - QuickNode returns sub-millisecond p50 values on BNB that suggest - aggressive local caching of the latest-block response; these numbers - are included as measured and disclosed in the methodology. - Alchemy follows at 6ms. Chainstack sits at 16-19ms, meaningfully - below Infura's 452ms+ throttled response. - The multi-chain view is at - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency); this page - isolates BNB Chain specifically. - -abstract: | - We measure the round-trip latency of a single eth_getBlockByNumber - call against the keyed free tier of Alchemy, QuickNode, Chainstack, - and Infura on BNB Chain. The probe uses a rotating JSON-RPC id to - defeat edge caches, fires every 60 seconds from 3 regions, and - classifies each response as ok, http_err, jsonrpc_err, stale, or - timeout. Only ok responses contribute to the latency distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real BNB chain tip." - - "Authentication: each provider's standard free-tier key, no credit card required. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack, Infura /v3/), QuickNode endpoint subdomain." - - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy, QuickNode (shared fleet, paid account, plan disclosed), Chainstack (Global Node, plan disclosed), Infura. QuickNode's sub-millisecond p50 on BNB is consistent with CDN-level latest-block caching; included as measured and disclosed." - -findings: - - "{{name:quicknode}} records {{p50:quicknode}} (p50, 24h), consistent with response-layer caching of the latest BNB block; the methodology note above explains the disclosure." - - "{{name:alchemy}} delivers {{p50:alchemy}}, the fastest fully-live (non-cached) response for keyed BNB endpoints." - - "{{name:chainstack}} sits at {{p50:chainstack}}, well ahead of {{name:infura}} at {{p50:infura}} which shows the same throttled free-tier pattern as on other chains." - -faq: - - q: "Which BNB Chain RPC provider is fastest with a free API key?" - a: "QuickNode shows sub-millisecond p50 that is consistent with edge caching; read that as best-in-class cache performance, not raw node latency. Alchemy is the fastest fully-live provider at {{p50:alchemy}}. Chainstack is a solid second at {{p50:chainstack}}." - - q: "Why is QuickNode so fast on BNB?" - a: "QuickNode's BNB endpoint returns eth_getBlockByNumber('latest') at sub-millisecond latency that is not consistent with a round-trip to a full node. This is most likely edge-level caching of the current head block, a valid optimization that reduces real-world RPC latency for read-only latest-block calls. The probe uses a rotating id to defeat body caches, but QuickNode may be responding from a CDN layer before the id check." - - q: "Is the no-key BNB RPC competitive with these keyed options?" - a: "Compare on the [rpc-capabilities](/benchmarks/rpc-capabilities) bench, which measures public BNB endpoints with the same probe. BNB has an active ecosystem of public RPCs that in some regions match keyed free-tier numbers." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="bnb",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: quicknode - name: QuickNode - tag: Shared fleet, keyed BNB endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on QuickNode's keyed BNB endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="bnb",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="quicknode",chain="bnb",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="quicknode",chain="bnb",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="quicknode",chain="bnb",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="quicknode",chain="bnb",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="quicknode",chain="bnb",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="quicknode",chain="bnb",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="bnb",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="bnb",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="bnb",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="bnb",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="bnb",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="bnb",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="bnb",tier="keyed",region="sgp"}[1h])) - - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed BNB endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed BNB Chain endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="bnb",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="bnb",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="bnb",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="bnb",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="bnb",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="bnb",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="bnb",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="bnb",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="bnb",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="bnb",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="bnb",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="bnb",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="bnb",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="bnb",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed BNB endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed BNB Chain Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="bnb",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="bnb",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="bnb",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="bnb",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="bnb",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="bnb",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="bnb",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="bnb",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="bnb",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="bnb",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="bnb",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="bnb",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="bnb",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="bnb",tier="keyed",region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, keyed BNB - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Infura's free-tier keyed BNB Chain endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="bnb",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura",chain="bnb",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura",chain="bnb",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura",chain="bnb",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura",chain="bnb",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="infura",chain="bnb",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura",chain="bnb",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="bnb",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="bnb",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="bnb",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="bnb",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="bnb",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="bnb",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="bnb",tier="keyed",region="sgp"}[1h])) diff --git a/benchmarks/keyed-rpc-ethereum.yml b/benchmarks/keyed-rpc-ethereum.yml deleted file mode 100644 index bd5a9a1f..00000000 --- a/benchmarks/keyed-rpc-ethereum.yml +++ /dev/null @@ -1,142 +0,0 @@ -# OpenChainBench. Bench № 237 - -slug: keyed-rpc-ethereum -number: "237" -title: "Fastest Ethereum RPC with API key: Alchemy, Infura, Chainstack" -seo_title: "Fastest Ethereum RPC API key 2026: Alchemy vs Infura vs Chainstack" -seo_description: "Live Ethereum RPC latency benchmark: Alchemy, Infura, and Chainstack keyed endpoints probed every 60s from 3 regions. Free API keys compared." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed Ethereum endpoints (Alchemy, Infura, Chainstack), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - Ethereum is the chain every RPC provider supports first, so it is - also where the free keyed tier competition is sharpest. This bench - probes Alchemy, Infura, and Chainstack on their keyed Ethereum - endpoints every 60 seconds from us-east, eu-west, and Singapore, - staying inside each provider's free monthly quota. - Chainstack stands out on Ethereum: its EU-west node matches Alchemy - at 6ms, the only chain and region where a non-Alchemy provider - currently ties the leader. Infura's free tier meters 3M credits - per day and shows 450ms+ in all three regions, consistent with - heavy rate-throttling of the shared free-tier pool. - This bench shares the same probe methodology and Prometheus - recording rules as the multi-chain - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency) overview, so - the per-region breakdowns are directly comparable across chains. - -abstract: | - We measure the round-trip latency of a single eth_getBlockByNumber - call against the signup-gated free tier of Alchemy, Infura, and - Chainstack on Ethereum. The probe uses a rotating JSON-RPC id to - defeat edge caches, fires every 60 seconds from 3 regions, and - classifies each response as ok, http_err, jsonrpc_err, stale, or - timeout. Only ok responses contribute to the latency distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real chain tip." - - "Authentication: each provider's standard free-tier key, obtained via normal signup, no credit card. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack, Infura /v3/)." - - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy, Chainstack (Global Node, plan disclosed; free plan caps at one node), Infura / MetaMask Developer. A provider is absent when its free tier does not cover Ethereum or its key quota was exhausted; that absence is itself a finding." - -findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) across all 3 regions." - - "{{name:chainstack}} delivers {{p50:chainstack}} on the 24h cross-region average; in EU-west it matches Alchemy response-for-response, the only provider to do so on any chain." - - "{{name:infura}} sits at {{p50:infura}}, consistent with heavy rate-throttling on its shared free-tier pool (3M credits per day at 80 credits per call)." - -faq: - - q: "Which Ethereum RPC provider is fastest with a free API key?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore probes). Chainstack ties Alchemy in EU-west at 6ms; if your users are primarily European, either provider delivers equivalent latency." - - q: "Is a keyed Ethereum endpoint faster than a public one?" - a: "On Alchemy and Chainstack, keyed and public endpoints run on the same shared infrastructure, so the latency is equivalent. The keyed tier adds a monthly quota and a dedicated API key for rate-limit attribution. The [rpc-capabilities](/benchmarks/rpc-capabilities) bench measures the public no-key tier with the same probe so the comparison is direct." - - q: "Why is Infura so slow here?" - a: "Infura's free tier meters 3M credits per day (80 credits per eth_getBlockByNumber call), equivalent to roughly 37k calls per day per key. At our 60s probe cadence across 3 regions that is ~4.3k calls per day, comfortably inside the quota. The 450ms+ latency is consistent with Infura routing free-tier traffic to a throttled shared pool, not a quota exhaustion." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="ethereum",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Ethereum endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed Ethereum endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="ethereum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="ethereum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="ethereum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="ethereum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="ethereum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="ethereum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="ethereum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="ethereum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="ethereum",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Ethereum endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed Ethereum Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="ethereum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="ethereum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="ethereum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="ethereum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="ethereum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="ethereum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="ethereum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="ethereum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="ethereum",tier="keyed",region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, keyed Ethereum - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Infura's free-tier keyed Ethereum endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="ethereum",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura",chain="ethereum",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura",chain="ethereum",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura",chain="ethereum",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura",chain="ethereum",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="infura",chain="ethereum",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura",chain="ethereum",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="ethereum",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="ethereum",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="ethereum",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="ethereum",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="ethereum",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="ethereum",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="ethereum",tier="keyed",region="sgp"}[1h])) diff --git a/benchmarks/keyed-rpc-polygon.yml b/benchmarks/keyed-rpc-polygon.yml deleted file mode 100644 index 73337c5a..00000000 --- a/benchmarks/keyed-rpc-polygon.yml +++ /dev/null @@ -1,140 +0,0 @@ -# OpenChainBench. Bench № 241 - -slug: keyed-rpc-polygon -number: "241" -title: "Fastest Polygon RPC with API key: Alchemy, Infura, Chainstack" -seo_title: "Fastest Polygon RPC API key 2026: Alchemy vs Infura vs Chainstack latency" -seo_description: "Live Polygon RPC latency: Alchemy, Infura, and Chainstack keyed endpoints measured every 60s from 3 regions. Best free API key for Polygon." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed Polygon endpoints (Alchemy, Infura, Chainstack), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - Polygon PoS remains the most widely deployed sidechain for consumer - apps and gaming. This bench probes Alchemy, Infura, and Chainstack - on their keyed Polygon endpoints every 60 seconds from us-east, - eu-west, and Singapore, staying inside each provider's free monthly - quota. - Alchemy leads at 5-6ms across all regions. Chainstack delivers - 83-97ms, the widest cross-region gap in this cohort, reflecting its - anycast routing to MATIC validators. Infura sits at 449-461ms, - consistent with its shared free-tier throttling pattern. - The multi-chain overview is at - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency); this page - isolates Polygon for builders targeting that chain. - -abstract: | - We measure the round-trip latency of a single eth_getBlockByNumber - call against the keyed free tier of Alchemy, Infura, and Chainstack - on Polygon PoS. The probe uses a rotating JSON-RPC id to defeat edge - caches, fires every 60 seconds from 3 regions, and classifies each - response as ok, http_err, jsonrpc_err, stale, or timeout. Only ok - responses contribute to the latency distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real Polygon chain tip." - - "Authentication: each provider's standard free-tier key, no credit card required. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack, Infura /v3/)." - - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy, Chainstack (Global Node, plan disclosed; free plan caps at one node), Infura / MetaMask Developer. A provider is absent when its free tier does not cover Polygon or its key quota was exhausted; that absence is itself a finding." - -findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) across all 3 regions." - - "{{name:chainstack}} delivers {{p50:chainstack}} as the second-fastest option; its cross-region spread on Polygon is wider than on Ethereum or BNB, reflecting longer validator round-trips from some probe locations." - - "{{name:infura}} sits at {{p50:infura}}, consistent with its shared free-tier throttling pattern across EVM chains." - -faq: - - q: "Which Polygon RPC provider is fastest with a free API key?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore probes). Chainstack follows at {{p50:chainstack}}." - - q: "Does Polygon's high block rate affect RPC latency?" - a: "Polygon PoS produces blocks every 2 seconds, roughly 4x faster than Ethereum. A probe arriving between blocks will see the same cached latest-block response as the previous probe; only on-chain progression resets the tip. The stale threshold (20 blocks) is set to account for this higher block rate while still catching genuine sync issues." - - q: "Is there a meaningful latency difference between Polygon and Ethereum keyed RPCs?" - a: "Alchemy shows similar latency on both chains (5-7ms) because it routes from the same US/EU PoPs to co-located validator infrastructure. Chainstack is faster on Ethereum (6ms EU-west) than Polygon (83-97ms), likely reflecting different node placement for MATIC vs ETH validators." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="polygon",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Polygon endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed Polygon endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="polygon",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="polygon",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="polygon",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="polygon",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="polygon",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="polygon",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="polygon",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="polygon",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="polygon",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="polygon",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="polygon",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="polygon",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="polygon",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="polygon",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Polygon endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed Polygon Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="polygon",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="polygon",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="polygon",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="polygon",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="polygon",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="polygon",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="polygon",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="polygon",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="polygon",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="polygon",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="polygon",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="polygon",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="polygon",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="polygon",tier="keyed",region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, keyed Polygon - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Infura's free-tier keyed Polygon endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="polygon",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura",chain="polygon",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura",chain="polygon",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura",chain="polygon",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura",chain="polygon",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="infura",chain="polygon",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura",chain="polygon",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="polygon",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="polygon",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="polygon",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="polygon",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="polygon",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura",chain="polygon",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura",chain="polygon",tier="keyed",region="sgp"}[1h])) diff --git a/benchmarks/keyed-rpc-solana.yml b/benchmarks/keyed-rpc-solana.yml deleted file mode 100644 index 99a4fda6..00000000 --- a/benchmarks/keyed-rpc-solana.yml +++ /dev/null @@ -1,140 +0,0 @@ -# OpenChainBench. Bench № 242 - -slug: keyed-rpc-solana -number: "242" -title: "Fastest Solana RPC with API key: Alchemy, Helius, Chainstack" -seo_title: "Fastest Solana RPC API key 2026: Alchemy vs Helius vs Chainstack latency" -seo_description: "Live Solana RPC latency: Alchemy, Helius, and Chainstack keyed endpoints measured every 60s from 3 regions. Best Solana API key compared." -subtitle: getSlot (processed commitment) latency against keyed Solana endpoints (Alchemy, Helius, Chainstack), probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - Solana runs a distinct RPC API with different call semantics and - a more demanding commitment model than EVM chains. This bench probes - Alchemy, Helius, and Chainstack on their keyed Solana endpoints every - 60 seconds from us-east, eu-west, and Singapore, using getSlot at - processed commitment as the anti-cache probe. - Alchemy leads at 6ms across all regions. Helius, the Solana-native - provider, delivers 13-15ms with the tightest region-to-region spread. - Chainstack sits at 18-21ms. No EVM-centric provider currently matches - the Solana-native options in this cohort. - For EVM chains with the same keyed providers, see the - [rpc-keyed-latency](/benchmarks/rpc-keyed-latency) overview. - -abstract: | - We measure the round-trip latency of a single getSlot call at - processed commitment against the keyed free tier of Alchemy, Helius, - and Chainstack on Solana. The probe uses a rotating JSON-RPC id to - defeat edge caches, fires every 60 seconds from 3 regions, and - classifies each response as ok, http_err, jsonrpc_err, stale, or - timeout. Stale is defined as more than 300 slots behind the - cross-provider tip. Only ok responses contribute to the distribution. - -methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp), inside each provider's free monthly quota. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - - "Payload: getSlot at processed commitment with a rotating JSON-RPC id. Processed commitment is the shallowest Solana confirmation level; probing it measures pure RPC responsiveness without finality overhead. The rotating id defeats body-keyed edge caches." - - "Authentication: each provider's standard free-tier key, no credit card required. Keys live in env vars on probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy /v2/, Chainstack), query param (Helius ?api-key=)." - - "Call-result classification: ok (HTTP 200 with usable slot number), http_err, jsonrpc_err (HTTP 200 with error body), stale (slot more than 300 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Alchemy (multi-chain provider with Solana support), Helius (Solana-native, 1M credits/mo free), Chainstack (Global Node, plan disclosed). Infura does not offer Solana; Ankr and QuickNode have no confirmed keyed Solana data in the current probe." - -findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h), consistent across us-east, eu-west, and Singapore." - - "{{name:helius}}, the Solana-native provider, delivers {{p50:helius}} with the tightest cross-region spread in the cohort; the gap to Alchemy is small in practice." - - "{{name:chainstack}} sits at {{p50:chainstack}}, a reasonable option for teams that already use Chainstack Global Nodes for EVM chains and want to add Solana on the same account." - -faq: - - q: "Which Solana RPC provider is fastest with a free API key?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h). Helius is close at {{p50:helius}} and is the Solana-native specialist option. For teams only targeting Solana, Helius's Solana-optimized infrastructure and validator-level integration make it a strong choice regardless of the millisecond difference." - - q: "What is processed commitment and why probe it?" - a: "Processed is Solana's lightest confirmation level: a transaction or slot is considered processed as soon as one leader processes it, with no vote confirmation. Probing getSlot at processed commitment measures raw RPC responsiveness without finality overhead. For apps that need confirmed or finalized commitments, the round-trip to those levels adds the validator voting latency on top." - - q: "Is Helius faster than Alchemy on Solana?" - a: "In the current 24h window, {{name:alchemy}} leads at {{p50:alchemy}} vs Helius at {{p50:helius}}. Both are within single-digit milliseconds of each other. Helius offers Solana-specific features (webhook transactions, compressed NFT APIs, priority fee estimates) that may matter beyond raw getSlot latency." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="solana",tier="keyed"}) - -dimensions: - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, keyed Solana endpoint - formula: "p50 over 24h of round-trip latency (ms) for getSlot at processed commitment probed every 60s from 3 regions on Alchemy's keyed Solana endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="solana",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="solana",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy",chain="solana",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy",chain="solana",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy",chain="solana",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy",chain="solana",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy",chain="solana",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="solana",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="solana",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="solana",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="solana",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="solana",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="solana",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="solana",tier="keyed",region="sgp"}[1h])) - - - slug: helius - name: Helius - tag: Solana-native, 1M credits/mo free - formula: "p50 over 24h of round-trip latency (ms) for getSlot at processed commitment probed every 60s from 3 regions on Helius's free-tier Solana endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius",chain="solana",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="helius",chain="solana",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="helius",chain="solana",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="helius",chain="solana",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="helius",chain="solana",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="helius",chain="solana",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="helius",chain="solana",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius",chain="solana",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius",chain="solana",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius",chain="solana",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius",chain="solana",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius",chain="solana",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius",chain="solana",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius",chain="solana",tier="keyed",region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Node, keyed Solana endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for getSlot at processed commitment probed every 60s from 3 regions on Chainstack's keyed Solana Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="solana",tier="keyed"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="solana",tier="keyed"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack",chain="solana",tier="keyed"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack",chain="solana",tier="keyed"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack",chain="solana",tier="keyed"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack",chain="solana",tier="keyed"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack",chain="solana",tier="keyed"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="solana",tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="solana",tier="keyed",region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="solana",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="solana",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="solana",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="solana",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="solana",tier="keyed",region="sgp"}[1h])) From d7cc9329bd99641df23255dba4e9cb929d94065d Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 17:41:58 +0200 Subject: [PATCH 08/11] keyed-rpc-robinhood: US-only bench, Chainstack leads --- benchmarks/keyed-rpc-robinhood.yml | 79 +++++++++++++----------------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/benchmarks/keyed-rpc-robinhood.yml b/benchmarks/keyed-rpc-robinhood.yml index 96b8626c..85a6d922 100644 --- a/benchmarks/keyed-rpc-robinhood.yml +++ b/benchmarks/keyed-rpc-robinhood.yml @@ -2,10 +2,10 @@ slug: keyed-rpc-robinhood number: "243" -title: "Fastest Robinhood Chain RPC with API key: Chainstack, Alchemy, QuickNode" +title: "Fastest Robinhood Chain RPC with API key: Chainstack vs Alchemy vs QuickNode" seo_title: "Fastest Robinhood Chain RPC API key 2026: Chainstack vs Alchemy vs QuickNode latency" -seo_description: "Live Robinhood Chain RPC latency: Chainstack, Alchemy, and QuickNode keyed endpoints probed every 60s from 3 regions. First public benchmark for this Arbitrum Orbit L2." -subtitle: eth_getBlockByNumber latency against keyed Robinhood Chain endpoints (Chainstack, Alchemy, QuickNode), probed every 60 seconds from 3 regions. +seo_description: "Live Robinhood Chain RPC latency: Chainstack, Alchemy, and QuickNode keyed endpoints probed every 60s from US-East and US-West. First public benchmark for this Arbitrum Orbit L2." +subtitle: eth_getBlockByNumber latency against keyed Robinhood Chain endpoints (Chainstack, Alchemy, QuickNode), probed every 60 seconds from US-East and US-West. category: RPCs status: live metric: RPC latency @@ -20,42 +20,43 @@ seo_intro: | advantage on a financially-sensitive chain with low tolerance for RPC latency. This bench probes Chainstack, Alchemy, and QuickNode on their keyed - Robinhood Chain endpoints every 60 seconds from us-east, eu-west, and - Singapore. Chainstack recorded p50 of 72ms in internal pre-launch tests - vs Alchemy at 86ms; the public Robinhood RPC lagged at 170ms. Live - data on this page reflects continuous measurement since the bench - launched; Robinhood Chain data accumulates over the first 24 hours. - This is the only independently-run public latency benchmark for + Robinhood Chain endpoints every 60 seconds from US-East (Virginia) and + US-West (Oregon). Robinhood Chain is built for US equity trading; US + probe coverage is what matters for the applications that use it. Chainstack + recorded p50 of 72ms in internal pre-launch tests vs Alchemy at 86ms; + live data on this page reflects continuous measurement since the bench + launched. This is the only independently-run public latency benchmark for Robinhood Chain. abstract: | We measure the round-trip latency of eth_getBlockByNumber against the keyed endpoints of Chainstack, Alchemy, and QuickNode on Robinhood Chain. The probe uses a rotating JSON-RPC id to defeat edge caches, fires every - 60 seconds from 3 regions, and classifies each response as ok, http_err, - jsonrpc_err, stale, or timeout. Only ok responses contribute to the - latency distribution. This is a new bench; the first 24h of live data - will replace the pre-launch internal test numbers in the findings. + 60 seconds from US-East and US-West, and classifies each response as ok, + http_err, jsonrpc_err, stale, or timeout. Only ok responses contribute to + the latency distribution. methodology: - - "Cadence: every 60 seconds per provider from each of 3 probe regions (us-east, eu-west, sgp). Robinhood Chain runs on the Arbitrum Orbit stack with ~100ms block times; the 60s probe cadence captures 600 blocks per hour. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." + - "Cadence: every 60 seconds per provider from each of 2 US probe regions (us-east/Virginia, us-west/Oregon). Robinhood Chain runs on the Arbitrum Orbit stack with ~100ms block times; the 60s probe cadence captures 600 blocks per hour. Headline p50/p90/p99 aggregate across regions via Prometheus avg(quantile_over_time(...))." - "Payload: eth_getBlockByNumber('latest', false) with a rotating JSON-RPC id. Non-cacheable by design: the rotating id defeats body-keyed edge caches and forces the provider to serve a real Robinhood Chain tip." - "Authentication: Chainstack Global Node key (node-scoped, dedicated to Robinhood Chain; key in Railway env, not in repo). Alchemy uses its standard multi-chain key. QuickNode uses its shared-endpoint key for Robinhood Chain. All keys in Railway env, not in repo." - "Call-result classification: ok (HTTP 200 with usable block number), http_err, jsonrpc_err (HTTP 200 with error body), stale (block more than 20 behind the cross-provider tip), timeout. Latency is recorded only for ok responses." - - "Cohort: Chainstack, Alchemy, and QuickNode. Infura and Ankr do not currently list Robinhood Chain in their supported networks." + - "Cohort: Chainstack, Alchemy, and QuickNode. Infura and Ankr do not currently list Robinhood Chain in their supported networks. Probe regions are US-only because Robinhood Chain serves a US equity trading audience." findings: - - "{{name:alchemy}} leads at {{p50:alchemy}} (p50, 24h) averaged across all 3 regions. It edges out Chainstack in eu-west and Singapore while sitting within 2ms of Chainstack in us-east." - - "{{name:chainstack}} wins us-east at {{p50:chainstack}} in that region, reflecting its US-based Global Node placement. Pre-launch internal tests (50 samples, single region) had Chainstack at 72ms vs Alchemy at 86ms; live multi-region data flips the aggregate ranking while preserving Chainstack's us-east advantage." - - "{{name:quicknode}} delivers {{p50:quicknode}} across all regions via its shared-endpoint fleet." + - "{{name:chainstack}} leads at {{p50:chainstack}} (p50, 24h) across both US regions. Its geo-routed Global Node places infrastructure close to the Robinhood sequencer, which benefits applications running in US data centers." + - "{{name:alchemy}} sits at {{p50:alchemy}} across both US probe regions via its edge infrastructure." + - "{{name:quicknode}} delivers {{p50:quicknode}} via its shared-endpoint fleet." faq: - q: "Which Robinhood Chain RPC provider is fastest?" - a: "Per the live data above: {{name:alchemy}} at {{p50:alchemy}} (p50 over 24h, averaged across us-east, eu-west, and Singapore). {{name:chainstack}} wins the us-east region specifically at {{p50:chainstack}}, likely due to its US-based node placement. If you deploy primarily in the US, Chainstack competes for the lead; for a global footprint, Alchemy's edge infrastructure gives it the aggregate win." + a: "Per the live data above: {{name:chainstack}} at {{p50:chainstack}} (p50 over 24h, averaged across US-East and US-West). Chainstack's geo-routed Global Node consistently wins both US probe regions. For US-deployed trading applications on Robinhood Chain, Chainstack is the lowest-latency keyed provider in this benchmark." - q: "What is Robinhood Chain?" a: "Robinhood Chain (chain ID 4663) is an Arbitrum Orbit L2 built by Robinhood for tokenized equity trading. It launched in March 2026 with ~100ms block times and a gas fee subsidy running through September 29, 2026. It supports EVM-compatible tooling and standard eth_ JSON-RPC methods." - q: "Why is this the only Robinhood Chain latency benchmark?" a: "Robinhood Chain is a new chain. OpenChainBench added it within days of Chainstack, Alchemy, and QuickNode support going live, making this the first and so far only independent latency measurement. Infura and Ankr do not currently list Robinhood Chain in their supported networks." + - q: "Why do you only probe from US regions?" + a: "Robinhood Chain is purpose-built for US equity trading. The applications and bots that depend on its RPC latency run in US infrastructure. Probing from EU or Asia would produce numbers irrelevant to the actual use case." source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency @@ -67,16 +68,15 @@ rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_2 dimensions: region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: us-west, label: US-West } providers: - slug: chainstack name: Chainstack tag: Global Node, keyed Robinhood Chain endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Chainstack's keyed Robinhood Chain Global Node." + formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from US-East and US-West on Chainstack's keyed Robinhood Chain Global Node." queries: p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed"}) p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack",chain="robinhood",tier="keyed"}) @@ -89,17 +89,14 @@ providers: - region: us-east p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed",region="us-east"}) series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="robinhood",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="robinhood",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="robinhood",tier="keyed",region="sgp"}[1h])) + - region: us-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack",chain="robinhood",tier="keyed",region="us-west"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack",chain="robinhood",tier="keyed",region="us-west"}[1h])) - slug: quicknode name: QuickNode tag: Shared endpoint fleet, keyed Robinhood Chain endpoint, plan disclosed - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on QuickNode's keyed Robinhood Chain endpoint." + formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from US-East and US-West on QuickNode's keyed Robinhood Chain endpoint." queries: p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed"}) p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="quicknode",chain="robinhood",tier="keyed"}) @@ -112,17 +109,14 @@ providers: - region: us-east p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="us-east"}) series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="sgp"}[1h])) + - region: us-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode",chain="robinhood",tier="keyed",region="us-west"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode",chain="robinhood",tier="keyed",region="us-west"}[1h])) - slug: alchemy name: Alchemy tag: 30M CU/mo free, keyed Robinhood Chain endpoint - formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from 3 regions on Alchemy's keyed Robinhood Chain endpoint." + formula: "p50 over 24h of round-trip latency (ms) for eth_getBlockByNumber probed every 60s from US-East and US-West on Alchemy's keyed Robinhood Chain endpoint." queries: p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="robinhood",tier="keyed"}) p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy",chain="robinhood",tier="keyed"}) @@ -135,9 +129,6 @@ providers: - region: us-east p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="robinhood",tier="keyed",region="us-east"}) series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="robinhood",tier="keyed",region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="robinhood",tier="keyed",region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="robinhood",tier="keyed",region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="robinhood",tier="keyed",region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="robinhood",tier="keyed",region="sgp"}[1h])) + - region: us-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy",chain="robinhood",tier="keyed",region="us-west"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy",chain="robinhood",tier="keyed",region="us-west"}[1h])) From e7a0b84ac39567de4d9a4193b60a029a89df3718 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 18:02:33 +0200 Subject: [PATCH 09/11] bump cache v56/v23 to flush keyed-rpc bench set changes --- src/lib/spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 757de2df..702b242c 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -326,7 +326,8 @@ const loadBenchmarkUnfilteredCached = unstable_cache( // Bump to flush v52 cached entries that still carry stale Flashbots row. // v54: add 6 new chain benches 216-221 (NEAR, Flow, Hedera, CKB, MultiversX, NEO). // v55: add ws-head-latency-robinhood (244) + keyed-rpc-robinhood (243). Bench SET grew. - ["bench-unfiltered-v55", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v56: drop 6 keyed-rpc benches (arbitrum/base/bnb/eth/polygon/solana), US-only robinhood. + ["bench-unfiltered-v56", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); @@ -635,7 +636,8 @@ const loadBenchmarkFiltered = unstable_cache( // v18: bumped with bench-unfiltered-v27 (dense series with nulls). // v19: bumped with bench-unfiltered-v28 (bench vague 2, 081-085). // v21: bumped with bench-unfiltered-v46 (network-coverage split). - ["bench-filters-v22", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v23: lockstep with bench-unfiltered-v56 (keyed-rpc cleanup). + ["bench-filters-v23", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] } ); From e4b89bb4f535c9c33898ea0ff32da7b06383e14c Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 18:03:05 +0200 Subject: [PATCH 10/11] drop rpc-keyed-latency bench --- benchmarks/rpc-keyed-latency.yml | 245 ------------------------------- 1 file changed, 245 deletions(-) delete mode 100644 benchmarks/rpc-keyed-latency.yml diff --git a/benchmarks/rpc-keyed-latency.yml b/benchmarks/rpc-keyed-latency.yml deleted file mode 100644 index 93cadb0a..00000000 --- a/benchmarks/rpc-keyed-latency.yml +++ /dev/null @@ -1,245 +0,0 @@ -# OpenChainBench. Bench № 069 - -slug: rpc-keyed-latency -number: "069" -title: Fastest RPC API with a free key. Alchemy, Infura, QuickNode, Ankr, Chainstack, Helius -seo_title: "Fastest RPC API with a free key 2026: Alchemy, Infura, QuickNode compared" -seo_description: "Fastest RPC API with a free key: the keyed developer tiers of Alchemy, Infura, QuickNode, Ankr, Chainstack and Helius measured live every 60s from 3 regions." -subtitle: HTTP round-trip latency for eth_getBlockByNumber against keyed developer API tiers (Alchemy, Infura, QuickNode, Ankr, Chainstack, Helius), the signup-gated free plans, probed every 60 seconds from 3 regions. -category: RPCs -status: live -metric: RPC latency -unit: ms -higher_is_better: false - -seo_intro: | - This bench ranks the keyed developer API tiers: the RPC you get - with a free API key after signup, as opposed to the no-key public - endpoints ranked on the companion - [rpc-capabilities](/benchmarks/rpc-capabilities) bench. Every dapp - that outgrows the public RPCs asks the same question next. which - free key do I sign up for. Alchemy, Infura, QuickNode, Ankr, - Chainstack and Helius all hand out a free API key with a - monthly quota; none of them publish comparable latency numbers. - This benchmark probes each provider's free-tier endpoint with the - same anti-cache call used on our no-key bench - (`eth_getBlockByNumber("latest")` with a rotating request id; - `getSlot` on Solana), every 60 seconds, from us-east, eu-west and - Singapore, staying far inside every provider's free quota. Chains - covered. Ethereum (5 providers), Base + Arbitrum + BNB + Polygon - (Alchemy, Infura, Ankr, Chainstack), Optimism (Alchemy, Infura, - Chainstack, QuickNode), Robinhood Chain (Chainstack, Alchemy; Arbitrum - Orbit L2, chain 4663), Solana (Alchemy, Helius, - Chainstack). Current leaders per the live data on this page. - The companion question, which RPC works with no signup at all, is - answered by the [rpc-capabilities](/benchmarks/rpc-capabilities) - bench with the identical methodology, so the keyed premium (or its - absence) is directly readable by comparing the two pages. - -abstract: | - We measure the round-trip latency of a single, identical RPC call - against the signup-gated free tier of every major keyed RPC - provider. The probe is the same anti-cache call as the no-key - bench, so the two tiers are directly comparable: full latest-header - fetch with a rotating JSON-RPC id on EVM chains, `getSlot` at - processed commitment on Solana. Responses are classified ok / - http_err / jsonrpc_err / stale / timeout against a cross-provider - tip, and a per-provider quota guard pauses probing at 90% of each - region's monthly budget so a free key can never be exhausted by the - bench itself. Free tier means the entry plan without a credit - card: what a developer gets in the first five minutes after signup, - not the provider's paid infrastructure. - -methodology: - - "Cadence: every 60 seconds per (provider, chain) pair (Infura: every 180 seconds; its free tier's real daily credit budget sits below the documented 3M and returned daily 402 brownouts at 60s, so the cadence is reduced and disclosed, sample sizes stay published), from each of 3 probe regions (us-east, eu-west, sgp), 4× slower than the no-key bench because keyed free tiers meter monthly quotas. Headline p50/p90/p99 aggregate across regions via Prometheus `avg(quantile_over_time(...))`." - - "Payload: identical to the no-key bench. EVM: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Solana: `getSlot` at processed commitment. Non-cacheable by design: the rotating id defeats body-keyed edge caches." - - "Authentication: each provider's standard free-tier key, obtained via normal signup, no credit card, no sales contact. Keys live in env vars on the probe services and never in the repo. Endpoint shapes: key-in-path (Alchemy `/v2/`, Infura `/v3/`, Chainstack, Ankr) or query param (Helius `?api-key=`)." - - "Quota guard: each region gets 1/3 of a provider's audited monthly free quota; probing pauses at 90% of that budget until calendar-month rollover (`rpc_keyed_quota_used_ratio`, `rpc_call_total{result=\"quota_paused\"}`). Budgets target ≤2/3 of the real quota, so the bench can never exhaust a key." - - "Call-result classification: `ok` (HTTP 200 + usable result), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks / 300 slots behind the cross-provider tip), `timeout`. Latency is recorded only for `ok` responses." - - "Cohort: Alchemy (7 EVM + Solana), Infura / MetaMask Developer (6 EVM), Ankr (5 EVM; Optimism pending chain enablement on the key), Chainstack (7 EVM + Solana via Global Nodes, see plan disclosure below), Helius (Solana only), QuickNode (BNB + Optimism, see plan disclosure below). Free-tier scope differences are disclosed, not hidden: a provider missing from a chain tab means its free tier does not cover that chain (or caps the node count), which is itself a finding." - - "Excluded by design: Tenderly (Node RPC excluded from the free plan), GetBlock (50k CU/day cannot sustain even one chain at probe cadence), Moralis (free plan capped at 2 node endpoints), Blast API (shut down Oct 2025). Each exclusion is quota math or plan scope, never editorial." - - "Plan disclosure: Alchemy, QuickNode and Chainstack are measured through standard shared endpoints of paid accounts. Alchemy and QuickNode route free and paid keys to the same shared fleets; Chainstack Global Nodes are the identical anycast product the free plan provides. The paid difference is quota and node count (free Chainstack caps at one node), not the serving infrastructure, so the latency read is representative of both plans." - - "Fair-play note: free tiers do not necessarily run on the provider's paid-tier infrastructure (e.g. dRPC routes free traffic to a separate provider pool; several providers serve free keys from shared clusters). This page measures exactly what a free signup gets, read it as the free-tier experience, not the provider's ceiling." - -findings: - - "Ethereum is the only chain where all five EVM-capable providers meet: {{best_name:chain:ethereum}} currently leads at {{best_p50:chain:ethereum}} (p50, 24h)." - - "{{name:alchemy}} aggregates {{p50:alchemy}} across its 7 covered chains, the widest free-tier footprint in the cohort (6 EVM + Solana on one key)." - - "{{name:infura}} sits at {{p50:infura}} on the cross-chain aggregate. Its 2026 free tier meters 3M credits per day (80 credits per call), the tightest effective budget of the EVM cohort." - - "{{name:chainstack}} aggregates {{p50:chainstack}} across 7 chains via Global Nodes, the same anycast product its free plan ships (capped at one node there), measured from a paid org and disclosed as such." - - "On Robinhood Chain (Arbitrum Orbit L2, chain ID 4663), {{best_name:chain:robinhood}} leads at {{best_p50:chain:robinhood}} (p50, 24h). Chainstack and Alchemy are the only keyed providers with support; official public RPC clocked ~170ms in internal tests." - - "On Solana, {{best_name:chain:solana}} leads at {{best_p50:chain:solana}} (p50, 24h) between Helius (Solana-native) and Alchemy." - -faq: - - q: "Which free RPC API tier is fastest in 2026?" - a: "Per chain, per the live leaderboard above: on Ethereum {{best_name:chain:ethereum}} at {{best_p50:chain:ethereum}} (p50 over 24h, averaged across us-east, eu-west and Singapore probes). The ranking re-sorts continuously against fresh Prometheus samples. Switch the chain tab for the network your product runs on, free-tier chain coverage differs per provider and that difference is part of the answer." - - q: "How is this different from the no-key public RPC benchmark?" - a: "Same probe, same classification, same regions, different tier. The [rpc-capabilities](/benchmarks/rpc-capabilities) bench measures endpoints that work with zero signup; this page measures what a free API key gets you after a five-minute signup (Alchemy, Infura, Chainstack, Ankr, Helius). Comparing the two pages answers whether the signup buys you anything on latency, and on some chains the no-key tier is genuinely competitive." - - q: "Do the probes stay inside each provider's free quota?" - a: "Yes, by design. One probe per 60 seconds per chain per region ≈ 131k requests/month/chain, against audited free budgets of 1M to 3M requests/month. A quota guard additionally pauses probing at 90% of each region's monthly budget, so the bench can never exhaust a key. Sample sizes per cell are published (`sample_size`), so the statistical cost of the slower cadence is visible." - - q: "Why are Tenderly, Moralis and GetBlock missing?" - a: "Quota math or plan scope, never editorial. Tenderly excludes Node RPC from its free plan. GetBlock's 50k CU/day cannot sustain one chain at probe cadence. Moralis caps the free plan at 2 node endpoints. Blast API shut down in October 2025. QuickNode is in the cohort on BNB and Optimism via shared endpoints with the plan disclosed in the methodology, because its free plan issues a single endpoint on one chain. Providers can enter the cohort the day their free plan clears the bar, and the bar is published in the methodology." - - q: "Is the free tier representative of a provider's paid performance?" - a: "No, and this page does not claim it is. Several providers route free-tier traffic to shared or separate infrastructure pools. What this bench measures is the free-tier experience: the latency and reliability a developer actually gets from the key handed out at signup. Paid-tier SLAs, dedicated clusters and websocket performance are out of scope." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-keyed-latency - -prometheus: - window: 24h - freshness_metric: rpc_latency_milliseconds - -rank_matrix_query: avg by (provider, chain, region) (ocb:rpc_latency_milliseconds:p50_24h) - -dimensions: - chain: - - { value: all, label: All chains } - - { value: ethereum, label: Ethereum } - - { value: base, label: Base } - - { value: arbitrum, label: Arbitrum } - - { value: bnb, label: BNB Chain } - - { value: polygon, label: Polygon } - - { value: robinhood, label: Robinhood } - - { value: solana, label: Solana } - region: - - { value: all, label: All regions } - - { value: us-east, label: US-East } - - { value: eu-west, label: EU-West } - - { value: sgp, label: Singapore } - -providers: - - slug: alchemy - name: Alchemy - tag: 30M CU/mo free, 6 EVM + Solana on one key - formula: "50th percentile over 24h of client-side round-trip latency (ms) for the anti-cache probe sent every 60s from 3 regions to Alchemy's free-tier keyed endpoints." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="alchemy"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="alchemy"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="alchemy"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="alchemy"}) / sum(ocb:rpc_call:rate_24h{provider="alchemy"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="alchemy"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="alchemy", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="alchemy", tier="keyed", region="sgp"}[1h])) - - - slug: infura - name: Infura - tag: MetaMask Developer, 3M credits/day, 6 EVM chains - formula: "50th percentile over 24h of client-side round-trip latency (ms) for the anti-cache probe sent every 60s from 3 regions to Infura's free-tier keyed endpoints." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="infura"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="infura"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="infura"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="infura"}) / sum(ocb:rpc_call:rate_24h{provider="infura"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="infura"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="infura", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="infura", tier="keyed", region="sgp"}[1h])) - - - slug: ankr - name: Ankr - tag: 200M credits/mo free, 5 EVM chains measured - formula: "50th percentile over 24h of client-side round-trip latency (ms) for the anti-cache probe sent every 60s from 3 regions to Ankr's free-tier keyed endpoints." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr"}) / sum(ocb:rpc_call:rate_24h{provider="ankr"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", tier="keyed", region="sgp"}[1h])) - - - slug: chainstack - name: Chainstack - tag: Global Nodes on 7 EVM incl. Robinhood + Solana, plan disclosed - formula: "50th percentile over 24h of client-side round-trip latency (ms) for the anti-cache probe sent every 60s from 3 regions to Chainstack's free-tier Ethereum Global Node." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chainstack"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chainstack"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chainstack"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="chainstack"}) / sum(ocb:rpc_call:rate_24h{provider="chainstack"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="chainstack"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chainstack", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="chainstack", tier="keyed", region="sgp"}[1h])) - - - slug: helius - name: Helius - tag: Solana-native, 1M credits/mo free - formula: "50th percentile over 24h of client-side round-trip latency (ms) for a `getSlot` probe sent every 60s from 3 regions to Helius's free-tier Solana endpoint." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="helius"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="helius"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="helius"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="helius"}) / sum(ocb:rpc_call:rate_24h{provider="helius"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="helius"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helius", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="helius", tier="keyed", region="sgp"}[1h])) - - - slug: quicknode - name: QuickNode - tag: Shared fleet, measured on BNB + Optimism, plan disclosed - formula: "50th percentile over 24h of client-side round-trip latency (ms) for the anti-cache probe sent every 60s from 3 regions to QuickNode shared endpoints." - queries: - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode"}) - p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="quicknode"}) - p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="quicknode"}) - mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="quicknode"}) - success: sum(ocb:rpc_call:ok_rate_24h{provider="quicknode"}) / sum(ocb:rpc_call:rate_24h{provider="quicknode"}) - sample_size: sum(ocb:rpc_call:increase_24h{provider="quicknode"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode", tier="keyed"}[1h])) - regions: - - region: us-east - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode", region="us-east"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode", tier="keyed", region="us-east"}[1h])) - - region: eu-west - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode", region="eu-west"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode", tier="keyed", region="eu-west"}[1h])) - - region: ap-southeast - p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="quicknode", region="sgp"}) - series: avg(avg_over_time(rpc_latency_milliseconds{provider="quicknode", tier="keyed", region="sgp"}[1h])) From 95c04f4eb9743ffc77a0d9aaba53406bebdb069e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 27 Aug 2026 18:03:53 +0200 Subject: [PATCH 11/11] bump cache v57/v24 to flush rpc-keyed-latency drop --- src/lib/spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 702b242c..c69967d0 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -327,7 +327,8 @@ const loadBenchmarkUnfilteredCached = unstable_cache( // v54: add 6 new chain benches 216-221 (NEAR, Flow, Hedera, CKB, MultiversX, NEO). // v55: add ws-head-latency-robinhood (244) + keyed-rpc-robinhood (243). Bench SET grew. // v56: drop 6 keyed-rpc benches (arbitrum/base/bnb/eth/polygon/solana), US-only robinhood. - ["bench-unfiltered-v56", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v57: drop rpc-keyed-latency bench. + ["bench-unfiltered-v57", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); @@ -637,7 +638,8 @@ const loadBenchmarkFiltered = unstable_cache( // v19: bumped with bench-unfiltered-v28 (bench vague 2, 081-085). // v21: bumped with bench-unfiltered-v46 (network-coverage split). // v23: lockstep with bench-unfiltered-v56 (keyed-rpc cleanup). - ["bench-filters-v23", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v24: lockstep with bench-unfiltered-v57 (drop rpc-keyed-latency). + ["bench-filters-v24", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] } );