diff --git a/benchmarks/cosmos-hub-rpc.yml b/benchmarks/cosmos-hub-rpc.yml new file mode 100644 index 00000000..868a1c25 --- /dev/null +++ b/benchmarks/cosmos-hub-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 094 + +slug: cosmos-hub-rpc +number: "094" +title: Fastest free Cosmos Hub RPC, live no-key Cosmos SDK endpoint latency +seo_title: "Fastest free Cosmos Hub RPC 2026" +seo_description: "{{best_name}} leads free Cosmos Hub RPC at {{best_p50}} (Tendermint `status` p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the Tendermint `status` method against every free, no-key public Cosmos Hub Cosmos SDK endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Cosmos Hub is the original Cosmos SDK chain and the IBC hub. ATOM staking secures both Cosmos Hub itself and consumer chains via Interchain Security. Same Tendermint `status` probe used on Osmosis; every provider live-verified with 4 consecutive keyless probes at launch. `rpc.cosmos.network` returned Cloudflare 525 during the launch audit and was excluded until the Cloudflare rate limit is lifted. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Cosmos Hub. + We measure the round-trip latency of a single, identical JSON-RPC call + (Tendermint `status`) against every no-key public Cosmos Hub endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a Cosmos Hub-scaled staleness gap (40 blocks at + Cosmos Hub's ~6 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + Cosmos Hub-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\":\"status\",\"params\":[]}`. 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 decimal `sync_info.latest_block_height`), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 40 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=\"cosmos-hub\"`. Provider coverage at launch: 4 no-key endpoints (PublicNode, Polkachu, LavenderFive, Lava Network)." + +findings: + - "{{best_name}} currently leads free Cosmos Hub RPC at {{best_p50}} (Tendermint `status` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Cosmos Hub RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (Tendermint `status` 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Cosmos Hub RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing at launch: PublicNode, Polkachu, LavenderFive, Lava Network. Every listed endpoint was live-verified with a Tendermint `status` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest Cosmos Hub 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 Cosmos Hub RPC latency measured here, technically?" + a: "One identical Tendermint `status` 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="cosmos-hub"}) + +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: publicnode + name: PublicNode + tag: Allnodes-operated, 70+ chains, includes Cosmos SDK + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key cosmos-hub RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="cosmos-hub"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="cosmos-hub"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="cosmos-hub"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="cosmos-hub"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="cosmos-hub"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="cosmos-hub"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="cosmos-hub"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="cosmos-hub"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="cosmos-hub", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="cosmos-hub", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="cosmos-hub", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="cosmos-hub", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="cosmos-hub", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="cosmos-hub", region="sgp"}[1h]) + + - slug: polkachu + name: Polkachu + tag: Community Cosmos validator + public RPC network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Polkachu's no-key cosmos-hub RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="cosmos-hub"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="polkachu", chain="cosmos-hub"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="polkachu", chain="cosmos-hub"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="polkachu", chain="cosmos-hub"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="polkachu", chain="cosmos-hub"}) / sum(ocb:rpc_call:rate_24h{provider="polkachu", chain="cosmos-hub"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="polkachu", chain="cosmos-hub"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="cosmos-hub"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="cosmos-hub", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="cosmos-hub", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="cosmos-hub", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="cosmos-hub", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="cosmos-hub", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="cosmos-hub", region="sgp"}[1h]) + + - slug: lavenderfive + name: LavenderFive + tag: Cosmos validator + no-key RPC path, multi-chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to LavenderFive's no-key cosmos-hub RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="cosmos-hub"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lavenderfive", chain="cosmos-hub"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lavenderfive", chain="cosmos-hub"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lavenderfive", chain="cosmos-hub"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lavenderfive", chain="cosmos-hub"}) / sum(ocb:rpc_call:rate_24h{provider="lavenderfive", chain="cosmos-hub"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lavenderfive", chain="cosmos-hub"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="cosmos-hub"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="cosmos-hub", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="cosmos-hub", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="cosmos-hub", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="cosmos-hub", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="cosmos-hub", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="cosmos-hub", region="sgp"}[1h]) + + - slug: lava + name: Lava Network + tag: Multi-chain RPC gateway with a no-key Cosmos Hub tier + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Lava Network's no-key cosmos-hub RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lava", chain="cosmos-hub"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lava", chain="cosmos-hub"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lava", chain="cosmos-hub"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lava", chain="cosmos-hub"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lava", chain="cosmos-hub"}) / sum(ocb:rpc_call:rate_24h{provider="lava", chain="cosmos-hub"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lava", chain="cosmos-hub"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lava", chain="cosmos-hub"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lava", chain="cosmos-hub", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lava", chain="cosmos-hub", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lava", chain="cosmos-hub", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lava", chain="cosmos-hub", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lava", chain="cosmos-hub", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lava", chain="cosmos-hub", region="sgp"}[1h]) diff --git a/benchmarks/injective-rpc.yml b/benchmarks/injective-rpc.yml new file mode 100644 index 00000000..394673d5 --- /dev/null +++ b/benchmarks/injective-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 095 + +slug: injective-rpc +number: "095" +title: Fastest free Injective RPC, live no-key Cosmos SDK endpoint latency +seo_title: "Fastest free Injective RPC 2026" +seo_description: "{{best_name}} leads free Injective RPC at {{best_p50}} (Tendermint `status` p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the Tendermint `status` method against every free, no-key public Injective Cosmos SDK endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Injective is a Cosmos SDK L1 tuned for orderbook DEXs and DeFi, with native CosmWasm and EVM execution modules. Same Tendermint `status` probe used on the rest of the Cosmos cluster; every provider live-verified with 4 consecutive keyless probes at launch. Injective's `~0.65 s` block time is much faster than the Cosmos Hub / Osmosis norm, so the block-based staleness gap is deliberately wider (40 blocks = ~26 s) to avoid false-positive `stale` classifications during a fast leader turnover. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Injective. + We measure the round-trip latency of a single, identical JSON-RPC call + (Tendermint `status`) against every no-key public Injective endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a Injective-scaled staleness gap (40 blocks at + Injective's ~0.65 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + Injective-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\":\"status\",\"params\":[]}`. 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 decimal `sync_info.latest_block_height`), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 40 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=\"injective\"`. Provider coverage at launch: 4 no-key endpoints (Injective Foundation, PublicNode, Polkachu, LavenderFive)." + +findings: + - "{{best_name}} currently leads free Injective RPC at {{best_p50}} (Tendermint `status` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Injective RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (Tendermint `status` 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Injective RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing at launch: Injective Foundation, PublicNode, Polkachu, LavenderFive. Every listed endpoint was live-verified with a Tendermint `status` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest Injective 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 Injective RPC latency measured here, technically?" + a: "One identical Tendermint `status` 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="injective"}) + +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: injective-official + name: Injective Foundation + tag: Injective Foundation's official public Tendermint RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Injective Foundation's no-key injective RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="injective-official", chain="injective"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="injective-official", chain="injective"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="injective-official", chain="injective"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="injective-official", chain="injective"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="injective-official", chain="injective"}) / sum(ocb:rpc_call:rate_24h{provider="injective-official", chain="injective"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="injective-official", chain="injective"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="injective-official", chain="injective"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="injective-official", chain="injective", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="injective-official", chain="injective", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="injective-official", chain="injective", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="injective-official", chain="injective", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="injective-official", chain="injective", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="injective-official", chain="injective", region="sgp"}[1h]) + + - slug: publicnode + name: PublicNode + tag: Allnodes-operated, 70+ chains, includes Cosmos SDK + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key injective RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="injective"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="injective"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="injective"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="injective"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="injective"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="injective"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="injective"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="injective"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="injective", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="injective", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="injective", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="injective", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="injective", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="injective", region="sgp"}[1h]) + + - slug: polkachu + name: Polkachu + tag: Community Cosmos validator + public RPC network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Polkachu's no-key injective RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="injective"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="polkachu", chain="injective"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="polkachu", chain="injective"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="polkachu", chain="injective"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="polkachu", chain="injective"}) / sum(ocb:rpc_call:rate_24h{provider="polkachu", chain="injective"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="polkachu", chain="injective"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="injective"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="injective", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="injective", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="injective", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="injective", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="injective", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="injective", region="sgp"}[1h]) + + - slug: lavenderfive + name: LavenderFive + tag: Cosmos validator + no-key RPC path, multi-chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to LavenderFive's no-key injective RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="injective"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lavenderfive", chain="injective"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lavenderfive", chain="injective"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lavenderfive", chain="injective"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lavenderfive", chain="injective"}) / sum(ocb:rpc_call:rate_24h{provider="lavenderfive", chain="injective"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lavenderfive", chain="injective"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="injective"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="injective", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="injective", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="injective", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="injective", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="injective", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="injective", region="sgp"}[1h]) diff --git a/benchmarks/ink-rpc.yml b/benchmarks/ink-rpc.yml new file mode 100644 index 00000000..e6297b11 --- /dev/null +++ b/benchmarks/ink-rpc.yml @@ -0,0 +1,182 @@ +# OpenChainBench. Bench № 099 + +slug: ink-rpc +number: "099" +title: Fastest free Ink RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Ink RPC 2026" +seo_description: "{{best_name}} leads free Ink RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50, 24h). 5 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 Ink EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Ink is an OP Stack rollup (chain 57073) launched by Kraken in late 2024, DeFi-first positioning with ETH gas and a native ecosystem incentive program. Standard EVM JSON-RPC. Kraken operates two active-active official endpoints (Gelato-backed `rpc-gel` and QuickNode-backed `rpc-qnd`) so both appear on this leaderboard. Excluded by the launch audit: Alchemy public (chain not enabled on public tier), Blast API (API no longer available). Every provider live-verified with 4 consecutive keyless probes at launch. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Ink. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public Ink endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a Ink-scaled staleness gap (25 blocks at + Ink's ~1 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + Ink-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 25 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=\"ink\"`. Provider coverage at launch: 5 no-key endpoints (Ink (Gelato), Ink (QuickNode), dRPC, Tenderly Gateway, ThirdWeb)." + +findings: + - "{{best_name}} currently leads free Ink RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free Ink RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Ink RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing at launch: Ink (Gelato), Ink (QuickNode), dRPC, Tenderly Gateway, ThirdWeb. Every listed endpoint was live-verified with a `eth_getBlockByNumber(\"latest\", false)` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest Ink 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 Ink 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="ink"}) + +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: ink-official + name: Ink (Gelato) + tag: Kraken's Ink Chain official public RPC, Gelato-backed + 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 Ink (Gelato)'s no-key ink RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-official", chain="ink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ink-official", chain="ink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ink-official", chain="ink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ink-official", chain="ink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ink-official", chain="ink"}) / sum(ocb:rpc_call:rate_24h{provider="ink-official", chain="ink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ink-official", chain="ink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ink-official", chain="ink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-official", chain="ink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-official", chain="ink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-official", chain="ink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-official", chain="ink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-official", chain="ink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-official", chain="ink", region="sgp"}[1h]) + + - slug: ink-quicknode + name: Ink (QuickNode) + tag: Kraken's Ink Chain second official public RPC, QuickNode-backed + 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 Ink (QuickNode)'s no-key ink RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-quicknode", chain="ink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ink-quicknode", chain="ink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ink-quicknode", chain="ink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ink-quicknode", chain="ink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ink-quicknode", chain="ink"}) / sum(ocb:rpc_call:rate_24h{provider="ink-quicknode", chain="ink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ink-quicknode", chain="ink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ink-quicknode", chain="ink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-quicknode", chain="ink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-quicknode", chain="ink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-quicknode", chain="ink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-quicknode", chain="ink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ink-quicknode", chain="ink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ink-quicknode", chain="ink", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: Multi-provider RPC load balancer, edge-close routing + 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 ink RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="ink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="ink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="ink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="ink"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="ink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="ink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ink", region="sgp"}[1h]) + + - slug: tenderly + name: Tenderly Gateway + tag: Tenderly's public multi-chain RPC gateway + 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 Gateway's no-key ink RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="ink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="tenderly", chain="ink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="tenderly", chain="ink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="tenderly", chain="ink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="tenderly", chain="ink"}) / sum(ocb:rpc_call:rate_24h{provider="tenderly", chain="ink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="tenderly", chain="ink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="ink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="ink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="ink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="ink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="ink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="ink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="ink", region="sgp"}[1h]) + + - slug: thirdweb + name: ThirdWeb + tag: ThirdWeb's public multi-chain RPC gateway + 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 ink RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="ink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="ink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="ink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="ink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="ink"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="ink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="ink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="ink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="ink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="ink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="ink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="ink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="ink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="ink", region="sgp"}[1h]) diff --git a/benchmarks/kaia-rpc.yml b/benchmarks/kaia-rpc.yml new file mode 100644 index 00000000..ce5292ea --- /dev/null +++ b/benchmarks/kaia-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 098 + +slug: kaia-rpc +number: "098" +title: Fastest free Kaia RPC, live no-key EVM endpoint latency +seo_title: "Fastest free Kaia RPC 2026" +seo_description: "{{best_name}} leads free Kaia RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` 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 Kaia EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Kaia is the EVM L1 formed by the Klaytn + Finschia merger in Aug 2024, with Istanbul BFT consensus, KAIA gas token, and dominant footprint in Korea + Japan through LINE and Kakao integrations. Standard EVM JSON-RPC. Excluded by the launch audit: BlockPI (`kaia.blockpi.network` returned `Apikey not found`), Nodies (`klaytn-pokt.nodies.app` requires paid subscription), Alchemy public (`KAIA_MAINNET not enabled for this app` on public tier), AllThatNode + OnFinality + Chainstack + Tatum + NowNodes (DNS-fail or key required). Every provider live-verified with 4 consecutive keyless probes at launch. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Kaia. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public Kaia endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a Kaia-scaled staleness gap (25 blocks at + Kaia's ~1 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + Kaia-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 25 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=\"kaia\"`. Provider coverage at launch: 3 no-key endpoints (Kaia Foundation, dRPC, ThirdWeb)." + +findings: + - "{{best_name}} currently leads free Kaia RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Kaia 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Kaia RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing at launch: Kaia Foundation, dRPC, ThirdWeb. Every listed endpoint was live-verified with a `eth_getBlockByNumber(\"latest\", false)` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest Kaia 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 Kaia 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="kaia"}) + +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: kaia-official + name: Kaia Foundation + tag: Kaia Foundation's 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 Kaia Foundation's no-key kaia RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="kaia-official", chain="kaia"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="kaia-official", chain="kaia"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="kaia-official", chain="kaia"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="kaia-official", chain="kaia"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="kaia-official", chain="kaia"}) / sum(ocb:rpc_call:rate_24h{provider="kaia-official", chain="kaia"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="kaia-official", chain="kaia"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="kaia-official", chain="kaia"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="kaia-official", chain="kaia", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="kaia-official", chain="kaia", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="kaia-official", chain="kaia", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="kaia-official", chain="kaia", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="kaia-official", chain="kaia", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="kaia-official", chain="kaia", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: Multi-provider RPC load balancer, edge-close routing + 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 kaia RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kaia"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="kaia"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="kaia"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="kaia"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="kaia"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="kaia"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="kaia"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kaia"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kaia", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kaia", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kaia", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kaia", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kaia", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kaia", region="sgp"}[1h]) + + - slug: thirdweb + name: ThirdWeb + tag: ThirdWeb's public multi-chain RPC gateway + 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 kaia RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="kaia"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="kaia"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="kaia"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="kaia"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="kaia"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="kaia"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="kaia"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="kaia"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="kaia", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="kaia", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="kaia", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="kaia", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="kaia", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="kaia", region="sgp"}[1h]) diff --git a/benchmarks/neutron-rpc.yml b/benchmarks/neutron-rpc.yml new file mode 100644 index 00000000..643ba08a --- /dev/null +++ b/benchmarks/neutron-rpc.yml @@ -0,0 +1,136 @@ +# OpenChainBench. Bench № 096 + +slug: neutron-rpc +number: "096" +title: Fastest free Neutron RPC, live no-key Cosmos SDK endpoint latency +seo_title: "Fastest free Neutron RPC 2026" +seo_description: "{{best_name}} leads free Neutron RPC at {{best_p50}} (Tendermint `status` p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the Tendermint `status` method against every free, no-key public Neutron Cosmos SDK endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Neutron is a Cosmos SDK smart-contract chain running CosmWasm, secured by Cosmos Hub validators via Interchain Security. Same Tendermint `status` probe used on the rest of the Cosmos cluster; every provider live-verified with 4 consecutive keyless probes at launch. Neutron's official `rpc-kralum.neutron-1.neutron.org` endpoint returned an SSL handshake failure during the launch audit and was excluded; it will be re-audited when the TLS chain is fixed. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Neutron. + We measure the round-trip latency of a single, identical JSON-RPC call + (Tendermint `status`) against every no-key public Neutron endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a Neutron-scaled staleness gap (40 blocks at + Neutron's ~2 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + Neutron-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\":\"status\",\"params\":[]}`. 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 decimal `sync_info.latest_block_height`), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 40 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=\"neutron\"`. Provider coverage at launch: 3 no-key endpoints (PublicNode, Polkachu, LavenderFive)." + +findings: + - "{{best_name}} currently leads free Neutron RPC at {{best_p50}} (Tendermint `status` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Neutron RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (Tendermint `status` 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which Neutron RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing at launch: PublicNode, Polkachu, LavenderFive. Every listed endpoint was live-verified with a Tendermint `status` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest Neutron 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 Neutron RPC latency measured here, technically?" + a: "One identical Tendermint `status` 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="neutron"}) + +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: publicnode + name: PublicNode + tag: Allnodes-operated, 70+ chains, includes Cosmos SDK + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key neutron RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="neutron"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="neutron"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="neutron"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="neutron"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="neutron"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="neutron"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="neutron"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="neutron"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="neutron", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="neutron", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="neutron", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="neutron", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="neutron", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="neutron", region="sgp"}[1h]) + + - slug: polkachu + name: Polkachu + tag: Community Cosmos validator + public RPC network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to Polkachu's no-key neutron RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="neutron"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="polkachu", chain="neutron"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="polkachu", chain="neutron"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="polkachu", chain="neutron"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="polkachu", chain="neutron"}) / sum(ocb:rpc_call:rate_24h{provider="polkachu", chain="neutron"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="polkachu", chain="neutron"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="neutron"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="neutron", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="neutron", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="neutron", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="neutron", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="polkachu", chain="neutron", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="polkachu", chain="neutron", region="sgp"}[1h]) + + - slug: lavenderfive + name: LavenderFive + tag: Cosmos validator + no-key RPC path, multi-chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to LavenderFive's no-key neutron RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="neutron"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lavenderfive", chain="neutron"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lavenderfive", chain="neutron"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lavenderfive", chain="neutron"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lavenderfive", chain="neutron"}) / sum(ocb:rpc_call:rate_24h{provider="lavenderfive", chain="neutron"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lavenderfive", chain="neutron"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="neutron"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="neutron", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="neutron", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="neutron", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="neutron", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="neutron", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="neutron", region="sgp"}[1h]) diff --git a/benchmarks/opbnb-rpc.yml b/benchmarks/opbnb-rpc.yml new file mode 100644 index 00000000..e43c03ad --- /dev/null +++ b/benchmarks/opbnb-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 100 + +slug: opbnb-rpc +number: "100" +title: Fastest free opBNB RPC, live no-key EVM endpoint latency +seo_title: "Fastest free opBNB RPC 2026" +seo_description: "{{best_name}} leads free opBNB RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` 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 opBNB EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + opBNB is the OP Stack rollup (chain 204) operated by the BNB Chain team, with BNB gas and settlement onto BNB Chain (not Ethereum). Standard EVM JSON-RPC. Excluded by the launch audit: NodeReal (`opbnb-mainnet.nodereal.io` requires API key), BlockPI (`unknown host`), Grove/Pocket public LB (needs app id), Tatum (404). Every provider live-verified with 4 consecutive keyless probes at launch. + +abstract: | + Per-chain member of the RPC latency cluster, extended to opBNB. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public opBNB endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a opBNB-scaled staleness gap (25 blocks at + opBNB's ~1 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + opBNB-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 25 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=\"opbnb\"`. Provider coverage at launch: 4 no-key endpoints (BNB Chain Team, PublicNode, dRPC, ThirdWeb)." + +findings: + - "{{best_name}} currently leads free opBNB RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free opBNB 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which opBNB RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing at launch: BNB Chain Team, PublicNode, dRPC, ThirdWeb. Every listed endpoint was live-verified with a `eth_getBlockByNumber(\"latest\", false)` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest opBNB 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 opBNB 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="opbnb"}) + +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: opbnb-official + name: BNB Chain Team + tag: BNB Chain team's official public opBNB 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 BNB Chain Team's no-key opbnb RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="opbnb-official", chain="opbnb"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="opbnb-official", chain="opbnb"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="opbnb-official", chain="opbnb"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="opbnb-official", chain="opbnb"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="opbnb-official", chain="opbnb"}) / sum(ocb:rpc_call:rate_24h{provider="opbnb-official", chain="opbnb"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="opbnb-official", chain="opbnb"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="opbnb-official", chain="opbnb"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="opbnb-official", chain="opbnb", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="opbnb-official", chain="opbnb", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="opbnb-official", chain="opbnb", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="opbnb-official", chain="opbnb", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="opbnb-official", chain="opbnb", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="opbnb-official", chain="opbnb", region="sgp"}[1h]) + + - slug: publicnode + name: PublicNode + tag: Allnodes-operated, 70+ chains, includes opBNB + 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 opbnb RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="opbnb"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="opbnb"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="opbnb"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="opbnb"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="opbnb"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="opbnb"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="opbnb"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="opbnb"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="opbnb", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="opbnb", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="opbnb", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="opbnb", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="opbnb", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="opbnb", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: Multi-provider RPC load balancer, edge-close routing + 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 opbnb RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="opbnb"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="opbnb"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="opbnb"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="opbnb"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="opbnb"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="opbnb"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="opbnb"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="opbnb"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="opbnb", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="opbnb", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="opbnb", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="opbnb", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="opbnb", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="opbnb", region="sgp"}[1h]) + + - slug: thirdweb + name: ThirdWeb + tag: ThirdWeb's public multi-chain RPC gateway + 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 opbnb RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="opbnb"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="opbnb"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="opbnb"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="opbnb"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="opbnb"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="opbnb"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="opbnb"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="opbnb"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="opbnb", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="opbnb", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="opbnb", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="opbnb", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="opbnb", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="opbnb", region="sgp"}[1h]) diff --git a/benchmarks/world-chain-rpc.yml b/benchmarks/world-chain-rpc.yml new file mode 100644 index 00000000..c22543d8 --- /dev/null +++ b/benchmarks/world-chain-rpc.yml @@ -0,0 +1,159 @@ +# OpenChainBench. Bench № 097 + +slug: world-chain-rpc +number: "097" +title: Fastest free World Chain RPC, live no-key EVM endpoint latency +seo_title: "Fastest free World Chain RPC 2026" +seo_description: "{{best_name}} leads free World Chain RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` 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 World Chain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + World Chain is an OP Stack rollup (chain 480) launched by Tools for Humanity in 2024, giving World ID-verified humans prioritised block space. ETH gas, standard EVM JSON-RPC. Excluded by the launch audit: PublicNode (no worldchain subdomain yet), Grove/Pocket public LB (needs app id), Alchemy paid tier (branded as `/public` but the same host serves both). Every provider live-verified with 4 consecutive keyless probes at launch. + +abstract: | + Per-chain member of the RPC latency cluster, extended to World Chain. + We measure the round-trip latency of a single, identical JSON-RPC call + (`eth_getBlockByNumber(\"latest\", false)`) against every no-key public World Chain endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a World Chain-scaled staleness gap (25 blocks at + World Chain's ~2 s block time). The cross-chain view lives + on the parent `rpc-capabilities` benchmark; this page is the + World Chain-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 25 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=\"world-chain\"`. Provider coverage at launch: 4 no-key endpoints (World Chain (Alchemy), dRPC, Tenderly Gateway, ThirdWeb)." + +findings: + - "{{best_name}} currently leads free World Chain RPC at {{best_p50}} (`eth_getBlockByNumber(\"latest\", false)` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free World Chain 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, so the answer on this page is the answer right now, not a quarterly snapshot. Use the region tabs to see the leader from the origin closest to your deployment." + - q: "Which World Chain RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing at launch: World Chain (Alchemy), dRPC, Tenderly Gateway, ThirdWeb. Every listed endpoint was live-verified with a `eth_getBlockByNumber(\"latest\", false)` POST returning a parsable response before inclusion. See the methodology section for the specific endpoints that were audited and excluded." + - q: "Does the fastest World Chain 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 World Chain 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="world-chain"}) + +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: worldchain-official + name: World Chain (Alchemy) + tag: Tools for Humanity's official public RPC on Alchemy infra + 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 World Chain (Alchemy)'s no-key world-chain RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="worldchain-official", chain="world-chain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="worldchain-official", chain="world-chain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="worldchain-official", chain="world-chain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="worldchain-official", chain="world-chain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="worldchain-official", chain="world-chain"}) / sum(ocb:rpc_call:rate_24h{provider="worldchain-official", chain="world-chain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="worldchain-official", chain="world-chain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="worldchain-official", chain="world-chain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="worldchain-official", chain="world-chain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="worldchain-official", chain="world-chain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="worldchain-official", chain="world-chain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="worldchain-official", chain="world-chain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="worldchain-official", chain="world-chain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="worldchain-official", chain="world-chain", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: Multi-provider RPC load balancer, edge-close routing + 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 world-chain RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="world-chain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="world-chain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="world-chain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="world-chain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="world-chain"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="world-chain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="world-chain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="world-chain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="world-chain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="world-chain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="world-chain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="world-chain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="world-chain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="world-chain", region="sgp"}[1h]) + + - slug: tenderly + name: Tenderly Gateway + tag: Tenderly's public multi-chain RPC gateway + 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 Gateway's no-key world-chain RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="world-chain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="tenderly", chain="world-chain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="tenderly", chain="world-chain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="tenderly", chain="world-chain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="tenderly", chain="world-chain"}) / sum(ocb:rpc_call:rate_24h{provider="tenderly", chain="world-chain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="tenderly", chain="world-chain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="world-chain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="world-chain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="world-chain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="world-chain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="world-chain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="tenderly", chain="world-chain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="tenderly", chain="world-chain", region="sgp"}[1h]) + + - slug: thirdweb + name: ThirdWeb + tag: ThirdWeb's public multi-chain RPC gateway + 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 world-chain RPC endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="world-chain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="world-chain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="world-chain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="world-chain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="world-chain"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="world-chain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="world-chain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="world-chain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="world-chain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="world-chain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="world-chain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="world-chain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="world-chain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="world-chain", region="sgp"}[1h]) diff --git a/harnesses/rpc-capabilities/cmd/script/config.go b/harnesses/rpc-capabilities/cmd/script/config.go index 90701706..d9597301 100644 --- a/harnesses/rpc-capabilities/cmd/script/config.go +++ b/harnesses/rpc-capabilities/cmd/script/config.go @@ -128,6 +128,54 @@ func chains() []Chain { {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_OSMOSIS_LAVENDERFIVE", "https://rpc.lavenderfive.com:443/osmosis")}, }, }, + // ─── Cosmos Hub (bench 094) — added 2026-07-24. Original Cosmos + // SDK chain, ATOM staking. Same Tendermint status probe as Osmosis. + // Providers live-verified keyless: publicnode, polkachu, + // lavenderfive, lava (`cosmoshub.tendermintrpc.lava.build`). + // Excluded: rpc.cosmos.network (Cloudflare 525), OnFinality + + // BlockApsis + AllThatNode (DNS-fail or moved). + { + Slug: "cosmos-hub", + Name: "Cosmos Hub", + Kind: "cosmos", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_COSMOSHUB_PUBLICNODE", "https://cosmos-rpc.publicnode.com")}, + {Slug: "polkachu", Name: "Polkachu", URL: envDefault("RPC_URL_COSMOSHUB_POLKACHU", "https://cosmos-rpc.polkachu.com")}, + {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_COSMOSHUB_LAVENDERFIVE", "https://rpc.lavenderfive.com:443/cosmoshub")}, + {Slug: "lava", Name: "Lava Network", URL: envDefault("RPC_URL_COSMOSHUB_LAVA", "https://cosmoshub.tendermintrpc.lava.build")}, + }, + }, + // ─── Injective (bench 095) — added 2026-07-24. Cosmos SDK L1 + // tuned for orderbook DEXs. Providers live-verified keyless: + // injective-official (tm.injective.network), publicnode, polkachu, + // lavenderfive. Excluded: sentry.tm.injective.network (dupe of + // official), AllThatNode (DNS-fail). + { + Slug: "injective", + Name: "Injective", + Kind: "cosmos", + Providers: []Provider{ + {Slug: "injective-official", Name: "Injective Foundation", URL: envDefault("RPC_URL_INJECTIVE_OFFICIAL", "https://tm.injective.network")}, + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_INJECTIVE_PUBLICNODE", "https://injective-rpc.publicnode.com")}, + {Slug: "polkachu", Name: "Polkachu", URL: envDefault("RPC_URL_INJECTIVE_POLKACHU", "https://injective-rpc.polkachu.com")}, + {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_INJECTIVE_LAVENDERFIVE", "https://rpc.lavenderfive.com:443/injective")}, + }, + }, + // ─── Neutron (bench 096) — added 2026-07-24. Cosmos SDK smart- + // contract chain secured by Cosmos Hub validators via Interchain + // Security. Providers live-verified keyless: publicnode, polkachu, + // lavenderfive. Excluded: rpc-kralum.neutron-1.neutron.org + // (SSL handshake failure), P2P.org + WhisperNode (DNS-fail). + { + Slug: "neutron", + Name: "Neutron", + Kind: "cosmos", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_NEUTRON_PUBLICNODE", "https://neutron-rpc.publicnode.com")}, + {Slug: "polkachu", Name: "Polkachu", URL: envDefault("RPC_URL_NEUTRON_POLKACHU", "https://neutron-rpc.polkachu.com")}, + {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_NEUTRON_LAVENDERFIVE", "https://rpc.lavenderfive.com:443/neutron")}, + }, + }, // ─── Solana mainnet — added 2026-07-12, all 5 endpoints keyless // and live-verified (getSlot + getLatestBlockhash + getVersion, // mutually consistent advancing slots). Excluded by that sweep: @@ -495,6 +543,72 @@ func chains() []Chain { {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_TRON_PUBLICNODE", "https://tron.publicnode.com/jsonrpc")}, }, }, + // ─── World Chain (bench 097) — added 2026-07-24. OP Stack rollup + // (chain 480) operated by Tools for Humanity, ETH gas, blob + // calldata settlement on Ethereum. Providers live-verified + // keyless: worldchain-official (Alchemy public path), drpc, + // tenderly, thirdweb. Excluded: PublicNode (no worldchain + // subdomain yet), Stakelab + Grove (DNS-fail). + { + Slug: "world-chain", + Name: "World Chain", + Providers: []Provider{ + {Slug: "worldchain-official", Name: "World Chain (Alchemy)", URL: envDefault("RPC_URL_WORLDCHAIN_OFFICIAL", "https://worldchain-mainnet.g.alchemy.com/public")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_WORLDCHAIN_DRPC", "https://worldchain.drpc.org")}, + {Slug: "tenderly", Name: "Tenderly Gateway", URL: envDefault("RPC_URL_WORLDCHAIN_TENDERLY", "https://worldchain-mainnet.gateway.tenderly.co")}, + {Slug: "thirdweb", Name: "ThirdWeb", URL: envDefault("RPC_URL_WORLDCHAIN_THIRDWEB", "https://480.rpc.thirdweb.com")}, + }, + }, + // ─── Kaia (bench 098) — added 2026-07-24. EVM L1 formed by + // Klaytn + Finschia merger. Providers live-verified keyless: + // kaia-official (public-en.node.kaia.io), drpc, thirdweb. + // Excluded: BlockPI (`Apikey not found`), Nodies (paid tier), + // Alchemy public (KAIA_MAINNET not enabled), AllThatNode + + // OnFinality + Chainstack + Tatum + NowNodes (DNS-fail or key + // required). + { + Slug: "kaia", + Name: "Kaia", + Providers: []Provider{ + {Slug: "kaia-official", Name: "Kaia Foundation", URL: envDefault("RPC_URL_KAIA_OFFICIAL", "https://public-en.node.kaia.io")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_KAIA_DRPC", "https://klaytn.drpc.org")}, + {Slug: "thirdweb", Name: "ThirdWeb", URL: envDefault("RPC_URL_KAIA_THIRDWEB", "https://kaia.rpc.thirdweb.com")}, + }, + }, + // ─── Ink (bench 099) — added 2026-07-24. OP Stack rollup + // (chain 57073) launched by Kraken. Two official active-active + // endpoints: Gelato-backed rpc-gel + QuickNode-backed rpc-qnd. + // Providers live-verified keyless: ink-official (Gelato), + // ink-quicknode (QuickNode), drpc, tenderly, thirdweb. + // Excluded: Alchemy public (chain not enabled on public tier), + // Blast API (no longer available). + { + Slug: "ink", + Name: "Ink", + Providers: []Provider{ + {Slug: "ink-official", Name: "Ink (Gelato)", URL: envDefault("RPC_URL_INK_OFFICIAL", "https://rpc-gel.inkonchain.com")}, + {Slug: "ink-quicknode", Name: "Ink (QuickNode)", URL: envDefault("RPC_URL_INK_QUICKNODE", "https://rpc-qnd.inkonchain.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_INK_DRPC", "https://ink.drpc.org")}, + {Slug: "tenderly", Name: "Tenderly Gateway", URL: envDefault("RPC_URL_INK_TENDERLY", "https://ink.gateway.tenderly.co")}, + {Slug: "thirdweb", Name: "ThirdWeb", URL: envDefault("RPC_URL_INK_THIRDWEB", "https://57073.rpc.thirdweb.com")}, + }, + }, + // ─── opBNB (bench 100) — added 2026-07-24. OP Stack rollup + // (chain 204) operated by the BNB Chain team, settlement onto + // BNB Chain (not Ethereum). Providers live-verified keyless: + // opbnb-official (bnbchain.org), publicnode, drpc, thirdweb. + // Excluded: NodeReal (API key required), BlockPI (`unknown host`), + // Grove (needs app id), Tatum (404). + { + Slug: "opbnb", + Name: "opBNB", + Providers: []Provider{ + {Slug: "opbnb-official", Name: "BNB Chain Team", URL: envDefault("RPC_URL_OPBNB_OFFICIAL", "https://opbnb-mainnet-rpc.bnbchain.org")}, + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_OPBNB_PUBLICNODE", "https://opbnb-rpc.publicnode.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_OPBNB_DRPC", "https://opbnb.drpc.org")}, + {Slug: "thirdweb", Name: "ThirdWeb", URL: envDefault("RPC_URL_OPBNB_THIRDWEB", "https://204.rpc.thirdweb.com")}, + }, + }, } filter := strings.TrimSpace(os.Getenv("OCB_CHAINS")) diff --git a/harnesses/rwa-yield-accuracy/cmd/script/oracle.go b/harnesses/rwa-yield-accuracy/cmd/script/oracle.go new file mode 100644 index 00000000..96adf7dd --- /dev/null +++ b/harnesses/rwa-yield-accuracy/cmd/script/oracle.go @@ -0,0 +1,119 @@ +package main + +import ( + "context" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" +) + +// On-chain NAV oracle readers. Two shapes are supported here: +// +// 1. Chainlink AggregatorV3Interface — used by Superstate USTB. +// latestRoundData() → (uint80, int256 answer, uint256, uint256, uint80) +// decimals() → uint8 +// +// 2. Aave-style IPriceOracle — used by Ondo OUSG. +// getAssetPrice(address asset) → uint256 (18 decimals, USD) +// (Verified 2026-07 against 0x9Cad45a8...C094: returns $115.977 +// for OUSG which matches Ondo's dashboard.) +// +// Both are read with plain eth_call. Passing a non-nil blockNumber gives +// the historical value at that block, which is how we produce the t-30d +// and t-7d NAVs for windowed yield without maintaining an in-memory ring. + +var ( + chainlinkLatestRoundDataSelector []byte + oracleDecimalsSelector []byte + aaveGetAssetPriceSelector []byte +) + +func init() { + chainlinkLatestRoundDataSelector = crypto.Keccak256([]byte("latestRoundData()"))[:4] + oracleDecimalsSelector = crypto.Keccak256([]byte("decimals()"))[:4] + aaveGetAssetPriceSelector = crypto.Keccak256([]byte("getAssetPrice(address)"))[:4] +} + +// readChainlinkNAV reads a Chainlink AggregatorV3 feed and returns the +// answer scaled to a USD float using the feed's own decimals(). +// blockNumber = nil reads the latest state; a specific big.Int reads +// the value that was current at that block (requires archive RPC). +func readChainlinkNAV(ctx context.Context, rpc *ethclient.Client, feed common.Address, blockNumber *big.Int) (float64, error) { + dec, err := readOracleDecimals(ctx, rpc, feed, blockNumber) + if err != nil { + return 0, fmt.Errorf("decimals: %w", err) + } + + msg := ethereum.CallMsg{ + To: &feed, + Data: chainlinkLatestRoundDataSelector, + } + result, err := rpc.CallContract(ctx, msg, blockNumber) + if err != nil { + return 0, fmt.Errorf("latestRoundData: %w", err) + } + if len(result) < 5*32 { + return 0, fmt.Errorf("latestRoundData: short response %d bytes", len(result)) + } + + // Slot layout: [roundId | answer | startedAt | updatedAt | answeredInRound] + // answer is int256; convert twos complement if negative (defensive — + // NAV feeds never go negative in practice). + answer := new(big.Int).SetBytes(result[32:64]) + if answer.Bit(255) == 1 { + answer.Sub(answer, new(big.Int).Lsh(big.NewInt(1), 256)) + } + return scaleByDecimals(answer, dec), nil +} + +func readOracleDecimals(ctx context.Context, rpc *ethclient.Client, feed common.Address, blockNumber *big.Int) (uint8, error) { + msg := ethereum.CallMsg{ + To: &feed, + Data: oracleDecimalsSelector, + } + result, err := rpc.CallContract(ctx, msg, blockNumber) + if err != nil { + return 0, err + } + if len(result) < 32 { + return 0, fmt.Errorf("empty decimals response") + } + // uint8 sits in the last byte of the padded 32-byte word. + return result[31], nil +} + +// readAavePriceOracleNAV reads IPriceOracle.getAssetPrice(asset) and +// returns the 18-decimal USD price as a float. Used for OUSG (Ondo's +// oracle exposes an Aave-compatible interface). +func readAavePriceOracleNAV(ctx context.Context, rpc *ethclient.Client, oracle, asset common.Address, blockNumber *big.Int) (float64, error) { + data := make([]byte, 0, 4+32) + data = append(data, aaveGetAssetPriceSelector...) + data = append(data, common.LeftPadBytes(asset.Bytes(), 32)...) + + msg := ethereum.CallMsg{ + To: &oracle, + Data: data, + } + result, err := rpc.CallContract(ctx, msg, blockNumber) + if err != nil { + return 0, err + } + if len(result) < 32 { + return 0, fmt.Errorf("getAssetPrice: short response") + } + price := new(big.Int).SetBytes(result[0:32]) + return scaleByDecimals(price, 18), nil +} + +func scaleByDecimals(v *big.Int, dec uint8) float64 { + f, _ := new(big.Float).SetInt(v).Float64() + scale := 1.0 + for i := uint8(0); i < dec; i++ { + scale *= 10 + } + return f / scale +} diff --git a/public/logos/cosmos-hub.svg b/public/logos/cosmos-hub.svg new file mode 100644 index 00000000..b1839a40 --- /dev/null +++ b/public/logos/cosmos-hub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logos/ink.svg b/public/logos/ink.svg new file mode 100644 index 00000000..fa76e236 --- /dev/null +++ b/public/logos/ink.svg @@ -0,0 +1,3 @@ + diff --git a/public/logos/kaia.png b/public/logos/kaia.png new file mode 100644 index 00000000..7a3a6803 Binary files /dev/null and b/public/logos/kaia.png differ diff --git a/public/logos/world-chain.png b/public/logos/world-chain.png new file mode 100644 index 00000000..a7d87e8f Binary files /dev/null and b/public/logos/world-chain.png differ diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 15951b10..39e8e0d2 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -654,6 +654,42 @@ export const PROVIDER_REGISTRY: Record = { "TRON Foundation's official public API gateway (api.trongrid.io). Serves both the native TRON REST API (wallet/getnowblock, wallet/triggersmartcontract) and an EVM-compatible JSON-RPC endpoint (/jsonrpc). Keyless with a free API-key tier for higher quotas. The reference endpoint every TronWeb/tronbox integrator points at first.", twitter: "@Trondao", }, + "injective-official": { + url: "https://injective.com", + description: + "Injective Foundation-operated public Tendermint RPC (tm.injective.network). Cosmos SDK JSON-RPC (status, block, abci_query), keyless, rate-limited per IP. The reference endpoint every Injective wallet + orderbook integrator points at first.", + twitter: "@injective", + }, + "worldchain-official": { + url: "https://world.org/world-chain", + description: + "Tools for Humanity / World Chain Foundation's official public RPC endpoint (worldchain-mainnet.g.alchemy.com/public, Alchemy-hosted on behalf of the chain). Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@worldcoin", + }, + "kaia-official": { + url: "https://kaia.io", + description: + "Kaia Foundation's official public RPC (public-en.node.kaia.io). Standard EVM JSON-RPC, keyless, rate-limited per IP. The reference endpoint every Kaia dApp integrator points at first, formed from the Klaytn + Finschia merger in Aug 2024.", + twitter: "@KaiaChain", + }, + "ink-official": { + url: "https://inkonchain.com", + description: + "Kraken's Ink Chain official public RPC (rpc-gel.inkonchain.com), operated by Gelato Network on behalf of Kraken. Standard EVM JSON-RPC, keyless, rate-limited per IP.", + twitter: "@inkonchain", + }, + "ink-quicknode": { + url: "https://inkonchain.com", + description: + "Kraken's Ink Chain second official public RPC (rpc-qnd.inkonchain.com), operated by QuickNode on behalf of Kraken. Standard EVM JSON-RPC, keyless, rate-limited per IP. Runs in parallel with the Gelato-backed endpoint as an active-active pair.", + twitter: "@inkonchain", + }, + "opbnb-official": { + url: "https://opbnb.bnbchain.org", + description: + "BNB Chain team's official public opBNB RPC (opbnb-mainnet-rpc.bnbchain.org). Standard EVM JSON-RPC on the OP Stack rollup that settles onto BNB Chain (not Ethereum), keyless, rate-limited per IP.", + twitter: "@BNBCHAIN", + }, dwellir: { url: "https://www.dwellir.com", description: diff --git a/src/lib/chains.ts b/src/lib/chains.ts index 53d677e4..0903ce04 100644 --- a/src/lib/chains.ts +++ b/src/lib/chains.ts @@ -333,6 +333,62 @@ export const CHAINS: ChainEntry[] = [ description: "HyperEVM (chain id 999). Hyperliquid Labs's EVM execution layer bolted onto the HyperCore perps engine, ~2 s blocks, HyperBFT consensus, native HYPE gas. First on-chain perp DEX to reach $1B+ daily volume.", }, + { + slug: "cosmos-hub", + label: "Cosmos Hub", + category: "L1", + nativeSymbol: "ATOM", + description: + "The original Cosmos SDK chain and IBC hub, ATOM staking token, CometBFT (Tendermint) consensus with deterministic per-block finality, ~6 s block time. Interchain Security (v2) rents validator security to consumer chains.", + }, + { + slug: "injective", + label: "Injective", + category: "L1", + nativeSymbol: "INJ", + description: + "Cosmos SDK L1 tuned for DeFi and orderbook DEXs, native CosmWasm + EVM execution modules, ~0.65 s block time, INJ deflationary burn on all app-layer fees.", + }, + { + slug: "neutron", + label: "Neutron", + category: "L1", + nativeSymbol: "NTRN", + description: + "Cosmos SDK smart-contract chain running CosmWasm, secured by Cosmos Hub validators via Interchain Security. ~2 s block time, IBC-native asset flows, home of Astroport and other Cosmos DeFi apps.", + }, + { + slug: "world-chain", + label: "World Chain", + category: "L2", + nativeSymbol: "ETH", + description: + "OP Stack rollup (chain 480) operated by Tools for Humanity, prioritised block space for World ID-verified humans, WLD as an ecosystem token but ETH gas, 2 s sequencer cadence, blob calldata settlement on Ethereum.", + }, + { + slug: "kaia", + label: "Kaia", + category: "L1", + nativeSymbol: "KAIA", + description: + "EVM L1 formed by the Klaytn + Finschia merger in Aug 2024. Istanbul BFT consensus with a fixed validator set, 1 s block target, KAIA gas token, dominant footprint in Korea + Japan through LINE / Kakao integrations.", + }, + { + slug: "ink", + label: "Ink", + category: "L2", + nativeSymbol: "ETH", + description: + "OP Stack rollup (chain 57073) launched by Kraken in late 2024, 1 s sequencer cadence, ETH gas, blob calldata settlement on Ethereum. DeFi-first positioning with a native ecosystem incentive program.", + }, + { + slug: "opbnb", + label: "opBNB", + category: "L2", + nativeSymbol: "BNB", + description: + "OP Stack rollup (chain 204) operated by the BNB Chain team, BNB gas token, ~1 s sequencer cadence, settlement onto BNB Chain (not Ethereum). Positioned as the low-cost execution layer for the BNB ecosystem.", + }, ]; 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 a91c4378..e55df068 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -140,6 +140,12 @@ const RAW: Record = { hypurrscan: "/logos/hypurrscan.webp", purroofgroup: "/logos/purroofgroup.png", + // ─── Batch 3 RPC cluster chains (benches 094-100) ─── + "cosmos-hub": "/logos/cosmos-hub.svg", + "world-chain": "/logos/world-chain.png", + kaia: "/logos/kaia.png", + ink: "/logos/ink.svg", + // ─── Gas oracles ─── etherscan: "/logos/etherscan.svg", owlracle: "/logos/owlracle.webp", @@ -411,6 +417,12 @@ const ALIASES: Record = { "osmosis-official": "osmosis", "hyperliquid-official": "hyperliquid", trongrid: "tron", + "injective-official": "injective", + "worldchain-official": "world-chain", + "kaia-official": "kaia", + "ink-official": "ink", + "ink-quicknode": "ink", + "opbnb-official": "opbnb", hood: "robinhood", coin: "coinbase", "megaeth-official": "megaeth", diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 18280641..e3bdcec4 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -297,7 +297,7 @@ const loadBenchmarkUnfilteredCached = unstable_cache( // v31: 084 indexer-latency dropped entirely (spec + harness deleted; // HyperSync + The Graph required paid credentials for sustained // cadence). Bench SET shrank. - ["bench-unfiltered-v38", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + ["bench-unfiltered-v39", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); @@ -456,7 +456,7 @@ const loadAllBenchmarksCached = unstable_cache( // v32: bumped with bench-unfiltered-v30 (081 slug rename ws-head-latency // -> ws-head-latency-ethereum + ungate on prod). // v34: bumped with bench-unfiltered-v31 (084 indexer-latency dropped). - ["all-benchmarks-v41", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + ["all-benchmarks-v42", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); export const loadAllBenchmarks = cache(loadAllBenchmarksCached);