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-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])) 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])) 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])))