Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions benchmarks/keyed-rpc-arbitrum.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# 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/<key>, Chainstack, Infura /v3/<key>)."
- "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]))
Loading
Loading