diff --git a/benchmarks/bob-rpc.yml b/benchmarks/bob-rpc.yml new file mode 100644 index 00000000..93ad4de2 --- /dev/null +++ b/benchmarks/bob-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 137 + +slug: bob-rpc +number: "137" +title: Fastest free BOB RPC, live no-key EVM endpoint latency +seo_title: "Fastest free BOB RPC 2026" +seo_description: "{{best_name}} leads free BOB RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber(\"latest\", false)` method against every free, no-key public BOB EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + BOB (Build on Bitcoin) is an OP Stack hybrid L2 (chain 60808) that bridges Bitcoin and Ethereum, enabling Bitcoin DeFi with EVM smart contracts and native BTC collateral, ETH gas token, ~2 s block cadence, settlement on Ethereum. Integrated with Babylon BTC staking and leading Bitcoin LSTs. The 2026-08-03 audit confirms 4 clean keyless providers: the BOB official endpoint (rpc.gobob.xyz), Tenderly Gateway (bob.gateway.tenderly.co), dRPC (bob.drpc.org), and Thirdweb (60808.rpc.thirdweb.com). Excluded: Ankr (no bob route), Alchemy (key required), QuickNode (key required). + +abstract: | + Per-chain member of the RPC latency cluster, extended to BOB. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public + BOB endpoint that sustains continuous probing, 4 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a BOB-scaled staleness gap (20 blocks + at BOB's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + BOB-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"bob\"`. Provider coverage: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free BOB RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free BOB RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which BOB RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: the BOB official endpoint (rpc.gobob.xyz), Tenderly Gateway (bob.gateway.tenderly.co), dRPC (bob.drpc.org), and Thirdweb (60808.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest BOB RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is BOB RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="bob"}) + +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: bob-official + name: BOB + tag: BOB official public RPC endpoint operated by Conduit + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to BOB's no-key bob RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="bob-official", chain="bob"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="bob-official", chain="bob"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="bob-official", chain="bob"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="bob-official", chain="bob"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="bob-official", chain="bob"}) / sum(ocb:rpc_call:rate_24h{provider="bob-official", chain="bob"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="bob-official", chain="bob"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="bob-official", chain="bob"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="bob-official", chain="bob", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="bob-official", chain="bob", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="bob-official", chain="bob", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="bob-official", chain="bob", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="bob-official", chain="bob", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="bob-official", chain="bob", region="sgp"}[1h]) + + - slug: tenderly + name: Tenderly + tag: Tenderly public gateway for BOB + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Tenderly's no-key bob RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="bob"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="tenderly", chain="bob"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="tenderly", chain="bob"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="tenderly", chain="bob"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="tenderly", chain="bob"}) / sum(ocb:rpc_call:rate_24h{provider="tenderly", chain="bob"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="tenderly", chain="bob"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="bob"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="bob", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="bob", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="bob", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="bob", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="bob", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="bob", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to BOB node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key bob RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bob"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="bob"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="bob"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="bob"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="bob"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="bob"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="bob"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bob"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bob", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bob", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bob", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bob", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bob", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bob", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for BOB + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key bob RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="bob"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="bob"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="bob"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="bob"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="bob"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="bob"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="bob"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="bob"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="bob", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="bob", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="bob", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="bob", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="bob", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="bob", region="sgp"}[1h]) diff --git a/benchmarks/hemi-rpc.yml b/benchmarks/hemi-rpc.yml new file mode 100644 index 00000000..8190fd8b --- /dev/null +++ b/benchmarks/hemi-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 136 + +slug: hemi-rpc +number: "136" +title: Fastest free Hemi RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Hemi RPC 2026" +seo_description: "{{best_name}} leads free Hemi RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber(\"latest\", false)` method against every free, no-key public Hemi EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Hemi is a Bitcoin+Ethereum hybrid L2 (chain 43111) built on OP Stack with a dual-VM architecture running both EVM and Bitcoin script, ETH gas token, ~2 s block cadence, designed to unify BTC and ETH liquidity. Backed by YZi Labs (ex-Binance Labs) with $15M seed, mainnet launched March 2025 with over $440M TVL at launch. The 2026-08-03 audit confirms 3 clean keyless providers: the Hemi Labs official endpoint (rpc.hemi.network/rpc), dRPC (hemi.drpc.org), and Thirdweb (43111.rpc.thirdweb.com). Excluded: Ankr (no hemi route), Alchemy (key required), QuickNode (key required). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Hemi. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public + Hemi endpoint that sustains continuous probing, 3 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Hemi-scaled staleness gap (20 blocks + at Hemi's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Hemi-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"hemi\"`. Provider coverage: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Hemi RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Hemi RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Hemi RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: the Hemi Labs official endpoint (rpc.hemi.network/rpc), dRPC (hemi.drpc.org), and Thirdweb (43111.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Hemi RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Hemi RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="hemi"}) + +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: hemi-official + name: Hemi Labs + tag: Hemi Labs official public RPC endpoint for Hemi mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Hemi Labs's no-key hemi RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hemi-official", chain="hemi"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="hemi-official", chain="hemi"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="hemi-official", chain="hemi"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="hemi-official", chain="hemi"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="hemi-official", chain="hemi"}) / sum(ocb:rpc_call:rate_24h{provider="hemi-official", chain="hemi"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="hemi-official", chain="hemi"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="hemi-official", chain="hemi"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hemi-official", chain="hemi", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hemi-official", chain="hemi", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hemi-official", chain="hemi", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hemi-official", chain="hemi", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hemi-official", chain="hemi", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hemi-official", chain="hemi", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to Hemi node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key hemi RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="hemi"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="hemi"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="hemi"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="hemi"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="hemi"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="hemi"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="hemi"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="hemi"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="hemi", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="hemi", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="hemi", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="hemi", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="hemi", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="hemi", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for Hemi + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key hemi RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="hemi"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="hemi"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="hemi"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="hemi"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="hemi"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="hemi"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="hemi"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="hemi"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="hemi", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="hemi", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="hemi", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="hemi", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="hemi", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="hemi", region="sgp"}[1h]) diff --git a/benchmarks/manta-rpc.yml b/benchmarks/manta-rpc.yml new file mode 100644 index 00000000..a2c10894 --- /dev/null +++ b/benchmarks/manta-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 132 + +slug: manta-rpc +number: "132" +title: Fastest free Manta Pacific RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Manta Pacific RPC 2026" +seo_description: "{{best_name}} leads free Manta Pacific RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber("latest", false)` method against every free, no-key public Manta Pacific EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Manta Pacific is an OP Stack EVM L2 (chain 169) built on Celestia for data availability, optimised for zero-knowledge applications and DeFi, ETH gas token, ~2 s block cadence, settlement on Ethereum. The 2026-08-03 audit confirms 3 clean keyless providers: the Manta Pacific official endpoint (pacific-rpc.manta.network/http), dRPC (manta-pacific.drpc.org), and Thirdweb (169.rpc.thirdweb.com). Excluded: Ankr (no manta pacific route), Alchemy (key required), QuickNode (key required). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Manta Pacific. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber("latest", false)`) against every no-key public + Manta Pacific endpoint that sustains continuous probing, 3 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Manta Pacific-scaled staleness gap (20 blocks + at Manta Pacific's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Manta Pacific-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"manta\"`. Provider coverage: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Manta Pacific RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Manta Pacific RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Manta Pacific RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Manta Network (https://pacific-rpc.manta.network/http), dRPC (https://manta-pacific.drpc.org), and Thirdweb (https://169.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Manta Pacific RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Manta Pacific RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="manta"}) + +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: manta-official + name: Manta Network + tag: Manta Network official public RPC for Manta Pacific + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Manta Network's no-key Manta Pacific RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="manta-official", chain="manta"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="manta-official", chain="manta"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="manta-official", chain="manta"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="manta-official", chain="manta"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="manta-official", chain="manta"}) / sum(ocb:rpc_call:rate_24h{provider="manta-official", chain="manta"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="manta-official", chain="manta"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="manta-official", chain="manta"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="manta-official", chain="manta", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="manta-official", chain="manta", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="manta-official", chain="manta", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="manta-official", chain="manta", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="manta-official", chain="manta", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="manta-official", chain="manta", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to Manta Pacific node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key Manta Pacific RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="manta"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="manta"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="manta"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="manta"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="manta"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="manta"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="manta"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="manta"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="manta", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="manta", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="manta", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="manta", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="manta", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="manta", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for Manta Pacific + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key Manta Pacific RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="manta"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="manta"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="manta"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="manta"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="manta"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="manta"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="manta"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="manta"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="manta", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="manta", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="manta", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="manta", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="manta", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="manta", region="sgp"}[1h]) diff --git a/benchmarks/metis-rpc.yml b/benchmarks/metis-rpc.yml new file mode 100644 index 00000000..bc54d246 --- /dev/null +++ b/benchmarks/metis-rpc.yml @@ -0,0 +1,166 @@ +# OpenChainBench. Bench № 131 + +slug: metis-rpc +number: "131" +title: Fastest free Metis RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Metis RPC 2026" +seo_description: "{{best_name}} leads free Metis RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber("latest", false)` method against every free, no-key public Metis EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Metis (chain 1088) is an Optimistic Rollup L2 distinguished by its decentralized sequencer + pool, where sequencers are selected via Proof of Stake using the METIS token, rather than a + single centralized sequencer as in most rollups. The chain targets ~2 s block cadence, uses + ETH as its gas token, and settles to Ethereum mainnet. A 2026-08-03 audit confirms 4 clean + keyless providers: the Metis Andromeda official endpoint (andromeda.metis.io), dRPC + (metis.drpc.org), PublicNode (metis-rpc.publicnode.com), and Thirdweb + (1088.rpc.thirdweb.com). Excluded providers: Ankr (requires key for Metis), Alchemy (key + required). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Metis. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber("latest", false)`) against every no-key public + Metis endpoint that sustains continuous probing, 4 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Metis-scaled staleness gap (20 blocks + at Metis's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Metis-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"metis\"`. Provider coverage: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Metis RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Metis RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Metis RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Metis (https://andromeda.metis.io/?owner=1088), dRPC (https://metis.drpc.org), PublicNode (https://metis-rpc.publicnode.com), and Thirdweb (https://1088.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Metis RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Metis RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="metis"}) + +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: metis-official + name: Metis + tag: Metis Foundation Andromeda mainnet public endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Metis's no-key Metis RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="metis-official", chain="metis"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="metis-official", chain="metis"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="metis-official", chain="metis"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="metis-official", chain="metis"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="metis-official", chain="metis"}) / sum(ocb:rpc_call:rate_24h{provider="metis-official", chain="metis"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="metis-official", chain="metis"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="metis-official", chain="metis"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="metis-official", chain="metis", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="metis-official", chain="metis", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="metis-official", chain="metis", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="metis-official", chain="metis", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="metis-official", chain="metis", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="metis-official", chain="metis", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to Metis node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key Metis RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="metis"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="metis"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="metis"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="metis"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="metis"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="metis"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="metis"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="metis"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="metis", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="metis", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="metis", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="metis", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="metis", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="metis", region="sgp"}[1h]) + + - slug: publicnode + name: PublicNode + tag: PublicNode community-funded public Metis RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key Metis RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="metis"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="metis"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="metis"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="metis"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="metis"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="metis"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="metis"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="metis"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="metis", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="metis", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="metis", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="metis", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="metis", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="metis", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for Metis + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key Metis RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="metis"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="metis"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="metis"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="metis"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="metis"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="metis"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="metis"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="metis"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="metis", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="metis", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="metis", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="metis", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="metis", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="metis", region="sgp"}[1h]) diff --git a/benchmarks/moonriver-rpc.yml b/benchmarks/moonriver-rpc.yml new file mode 100644 index 00000000..a8f62b3e --- /dev/null +++ b/benchmarks/moonriver-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 135 + +slug: moonriver-rpc +number: "135" +title: Fastest free Moonriver RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Moonriver RPC 2026" +seo_description: "{{best_name}} leads free Moonriver RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber(\"latest\", false)` method against every free, no-key public Moonriver EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Moonriver is the Kusama canary network for Moonbeam (chain 1285), a full EVM parachain with Ethereum-compatible tooling, MOVR gas token, ~12 s block time under Nominated Proof of Stake, serving as the staging ground for Moonbeam features before they reach Polkadot. The 2026-08-03 audit confirms 4 clean keyless providers: the Moonbeam Foundation official endpoint (rpc.api.moonriver.moonbeam.network), PublicNode (moonriver-rpc.publicnode.com), OnFinality (moonriver.api.onfinality.io/public), and UnitedBloc (moonriver.unitedbloc.com). Excluded: Ankr (requires key for Moonriver), dRPC (no moonriver route). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Moonriver. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public + Moonriver endpoint that sustains continuous probing, 4 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Moonriver-scaled staleness gap (20 blocks + at Moonriver's ~12 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Moonriver-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"moonriver\"`. Provider coverage: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Moonriver RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Moonriver RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Moonriver RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Moonbeam Foundation official (rpc.api.moonriver.moonbeam.network), PublicNode (moonriver-rpc.publicnode.com), OnFinality (moonriver.api.onfinality.io/public), and UnitedBloc (moonriver.unitedbloc.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Moonriver RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Moonriver RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="moonriver"}) + +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: moonriver-official + name: Moonbeam Foundation + tag: Moonbeam Foundation official public RPC for Moonriver + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Moonbeam Foundation's no-key moonriver RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="moonriver-official", chain="moonriver"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="moonriver-official", chain="moonriver"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="moonriver-official", chain="moonriver"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="moonriver-official", chain="moonriver"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="moonriver-official", chain="moonriver"}) / sum(ocb:rpc_call:rate_24h{provider="moonriver-official", chain="moonriver"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="moonriver-official", chain="moonriver"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="moonriver-official", chain="moonriver"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="moonriver-official", chain="moonriver", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="moonriver-official", chain="moonriver", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="moonriver-official", chain="moonriver", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="moonriver-official", chain="moonriver", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="moonriver-official", chain="moonriver", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="moonriver-official", chain="moonriver", region="sgp"}[1h]) + + - slug: publicnode + name: PublicNode + tag: PublicNode community-funded public Moonriver RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key moonriver RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="moonriver"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="moonriver"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="moonriver"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="moonriver"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="moonriver"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="moonriver"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="moonriver"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="moonriver"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="moonriver", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="moonriver", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="moonriver", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="moonriver", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="moonriver", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="moonriver", region="sgp"}[1h]) + + - slug: onfinality + name: OnFinality + tag: OnFinality shared node service public endpoint for Moonriver + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to OnFinality's no-key moonriver RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="moonriver"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="moonriver"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="moonriver"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="moonriver"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="moonriver"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="moonriver"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="moonriver"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="moonriver"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="moonriver", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="moonriver", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="moonriver", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="moonriver", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="moonriver", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="moonriver", region="sgp"}[1h]) + + - slug: unitedbloc + name: UnitedBloc + tag: UnitedBloc community node operator public RPC for Moonriver + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to UnitedBloc's no-key moonriver RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="unitedbloc", chain="moonriver"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="unitedbloc", chain="moonriver"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="unitedbloc", chain="moonriver"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="unitedbloc", chain="moonriver"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="unitedbloc", chain="moonriver"}) / sum(ocb:rpc_call:rate_24h{provider="unitedbloc", chain="moonriver"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="unitedbloc", chain="moonriver"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="unitedbloc", chain="moonriver"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="unitedbloc", chain="moonriver", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="unitedbloc", chain="moonriver", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="unitedbloc", chain="moonriver", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="unitedbloc", chain="moonriver", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="unitedbloc", chain="moonriver", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="unitedbloc", chain="moonriver", region="sgp"}[1h]) diff --git a/benchmarks/morph-rpc.yml b/benchmarks/morph-rpc.yml new file mode 100644 index 00000000..92b4b41b --- /dev/null +++ b/benchmarks/morph-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 134 + +slug: morph-rpc +number: "134" +title: Fastest free Morph RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Morph RPC 2026" +seo_description: "{{best_name}} leads free Morph RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber(\"latest\", false)` method against every free, no-key public Morph EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Morph is a ZK Rollup L2 (chain 2818) combining optimistic execution with ZK proof settlement on Ethereum, ETH gas token, ~2 s block cadence, Decentralized Sequencer Network for censorship resistance. Mainnet launched late 2024. The 2026-08-03 audit confirms 3 clean keyless providers: the Morph official endpoint (rpc.morphl2.io), dRPC (morph.drpc.org), and Thirdweb (2818.rpc.thirdweb.com). Excluded: Ankr (no morph route), Alchemy (key required), QuickNode (key required for public access). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Morph. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public + Morph endpoint that sustains continuous probing, 3 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Morph-scaled staleness gap (20 blocks + at Morph's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Morph-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"morph\"`. Provider coverage: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Morph RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Morph RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Morph RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Morph official (rpc.morphl2.io), dRPC (morph.drpc.org), and Thirdweb (2818.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Morph RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Morph RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="morph"}) + +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: morph-official + name: Morph + tag: Morph foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Morph's no-key morph RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="morph-official", chain="morph"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="morph-official", chain="morph"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="morph-official", chain="morph"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="morph-official", chain="morph"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="morph-official", chain="morph"}) / sum(ocb:rpc_call:rate_24h{provider="morph-official", chain="morph"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="morph-official", chain="morph"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="morph-official", chain="morph"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="morph-official", chain="morph", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="morph-official", chain="morph", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="morph-official", chain="morph", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="morph-official", chain="morph", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="morph-official", chain="morph", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="morph-official", chain="morph", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to Morph node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key morph RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="morph"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="morph"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="morph"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="morph"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="morph"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="morph"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="morph"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="morph"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="morph", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="morph", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="morph", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="morph", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="morph", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="morph", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for Morph + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key morph RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="morph"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="morph"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="morph"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="morph"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="morph"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="morph"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="morph"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="morph"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="morph", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="morph", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="morph", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="morph", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="morph", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="morph", region="sgp"}[1h]) diff --git a/benchmarks/rootstock-rpc.yml b/benchmarks/rootstock-rpc.yml new file mode 100644 index 00000000..adca4649 --- /dev/null +++ b/benchmarks/rootstock-rpc.yml @@ -0,0 +1,142 @@ +# OpenChainBench. Bench № 130 + +slug: rootstock-rpc +number: "130" +title: Fastest free Rootstock RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Rootstock RPC 2026" +seo_description: "{{best_name}} leads free Rootstock RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber("latest", false)` method against every free, no-key public Rootstock EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Rootstock (chain 30) is the longest-running Bitcoin EVM, a merge-mined sidechain secured by + 54%+ of Bitcoin hashrate under REMASC consensus, with a 30-second block cadence and RBTC as + its native gas token — a 1:1 BTC peg bridged through the Powpeg. The chain has been live + since 2018, predating most EVM L2s. A 2026-08-03 audit confirms 3 clean keyless providers: + the Rootstock official endpoint (public-node.rsk.co), dRPC (rootstock.drpc.org), and + Thirdweb (30.rpc.thirdweb.com). Excluded providers: Blast API (shut down, redirects to + Alchemy), Ankr (no Rootstock route), MyEtherWallet node (rate-limited without key). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Rootstock. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber("latest", false)`) against every no-key public + Rootstock endpoint that sustains continuous probing, 3 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Rootstock-scaled staleness gap (20 blocks + at Rootstock's ~30 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Rootstock-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"rootstock\"`. Provider coverage: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Rootstock RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Rootstock RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Rootstock RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Rootstock Foundation (https://public-node.rsk.co), dRPC (https://rootstock.drpc.org), and Thirdweb (https://30.rpc.thirdweb.com). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Rootstock RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Rootstock RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="rootstock"}) + +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: rootstock-official + name: Rootstock Foundation + tag: RSKSwap public node operated by the Rootstock Foundation + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Rootstock Foundation's no-key Rootstock RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="rootstock-official", chain="rootstock"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="rootstock-official", chain="rootstock"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="rootstock-official", chain="rootstock"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="rootstock-official", chain="rootstock"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="rootstock-official", chain="rootstock"}) / sum(ocb:rpc_call:rate_24h{provider="rootstock-official", chain="rootstock"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="rootstock-official", chain="rootstock"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="rootstock-official", chain="rootstock"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="rootstock-official", chain="rootstock", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="rootstock-official", chain="rootstock", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="rootstock-official", chain="rootstock", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="rootstock-official", chain="rootstock", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="rootstock-official", chain="rootstock", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="rootstock-official", chain="rootstock", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway routing to Rootstock node pool + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key Rootstock RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="rootstock"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="rootstock"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="rootstock"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="rootstock"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="rootstock"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="rootstock"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="rootstock"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="rootstock"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="rootstock", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="rootstock", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="rootstock", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="rootstock", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="rootstock", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="rootstock", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb public RPC gateway for Rootstock + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Thirdweb's no-key Rootstock RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="rootstock"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="rootstock"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="rootstock"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="rootstock"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="rootstock"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="rootstock"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="rootstock"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="rootstock"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="rootstock", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="rootstock", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="rootstock", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="rootstock", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="rootstock", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="rootstock", region="sgp"}[1h]) diff --git a/benchmarks/story-rpc.yml b/benchmarks/story-rpc.yml new file mode 100644 index 00000000..03b4af60 --- /dev/null +++ b/benchmarks/story-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 133 + +slug: story-rpc +number: "133" +title: Fastest free Story RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Story RPC 2026" +seo_description: "{{best_name}} leads free Story RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the `eth_getBlockByNumber("latest", false)` method against every free, no-key public Story EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Story is a purpose-built L1 blockchain (chain 1514) for on-chain intellectual property, combining an EVM execution layer with CometBFT consensus, IP asset primitives (PIL licensing, royalty modules), and native IP NFT support. Backed by a16z, Polychain Capital, and Samsung NEXT, Story mainnet launched February 2025. The 2026-08-03 audit confirms 3 clean keyless providers: the Story Foundation official endpoint (mainnet.storyrpc.io), Ankr (rpc.ankr.com/story_mainnet), and Stakely (story-json-rpc.stakely.io). Excluded: Alchemy (key required), Infura (no story route), QuickNode (key required). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Story. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber("latest", false)`) against every no-key public + Story endpoint that sustains continuous probing, 3 providers + measured, every 60 seconds, from us-east, eu-west and Singapore. The + harness classifies every response (ok / http_err / jsonrpc_err / stale + / timeout) with a Story-scaled staleness gap (20 blocks + at Story's ~2 s block time). The cross-chain view + lives on the parent `rpc-capabilities` benchmark; this page is the + Story-scoped answer with per-region breakdowns as a first-class + dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\", false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request. Non-cacheable by design: the rotating id defeats edge caches that would answer a bare head query without touching a node." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms → 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result with a parsable hex block number), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"story\"`. Provider coverage: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Story RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Story RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Story RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Story Foundation (https://mainnet.storyrpc.io), Ankr (https://rpc.ankr.com/story_mainnet), and Stakely (https://story-json-rpc.stakely.io). Every listed endpoint was live-verified with a `eth_getBlockByNumber` POST returning a parsable response before inclusion." + - q: "Does the fastest Story RPC change by region?" + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Story RPC latency measured here, technically?" + a: "One identical `eth_getBlockByNumber(\"latest\", false)` POST every 60 seconds against each provider from each of 3 regions, using the same plain HTTP client the rest of the RPC cluster uses. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus `quantile_over_time` over 24 hours. Responses are classified (`ok` / `http_err` / `jsonrpc_err` / `stale` / `timeout`) so an endpoint stuck on an old head or returning errors behind HTTP 200 is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="story"}) + +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: story-official + name: Story Foundation + tag: Story Protocol Foundation official mainnet RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Story Foundation's no-key Story RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="story-official", chain="story"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="story-official", chain="story"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="story-official", chain="story"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="story-official", chain="story"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="story-official", chain="story"}) / sum(ocb:rpc_call:rate_24h{provider="story-official", chain="story"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="story-official", chain="story"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="story-official", chain="story"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="story-official", chain="story", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="story-official", chain="story", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="story-official", chain="story", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="story-official", chain="story", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="story-official", chain="story", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="story-official", chain="story", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Story mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Ankr's no-key Story RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="story"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="story"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="story"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="story"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="story"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="story"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="story"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="story"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="story", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="story", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="story", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="story", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="story", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="story", region="sgp"}[1h]) + + - slug: stakely + name: Stakely + tag: Stakely validator-operated public RPC for Story + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber(\"latest\", false)` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Stakely's no-key Story RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="stakely", chain="story"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="stakely", chain="story"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="stakely", chain="story"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="stakely", chain="story"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="stakely", chain="story"}) / sum(ocb:rpc_call:rate_24h{provider="stakely", chain="story"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="stakely", chain="story"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="stakely", chain="story"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="stakely", chain="story", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="stakely", chain="story", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="stakely", chain="story", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="stakely", chain="story", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="stakely", chain="story", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="stakely", chain="story", region="sgp"}[1h]) diff --git a/harnesses/rpc-capabilities/cmd/script/config.go b/harnesses/rpc-capabilities/cmd/script/config.go index 662c0256..409d9e32 100644 --- a/harnesses/rpc-capabilities/cmd/script/config.go +++ b/harnesses/rpc-capabilities/cmd/script/config.go @@ -788,6 +788,113 @@ func chains() []Chain { {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_CYBER_THIRDWEB", "https://7560.rpc.thirdweb.com")}, }, }, + // 2026-08-03 audit. Rootstock EVM sidechain (chain 30). 3 clean keyless + // providers: rootstock-official (public-node.rsk.co), drpc + // (rootstock.drpc.org), thirdweb (30.rpc.thirdweb.com). + // Excluded: Blast API (shut down), Alchemy (key required). + { + Slug: "rootstock", + Name: "Rootstock", + Providers: []Provider{ + {Slug: "rootstock-official", Name: "Rootstock Foundation", URL: envDefault("RPC_URL_ROOTSTOCK_OFFICIAL", "https://public-node.rsk.co")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ROOTSTOCK_DRPC", "https://rootstock.drpc.org")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_ROOTSTOCK_THIRDWEB", "https://30.rpc.thirdweb.com")}, + }, + }, + // 2026-08-03 audit. Metis Andromeda optimistic rollup (chain 1088). 4 clean + // keyless providers: metis-official (andromeda.metis.io), drpc + // (metis.drpc.org), publicnode (metis-rpc.publicnode.com), thirdweb + // (1088.rpc.thirdweb.com). Excluded: Ankr (key required for metis). + { + Slug: "metis", + Name: "Metis", + Providers: []Provider{ + {Slug: "metis-official", Name: "Metis", URL: envDefault("RPC_URL_METIS_OFFICIAL", "https://andromeda.metis.io/?owner=1088")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_METIS_DRPC", "https://metis.drpc.org")}, + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_METIS_PUBLICNODE", "https://metis-rpc.publicnode.com")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_METIS_THIRDWEB", "https://1088.rpc.thirdweb.com")}, + }, + }, + // 2026-08-03 audit. Manta Pacific OP Stack L2 on Celestia DA (chain 169). + // 3 clean keyless providers: manta-official (pacific-rpc.manta.network/http), + // drpc (manta-pacific.drpc.org), thirdweb (169.rpc.thirdweb.com). + // Excluded: Ankr (no manta pacific route), Alchemy (key required). + { + Slug: "manta", + Name: "Manta Pacific", + Providers: []Provider{ + {Slug: "manta-official", Name: "Manta Network", URL: envDefault("RPC_URL_MANTA_OFFICIAL", "https://pacific-rpc.manta.network/http")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_MANTA_DRPC", "https://manta-pacific.drpc.org")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_MANTA_THIRDWEB", "https://169.rpc.thirdweb.com")}, + }, + }, + // 2026-08-03 audit. Story Protocol IP L1 (chain 1514). 3 clean keyless + // providers: story-official (mainnet.storyrpc.io), ankr + // (rpc.ankr.com/story_mainnet), stakely (story-json-rpc.stakely.io). + // Excluded: Alchemy (key required), Infura (no story route). + { + Slug: "story", + Name: "Story", + Providers: []Provider{ + {Slug: "story-official", Name: "Story Foundation", URL: envDefault("RPC_URL_STORY_OFFICIAL", "https://mainnet.storyrpc.io")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_STORY_ANKR", "https://rpc.ankr.com/story_mainnet")}, + {Slug: "stakely", Name: "Stakely", URL: envDefault("RPC_URL_STORY_STAKELY", "https://story-json-rpc.stakely.io")}, + }, + }, + // 2026-08-03 audit. Morph ZK Rollup L2 (chain 2818). 3 clean keyless + // providers: morph-official (rpc.morphl2.io), drpc (morph.drpc.org), + // thirdweb (2818.rpc.thirdweb.com). Excluded: Ankr (no morph route). + { + Slug: "morph", + Name: "Morph", + Providers: []Provider{ + {Slug: "morph-official", Name: "Morph", URL: envDefault("RPC_URL_MORPH_OFFICIAL", "https://rpc.morphl2.io")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_MORPH_DRPC", "https://morph.drpc.org")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_MORPH_THIRDWEB", "https://2818.rpc.thirdweb.com")}, + }, + }, + // 2026-08-03 audit. Moonriver Kusama parachain (chain 1285). 4 clean + // keyless providers: moonriver-official (rpc.api.moonriver.moonbeam.network), + // publicnode (moonriver-rpc.publicnode.com), onfinality + // (moonriver.api.onfinality.io/public), unitedbloc (moonriver.unitedbloc.com). + // Excluded: Ankr (key required for moonriver), drpc (no moonriver route). + { + Slug: "moonriver", + Name: "Moonriver", + Providers: []Provider{ + {Slug: "moonriver-official", Name: "Moonbeam Foundation", URL: envDefault("RPC_URL_MOONRIVER_OFFICIAL", "https://rpc.api.moonriver.moonbeam.network")}, + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_MOONRIVER_PUBLICNODE", "https://moonriver-rpc.publicnode.com")}, + {Slug: "onfinality", Name: "OnFinality", URL: envDefault("RPC_URL_MOONRIVER_ONFINALITY", "https://moonriver.api.onfinality.io/public")}, + {Slug: "unitedbloc", Name: "UnitedBloc", URL: envDefault("RPC_URL_MOONRIVER_UNITEDBLOC", "https://moonriver.unitedbloc.com")}, + }, + }, + // 2026-08-03 audit. Hemi BTC+ETH hybrid OP Stack L2 (chain 43111). 3 clean + // keyless providers: hemi-official (rpc.hemi.network/rpc), drpc + // (hemi.drpc.org), thirdweb (43111.rpc.thirdweb.com). + // Excluded: Ankr (no hemi route), Alchemy (key required). + { + Slug: "hemi", + Name: "Hemi", + Providers: []Provider{ + {Slug: "hemi-official", Name: "Hemi Labs", URL: envDefault("RPC_URL_HEMI_OFFICIAL", "https://rpc.hemi.network/rpc")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_HEMI_DRPC", "https://hemi.drpc.org")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_HEMI_THIRDWEB", "https://43111.rpc.thirdweb.com")}, + }, + }, + // 2026-08-03 audit. BOB BTC+ETH hybrid OP Stack L2 (chain 60808). 4 clean + // keyless providers: bob-official (rpc.gobob.xyz), tenderly + // (bob.gateway.tenderly.co), drpc (bob.drpc.org), thirdweb + // (60808.rpc.thirdweb.com). Excluded: Ankr (no bob route). + { + Slug: "bob", + Name: "BOB", + Providers: []Provider{ + {Slug: "bob-official", Name: "BOB", URL: envDefault("RPC_URL_BOB_OFFICIAL", "https://rpc.gobob.xyz")}, + {Slug: "tenderly", Name: "Tenderly", URL: envDefault("RPC_URL_BOB_TENDERLY", "https://bob.gateway.tenderly.co")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_BOB_DRPC", "https://bob.drpc.org")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_BOB_THIRDWEB", "https://60808.rpc.thirdweb.com")}, + }, + }, } filter := strings.TrimSpace(os.Getenv("OCB_CHAINS")) diff --git a/public/logos/bob.png b/public/logos/bob.png new file mode 100644 index 00000000..ac7c74d5 Binary files /dev/null and b/public/logos/bob.png differ diff --git a/public/logos/hemi.png b/public/logos/hemi.png new file mode 100644 index 00000000..f2fb54a4 Binary files /dev/null and b/public/logos/hemi.png differ diff --git a/public/logos/manta.jpg b/public/logos/manta.jpg new file mode 100644 index 00000000..9d58f613 Binary files /dev/null and b/public/logos/manta.jpg differ diff --git a/public/logos/metis.png b/public/logos/metis.png new file mode 100644 index 00000000..d630638f Binary files /dev/null and b/public/logos/metis.png differ diff --git a/public/logos/moonriver.jpg b/public/logos/moonriver.jpg new file mode 100644 index 00000000..1e6961c5 Binary files /dev/null and b/public/logos/moonriver.jpg differ diff --git a/public/logos/morph.jpg b/public/logos/morph.jpg new file mode 100644 index 00000000..6940e21a Binary files /dev/null and b/public/logos/morph.jpg differ diff --git a/public/logos/morph.png b/public/logos/morph.png new file mode 100644 index 00000000..030dd959 Binary files /dev/null and b/public/logos/morph.png differ diff --git a/public/logos/rootstock.jpg b/public/logos/rootstock.jpg new file mode 100644 index 00000000..55199585 Binary files /dev/null and b/public/logos/rootstock.jpg differ diff --git a/public/logos/story.png b/public/logos/story.png new file mode 100644 index 00000000..23a04c57 Binary files /dev/null and b/public/logos/story.png differ diff --git a/public/logos/unitedbloc.jpg b/public/logos/unitedbloc.jpg new file mode 100644 index 00000000..9438251c Binary files /dev/null and b/public/logos/unitedbloc.jpg differ diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 49e0d387..c21aafd4 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -1949,6 +1949,60 @@ export const PROVIDER_REGISTRY: Record = { "Cyber Network's official public RPC (rpc.cyber.co) for the OP Stack L2 dedicated to SocialFi and Web3 social graphs (chain 7560). Standard EVM JSON-RPC, keyless, rate-limited per IP.", twitter: "@cyberconnecthq", }, + "rootstock-official": { + url: "https://rootstock.io", + description: + "Rootstock Foundation's official public RPC (public-node.rsk.co) for the Bitcoin sidechain with EVM smart contracts and merge-mining security (chain 30). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@rootstock_io", + }, + "metis-official": { + url: "https://metis.io", + description: + "Metis's official Andromeda public RPC (andromeda.metis.io) for the optimistic rollup with a decentralized sequencer network and METIS gas token (chain 1088). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@MetisL2", + }, + "manta-official": { + url: "https://manta.network", + description: + "Manta Network's official Pacific public RPC (pacific-rpc.manta.network/http) for the OP Stack L2 built on Celestia DA, optimised for zero-knowledge applications (chain 169). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@MantaNetwork", + }, + "story-official": { + url: "https://www.story.foundation", + description: + "Story Foundation's official public RPC (mainnet.storyrpc.io) for the purpose-built IP blockchain with EVM execution and CometBFT consensus, IP gas token (chain 1514). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@StoryProtocol", + }, + "morph-official": { + url: "https://morphl2.io", + description: + "Morph's official public RPC (rpc.morphl2.io) for the ZK Rollup L2 combining optimistic execution with ZK proof settlement and a Decentralized Sequencer Network (chain 2818). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@Morphl2", + }, + "moonriver-official": { + url: "https://moonbeam.network/moonriver", + description: + "Moonbeam Foundation's official public RPC (rpc.api.moonriver.moonbeam.network) for Moonriver, the Kusama parachain with full EVM compatibility and MOVR gas token (chain 1285). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@MoonriverNW", + }, + "hemi-official": { + url: "https://hemi.xyz", + description: + "Hemi Labs' official public RPC (rpc.hemi.network/rpc) for the Bitcoin+Ethereum hybrid L2 with dual-VM architecture running both EVM and Bitcoin script (chain 43111). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@hemi_xyz", + }, + "bob-official": { + url: "https://gobob.xyz", + description: + "BOB's official public RPC (rpc.gobob.xyz) for the Build on Bitcoin OP Stack hybrid L2 bridging BTC and ETH with native BTC collateral support (chain 60808). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@gobob_xyz", + }, + unitedbloc: { + url: "https://unitedbloc.com", + description: + "UnitedBloc is a community validator and RPC node operator running public infrastructure for Moonbeam and Moonriver. Their keyless endpoint (moonriver.unitedbloc.com) supports Moonriver (chain 1285) without an API key.", + twitter: "@unitedbloc", + }, }; /** diff --git a/src/lib/chains.ts b/src/lib/chains.ts index 424fb9a2..805dfc5d 100644 --- a/src/lib/chains.ts +++ b/src/lib/chains.ts @@ -485,6 +485,70 @@ export const CHAINS: ChainEntry[] = [ description: "OP Stack L2 (chain 7560) operated by Cyber, a social-layer chain for SocialFi and Web3 social graphs, ETH gas token, ~2 s block cadence, blob calldata settlement on Ethereum.", }, + { + slug: "rootstock", + label: "Rootstock", + category: "L2", + nativeSymbol: "RBTC", + description: + "Bitcoin sidechain (chain 30) operated by the Rootstock Foundation, merge-mined with Bitcoin for 51% attack resistance, EVM-compatible smart contracts with BTC as native gas (RBTC), ~30 s block time.", + }, + { + slug: "metis", + label: "Metis", + category: "L2", + nativeSymbol: "METIS", + description: + "Optimistic rollup (chain 1088) with a decentralized sequencer network, METIS as both gas token and sequencer staking asset, ~2 s block cadence, settlement on Ethereum.", + }, + { + slug: "manta", + label: "Manta Pacific", + category: "L2", + nativeSymbol: "ETH", + description: + "OP Stack EVM L2 (chain 169) built on Celestia for data availability, optimised for zero-knowledge applications and DeFi, ETH gas token, ~2 s block cadence, settlement on Ethereum.", + }, + { + slug: "story", + label: "Story", + category: "L1", + nativeSymbol: "IP", + description: + "Purpose-built L1 (chain 1514) for on-chain intellectual property with EVM execution layer and CometBFT consensus, IP asset primitives (PIL licensing, royalty modules), IP gas token.", + }, + { + slug: "morph", + label: "Morph", + category: "L2", + nativeSymbol: "ETH", + description: + "ZK Rollup L2 (chain 2818) combining optimistic execution with ZK proof settlement on Ethereum, ETH gas token, ~2 s block cadence, Decentralized Sequencer Network for censorship resistance.", + }, + { + slug: "moonriver", + label: "Moonriver", + category: "L1", + nativeSymbol: "MOVR", + description: + "Kusama parachain (chain 1285) operated by the Moonbeam Foundation, full EVM compatibility with Ethereum tooling, MOVR gas token, ~12 s block time under Nominated Proof of Stake, canary network for Moonbeam.", + }, + { + slug: "hemi", + label: "Hemi", + category: "L2", + nativeSymbol: "ETH", + description: + "Bitcoin+Ethereum hybrid L2 (chain 43111) built on OP Stack with dual-VM architecture running both EVM and Bitcoin script, ETH gas token, ~2 s block cadence, designed to unify BTC and ETH liquidity.", + }, + { + slug: "bob", + label: "BOB", + category: "L2", + nativeSymbol: "ETH", + description: + "Build on Bitcoin — OP Stack hybrid L2 (chain 60808) bridging Bitcoin and Ethereum, enabling Bitcoin DeFi with EVM smart contracts and native BTC collateral, ETH gas token, ~2 s block cadence.", + }, ]; export const CHAIN_BY_SLUG = new Map(CHAINS.map((c) => [c.slug, c])); diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index b12ec338..180d7a25 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -68,6 +68,17 @@ const RAW: Record = { altlayer: "/logos/altlayer.webp", sentio: "/logos/sentio.png", + // RPC wave-3 chains (2026-08-03, benches 130-137) + rootstock: "/logos/rootstock.jpg", + metis: "/logos/metis.png", + manta: "/logos/manta.jpg", + story: "/logos/story.png", + morph: "/logos/morph.png", + moonriver: "/logos/moonriver.jpg", + hemi: "/logos/hemi.png", + bob: "/logos/bob.png", + unitedbloc: "/logos/unitedbloc.jpg", + // ─── Providers ─── mobula: "/logos/mobula.svg", codex: "/logos/codex.svg", @@ -494,6 +505,15 @@ const ALIASES: Record = { "apechain-official": "apechain", "lisk-official": "lisk", "cyber-official": "cyber", + // RPC wave-3 chains (2026-08-03, benches 130-137) + "rootstock-official": "rootstock", + "metis-official": "metis", + "manta-official": "manta", + "story-official": "story", + "morph-official": "morph", + "moonriver-official": "moonriver", + "hemi-official": "hemi", + "bob-official": "bob", };