From 52c8d3b1aaf796a5cb00039c946b6713d4ac8492 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Fri, 24 Jul 2026 14:31:27 +0200 Subject: [PATCH] add 7 RPC benches: cosmos-hub (094) + injective (095) + neutron (096) + world-chain (097) + kaia (098) + ink (099) + opbnb (100) Cosmos batch (harness kind=cosmos, Tendermint status probe): - cosmos-hub: 4 keyless providers (publicnode, polkachu, lavenderfive, lava) - injective: 4 keyless providers (injective-official, publicnode, polkachu, lavenderfive) - neutron: 3 keyless providers (publicnode, polkachu, lavenderfive) EVM batch (harness kind=evm, eth_getBlockByNumber probe): - world-chain: 4 keyless providers (worldchain-official/Alchemy public, drpc, tenderly, thirdweb) - kaia: 3 keyless providers (kaia-official, drpc, thirdweb) - ink: 5 keyless providers (ink-official/Gelato, ink-quicknode, drpc, tenderly, thirdweb) - opbnb: 4 keyless providers (opbnb-official, publicnode, drpc, thirdweb) Bumps cache keys bench-unfiltered v38->v39, all-benchmarks v41->v42. Adds chains + 6 new provider entries + 4 new logo files (cosmos-hub, world-chain, kaia, ink). Reuses existing injective.svg + neutron.svg + bnb.png (opbnb alias). --- benchmarks/cosmos-hub-rpc.yml | 159 +++++++++++++++ benchmarks/injective-rpc.yml | 159 +++++++++++++++ benchmarks/ink-rpc.yml | 182 ++++++++++++++++++ benchmarks/kaia-rpc.yml | 136 +++++++++++++ benchmarks/neutron-rpc.yml | 136 +++++++++++++ benchmarks/opbnb-rpc.yml | 159 +++++++++++++++ benchmarks/world-chain-rpc.yml | 159 +++++++++++++++ .../rpc-capabilities/cmd/script/config.go | 114 +++++++++++ .../rwa-yield-accuracy/cmd/script/oracle.go | 119 ++++++++++++ public/logos/cosmos-hub.svg | 1 + public/logos/ink.svg | 3 + public/logos/kaia.png | Bin 0 -> 4000 bytes public/logos/world-chain.png | Bin 0 -> 11545 bytes src/data/provider-registry.ts | 36 ++++ src/lib/chains.ts | 56 ++++++ src/lib/logo-manifest.ts | 12 ++ src/lib/spec.ts | 4 +- 17 files changed, 1433 insertions(+), 2 deletions(-) create mode 100644 benchmarks/cosmos-hub-rpc.yml create mode 100644 benchmarks/injective-rpc.yml create mode 100644 benchmarks/ink-rpc.yml create mode 100644 benchmarks/kaia-rpc.yml create mode 100644 benchmarks/neutron-rpc.yml create mode 100644 benchmarks/opbnb-rpc.yml create mode 100644 benchmarks/world-chain-rpc.yml create mode 100644 harnesses/rwa-yield-accuracy/cmd/script/oracle.go create mode 100644 public/logos/cosmos-hub.svg create mode 100644 public/logos/ink.svg create mode 100644 public/logos/kaia.png create mode 100644 public/logos/world-chain.png 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 0000000000000000000000000000000000000000..7a3a68035e2c3585c2c7b37b9d495d1419163754 GIT binary patch literal 4000 zcma)9c{tSH_rLEk%vdHQWSz055~T@QCp!s=P}WF%6X_#s%pf7ziwY&Xk3x3YM#@qn zI~fcbF_!FPpWpcY|9gJF`_H}4x%Zs&dd~AY=bjU7W}=T`6J!GbpbQOk%mIKHM+hKU z7@O^b0#^Vy?-=S_vhaugjG1~oZxd)+nF;p0lyY|BU(3m(za9&lN8<_tqZSN?g^k$w zF{w#1d9$nqf{6w%tBjkv}qtu_Jc#5CzbjFhY1K-$Kk22M!09Q)D9dY+;IqKX%QLb`aU1$D$UVeVv zhISL5?$v6rea=&(b-ky)x{b8ES0A7;Iy`()#nT{7=T^^q7P>*M`LLD*BI$=GNsS{- z(fihHZ*GesQ?n5`7V|YJ;O9M!^^ccccL3AuGkOK87bD;ptr z{R77)KU>7){7^}}A&WUD5Y$L0o=b1;DJ(49Pb#xua_q^{HBE~Qu8dX#vxS!M0MzV`y|3tlwJ72fuw^phPwp?-xVJeG0(aTkknH_mI3oQ3&OT*>TxVHS? zd0F2_n%Pl;jB4H?mWOK!e+|iF(OmND)yCAJ-nXrsTOW!7-~Ond7J*q@rfaeh)M$#@ zp=)bnN@th2h;U-6?JCo%wmizj#H2X&q7`$98T4}Hvxd_kx;?E}Ij-rvC2@H{vpyH* z*vy%5m+Go9A^OUac~pVbO%Na5$~kpCwQ%`u#y+Cj0zBIf9ql_cp+-HwP zw>K2eDegz7L5|W$MRo$$La}-w3c~U>as#oNivlk#K;E7_E5Xd?jD3Agj%gCe+(Ude zFSIb)u}))>VI?@~Tz&4dqk@No zZh#{q0mkuvx#neVp0gG0cv>f3y961E;sb|BhTf;G4FBEqcyqKS8X%(-w+8Nt&ki5& z_!N2Pjf4jr2L?A<4YTnJ9R?|~**(-CI4t$sX+nhbC%Y6p0W2^U@yODF)Q?r07J)(2p9g^*U)M zGsZOi!&>79%^-gRAw2ywGjv0jc|t%?vsVZB>$L4*Lvo_Q^5Y+y^N-O9(l8>A@s=1n zoPe+%jCs!m;`(|WthON=3=q!G)lA@p5uF09(7BprIzahZT2R6Tic?(H-$)dkkWJfn zVp>u_^z63q!HAdCg#v6G5lh%M+Cw_!%KAZR_(-Toc~z|HuI;C@XR^^x(|7B|hve8{ zIG~&-@|!-J=q?ago317<3nw_Qzm&TvT^z;HV3DE}X90H-2f|rY{LOMYd255zD6f${ z#3_(WIAYVF_rB*1gSarFSkchWfQu%gMP{24mw@t@>)V?Cgw}WgI6?dR`y|q=F+I0L zX8&9`K$7xp=UNy}w6EVN0FBDpV1f~JM``QHNE;-9=p)BJAq~Tvg#%X!ApBtEbjK)J z)c(Pvc)xIMImUxGSGX;KCj-xeKSrD9*U4Mei;hL!Bu02{%^w}3s{Wd4l^}ro?KYR8 zOiO|&_L~`Cxbl$ev1`yX6_Ps&3uTziit+JS{8nD9lr;1trnfG-`ceU#w=gF%{oVJ_ zp$+oggpBVJC-24H32{|8!_}eWP;RSy?CMABsR7@p&2I?P3VgP7gZSjHvdR2GQ`X*= z6vsG2&!L91W1HcZQet}niJr4eETXCDR67Dc{U;t?2;o4mZc z+1eqAab$}L?huFOzh@W*7g1YrSN#l3Xzg${H+z_x#)Vf}}dL;YvT{l%2v5Y~= z?J2nt4a7$U`sa11k@HBx zv+k`)CK!fEWjcSQ1p&vg>~OYWL;OR5!SH6o$Mw>$d}__A7j!?pY4VZ}T5LhXaYjD9 zra^e(iF)U2WoyjR`x9swhWWDywZ1k}SrO+Esj~4dbWAEPSQ}tFDk%<}$F^x1PwV|W$k@Q$ zNc9iaQp;RWx1?1dUR`HuYUSyGwr(N=2G6>|A7A;u11$K7S7iedUlSR=c`8=!A}d5f$&nf%3^sGgQj+ej2FcDi72f=>QeJwAM1T=g;|!D4`$Sy$^O zHssIt$ho@sM-o8LC1}<3`$6a*Y=}!Za3h%P4a?FWevUtPm|0lj=1=;-Of4zWgBzf_ zCF<`P@@)xI&CzAL06Rgsuz8Bm%*0TPXDEIUBW&(HKPU|a1$}b}+WsNNjO!Gs>oh@p zApWNo=y%@`RHYZK|Ii@v!7@#%s`hti_h4X?3p_0QI2n;b=SgKQeF6%SV@L2!$}K<9 zzTAu(Zjjn|lz57vpg0W*0D~G6T&?udSO&G>)q9^6V4%=#NHp3F1raQK0IG-UwyAVDOoB;7vA_ib|2^vbt^4n0uN*dWS6)T8J%{(4c=XLEUeJy?i^ zHs!D+{SEJMh_&)cs^Y;1RkmL-jUf~*4eCHqGNr(I-m{_2?~Are~LgE$Jd9UN&}h>sH)CIC%7*d1%(9S=__oCj$c-vWbBuGF)1$X8+WgZ zv^u@4UH=r-9YE-l*!&laMYuV3e|U$RSv5HFM#g$XN?=$V2(HgYjh({Dvu~n(PrwiP zeIP8xkW##N>o#fDbz@?g>W8)W`u=Z@64!7abwZ~TF7^rWZp+sy5-Y8%zYO1^NRbO@ zIZb}-n?cELf$l{qmK>pV^}g-s)Yv}88>8!+<&j{YkKS>)dXs;i#{Ekhaq7XjY~H6g zR_B9RKgo1RHSKleVALa&;}CFE?Mg;_yp_&sxkE*XRX_FHL)5|1KC`CA1WL*;@-n`m z4ue0)Pn+j@Vn4m`1$!03x#EE%uvu66rW-ER$E z+$SV~kAs6RqmE~h{K8$}FvVWYy8O;sbjg`P+14qnZAg804Gb8=n{leyjqrRA=Zxu# z4N-()?BFM|~xBZ%Jyi8wm*kV7ZT%k=- zhr4us1lt=4%L~cT zCV0y+!<-6D4!Uevuy513fSAA_T@rFUMR0<+p54etTWSsk5ac(mf~hxg^xK0*MDM~B zI9TmmKhVFO*E#;+e76{s5L7<1mo@BAV1LBrIGB3=U-^dAo0j zory7KfnCgPz`rx|U*Fl7cdpb-y9v?0085adJ^g^*bVn(Kw{tDnE{5-n%I(J5n_%km z=tq3#BcU)i-ckoJ)lq*>{z%bN zWo_f1wu1{15eF&mdsNrfW!1HHD;V*z>q66fYphTUdvL@3x+dE~3ynCc^$>?9!`46T zK2!3PMIrIp^5VHi#BdmqJ#Pkmq5NQeX+3zugT2@}>cfI4$JV<~6L;>~jh}wlYuL<~ zm!Nqj;MZAAUaA_GM`7T=?*e%%xk&;g4hMg+eOs0-`r)&j-Dt`56F~XWiM`kEd;b=e zLmP-!-`Q1K+GDkGK_WNGTnw+pI`HN&zcBi3m#h|8Vcqe_2MKPrUg@Hr=;P*m*^0M& z-ER(LcwpHv{PH1VYQAZQvy+XGV(PRKrN*0T=YI7&l<6~E%1Rij6g*p)!~UcO4-8(J ztiOt%F%IgB_cpwA3Np(cAZ#liYYU{^?>_^F5?Jmn$UpS;J=h%aYTCCp?_a)6478Nz zPa*XM+bY0cCoOc}7Cg{wMRnj@p|fcMf*$8AoB4R)P28aRnrgPT*OWlYGaFXI>;F!s zQYfaiSqTdkT$$DQOLv|Vq~!qr!&%d2V{`4JAo#}}V{B|p%W>);35?pI;2BB<>abcf o)zCVX#QZMPG!{+Qy5_D8Jego~e0U(=kB~m#68k69-?JT)OiAx|h$W2ZRfp|IOp$y6@AFBwym@gG_=@C*+ z5j}#Fm&c)dx_i>&rTJMx(Pymwf1f;&Vpun96j^RkH0<4>{bf8(s1o}@e2~itOM;jQ zac_YzH5TGv08l%Ld_p3`Q4sSKxhX7&T_LW|l7^>190>6pfg)0g#{qzu6bq8mAU1NoLU$5C07=b0kIRrEdoAU88bVGA4~HSl|0S>;4~gTGz?;B2hJ4A z*~x>rTvm`2rnVEmUMvWSRqG;9ayU`(5IaEZz!ya%s^=lZNaXR#IpH^oV$ccbKn8@MK!vga2jsyTQ$ZV z)aVXdh~*BTfL{X83+V!gCV~#tNFlT^5B4E&Q~_z(5RcTNmXB9itG0nYXn)V3mVA{h zoME{SwuL~t7!<=1*^qCzG0wop!sd_1-~l*8B_)L%MZirpK3+98r1gX6O5b{hwa$dL zj`V)yiVdyeDJUg}-y-OtcyN7W(3-bUCU;Q!FMcjJQ#eT^RZA1t(`wZtrPAp_?xkgY zttCfI0R6_2lji|_uTImsVH@e~c;l37l-81ei0Y@deH_)ek$I!aB;F@^19cIu5-t-S z5Uv9{?0+V-6S^U~OSlJrw}r z{6(=ZVnL}ZV?U#pv7ND(@tpDCL;M&w8NV{x8CxOc3APG5j2*+8ux6|c(BW4zb_#1! zp}p8q_&e}7J0kltJ3^UZ+`%27q{;_#aO7SY=`(9YG?e^9Ynbyl`8_g+lxz9lSu}E< zk1GiO!!D)S(mZG+nlsId#-brKYxwh|1w&*@v!TV%j3G6W=12>rjT(`6>WGO3Gf4PR zJy2Vm4yi+#CRSA=4&+pFa0dPTtB>@Lyi|H79GM#k73PL;L=E{|?V^9Q*HWOY5X@4^ z%T(1ttdf&_l;1K{)q*3)WK|45V;j+r=tvABI)2bY3?)Vq!(s2C94C$;MnUYWnU3H&pXfQN@EGH4qQQnaUdZ(N5t0M^8uYLU`AZ^9$w5i$O@f zq(~~v7Rc!=cr)VD*VS?xnJ5d5Mw8L0 zXf`?%Ek?`GrRX}e2HlG`pr_CaXgk`0K0*62fN5bym^J2xF|iOV4$Hu@Fex?{tH7$T z8mt~xfmZAq)`9h6uW=%-kJE8C7@J5u1?S>3@wxaCd;`7&m_;ZjR1sHP-vY1>-t|IRyA17ZWKOzrk z=xEq$_-Vvx@HC1vmT7F)Xx6x-(WNnri4(YP!yD+IeVRLsP2Qw7A z>D<)m*VWhc(2dj0(_NywTlc(fw;oB)K`%^?r&p%8P4BecLw!u&RzF0atG`fxyZ%}I zE(4;0qXF9>$Dq>S8-t4meTI65;|x;`3k|Ccj~R9tVMY!{Y$K7;GNXe=H;mpGTNty9 z`NoTl>y57(zcd+T5^TaZsW91R(r)s`lx`Yknrphk^oZ$wGu+JCEWvD+*=Dn|X1${f zM){B8j;a`SaMT@h)ZE!T(R{Y~HuE;~ehW*B2n&hDdW+K*y_QCn!In9et1XXP_E_m# z1zHKMR$HC0dQ3N@v*;rFI{F!UpS8Jlq_x6&tMx_e0UJk~6q{0;eKz-PHEo%;S+=Wf zTWtI6tn4P*mDugEyJN3m&$JiVueEQrf9c@pkmj(+;fO=GqlqKivDk5s<2@&;Q;^e4 zry8g0qlu%LqjN`Z8hzOrb@p-=I9EGgazS0ZU4$;1T&}nhTzy@|t~IVV-6(D>w*t34 zZk_H%?lJDA?nm68j)-mrGUJMaD-|l+oc|>`XdNh0d?&<8w^{n>1K9)K* zeC)ijjbopUa~a1Uw|U$xFMY3xUW>e1y#Dm|@s@hmd-wR*`DFTR^ts72V8%0-FwglC zd?)zM^F8YO+Rxih?sw4dH-9((T>stv-Qyj{^T%%=|1iKNfD^Dapd*kTm>KwWU`LR3 z5GSZ6=%--YU|w)-@FUh}Rt{?~>*)l>1nGps6JCb+h0F;#8H$BQgjR%J4ATos3EL3% zAlxQAJA6-gUxZi0?1+<*gvjW~6_GdD7HlrNj@=jK6E!F5Of)4rDSAWnPchCh(wOFn z=)|art0vxywT~6Y9*F~S?6_5N_v0PoXU2b*Kum~Fs80AL(Ic@Wu{B9QX?oJ`q!-B( zl9wglO>s(5q_m`Jr%p+&OMRIZnzk~nW73#Ob0%F#H%k|$H)fDBQZs5Z`X`4?UNgCC zir19#DL1A%PA!~zewx`d(X?aJwWo8YAIczpuH`=A z1@l((diVkSmHbCp0a+`vy0ZhaS7rAIf&^89USWuEgYa2SWX_hHm$`AdJ9FQQ(nS06 z$a$H0O=3N9uJ}y8Wqx7)6^V3)_mEixw9>Dh@B+F&m%Fo!wGmU9zC0a}I0H*15>s8FO3a+0HAQ z*EK(4{;ma@3vw6ySjs3}S^CGqw1v%O7G?9x9)1z=#h!9nxwQP|BL78OzQn&2etB{6 z*v0D?zpLO?{7}iLtg3vwguCR2uROk5_tpEQSxYZ2^Io=jIdQpo`HdApD|W5aU0J;H z;i`$N8dlR+SFHYH&Ga?rtHxDrS*y8Lv9@Df%(}+)cI%g~f4f1jp}l%S^}dbf8y9bU zxrw*w>gM3h^;;~qRBn0mweag(TO+nM)Hu{sZ6j_g*!Iiz)a|W1m^y1L!wyO-@j_bB%C?47dr@;9O1G}gP-Z{26KuW~=wuh{?iK<0rP2cr+R z9AX}-|JMH7jfeFQS2Q3EMGbvN1V=g=(;KfeMK!fF`!^r{&i%WcN3D-mA2U3*?6~If zvg7Yh6rbonDLL7DD*M#Kmgy~bPft31{Y=7{i)W+Hp8G!h`_rwg))VIf&K*7PcfRQd z<_||McwcB}^J+W%qt}mzFM3~Wxa4!G@v`sb<}2f`9KRZL_0+Y{Yu{gIU%${E+kWLn z%8gq$r`+tg#k4eZ_s9`&AFjAJqJ7^uP9Xcy}D@4DD?DDe0%X z54jJY{4D$VZCBYZ)L*I|Sv{)j_Ut~|6W(+A@#M!{Pb5zUddq*+{dMD0r>Eck7W`XV z-=w~-XVPcye_!(4^!d&|#{JRKAK(ArMc#{nmldx}U+sF$eBJsc?aiZsS#L>i*Zn#A z&*pd0@9w?Nd;k952@m*UPUK>R0000WV@Og>004R>004l5008;`004mK004C`008P> z0026e000+ooVrmw0000uWmrjOO-%qQ0000800D<-00aO40096102%-Q00002paK8{ z0000100031paTE|000010003100000L?SqI0019QNkl^$Nm96Z~&bBLN{>IvWz9B_AqTXbH5S3B|b))Y1RZ+2YTAn5M%qAIXb0FK%FD(rsol>271W1@(I^^$h95*-(dcqfHjn=q_01K2jfXFf0PM^~P zdXH9MVsI(Ag8@n~!_T0ZX!_m`r1M_-g5IJxX&IJ^t^?;Yz(6$oi5T+xIGnb%^clTI z^J%5K_6tsCfR1z+ol3`Hk>})EX7Xhq#rNh^OEzGJp&U458a`*5<9I*2kuao~5ZS+SFz=mHe9?bPcWcP2(ro zVmIAQL**0GZ8;XxY=}&fMDg3-)pP}Qaa)tgtnVm#7)lp@YxZ<}+vs&V+Mkm_Cvg8- zUpIb|5q8mkJN|@2X18z8YZ64H(V+RiqritW%Rl2l2fC6reTRCoANc+6Ub>ZfO7Cb6 z%y2ZeKtbQvX7{%t1uYQRa~c?-GwDVeUH}}UQ21_uqQ*X`c7B7u4b%cf@F?s6;!q9` zx2uVlLq^vb>ZDzuINk}rLI`WBF%CRb2=y{M7@(4VLzh7(-!5o^e*f1{=-xz|q1e3> zO&Q)^b}o>I@=7^Gr%~y4N4u> zLlm0)>u?gk410{tV1YXHax>5YDyMxQvKdWdp^Mnh76x8S*V4OYD$W1aY6du+{s$U8 zRze(F`zz^VXy~rORigz(m0%3_X(c-#|U3D-c9 zx7#A@;`DbIxVapL(W{n_rws%Bz37MC3r?RhD5?LN-nU4k{XV7}7sC{oPstb#GxOL( zFVYXOHg^(KfEoV;`=HF4%D7vF5zeJB3zl;-NRXb#TDlYZf=;jp(rT2!m=YF3!jN8L z^Vi!TJ#itN1A{5^$ft5>gB9MjFa&ivbjNb^70DCAUb?hE){lbJ4$~!4SIANN5F|K2 zur~I8Rt_7c=OBSdv9H;ydWSv^BwgoTE5(_46I(5xNdX8D-x3~Rw_3sC{p&UD>R^;T^i6DgGTF#ue7%S;Q z9L9dvVisH+ie;gU4dQ;R1su8@yhzH@ua@TE7}kr>0gKr+62`|Sy4s1G!n38=^L<3$ z_q1-@NK9?!$ALPqlEdIQ31XiHx(ojOybfjb6A2oTdthzsAUH&Vg7+HwffENdOQ<{n zXNYEZN?Tx0;1C#$Ls_%vyabIKKS6h#_M2TWFNc3b2S6qL!({U}LJ`t`22vq9&-7IA zR^g}2Qo7${^KYXcd3xEGtB+2`8Hc&C^Kt5!s{rfYU2SqryR>kc@YWN@KnVk2C1HjI zV$dKijF;4QZK(dstAM9iVb88$Suei5@wYzrHqCTk-MX?K4r#sH1b7>L+dS2q=P ztO>p1^)Owt3Cid(6TSbsLT+1ZqL6qo(@ZR^=b7<9$QhE)gR?_1P&8WZFlnqQR&wT7 zrC5L}2H;8rv5wF@C~=G^ss$R5!vsgjQ*g|5XC|V??~EIVj>hU=OgTFW1JRobX7E@9 z)6TxI9~?r1VB^~p!skxy;o}lf1dUV5>XdD0e&el?S(|G3Tw9d+NcLSBcJE?ye;lS< z_84zw;#`CVKMA(B^AP5##xg5KQJTp9?q#bt*B1y&t)8;FYMJehyK-3VT?N(bb;5O) z-8|Ok7llf`g)j(?7sQZw(^jcp5mv;%MD!l(>~_VdV8>S*tUDx*Kzb*J!ZHMVvI}}b zq4YT)`5jib$Xu&b$EORrdDu?J*wp%i;fi93=jVBKlV?6@pwq0NcV|I0rY8Ea71dGY zITEfS)(ehMnFMtI-3Qp^NQaBDffFIk?KX&g2gBLwW}(`NVC4L7Vpsu5hQ9E+C4%^C zmizEfoXyM7wim(9x!OUnb|4M=06asnRA;?R?X(f6uFNSI;U!) z^E2B^^4(B+(6nZ)EOI+9pK65FmINUfY=|KEfQ4p^C5XT!Dw7bw#f{%QBy06G9=9uN_IV+nBRePhG?}a1#DN>L8VbPjFRAgK&0<@<(uV3 zq7rJ20LKW}oIQ+5LoN)ZzsM76%B`A9avKT1OL;-97G44$)m*29D`;-sl6VRF(F5=f zZWXk_xP3phLWLye0A+P!SjM5q&Wn-|hK|%T`67|28Q@^H9#0&7b(=9P45sRa2;1_# z<=4V#<9hry;_q$*l2by+DKSml0c}vPn`>lHPeW%aoNg{iyEk-sBYV}oj9IOG)hLA` zxy*UEo<65XU_5as^)f3S$yarY-}4XW?&j902YcZagOg~P5Q3tId5?Mt25LrFsoN2> zt}wBMWKt!O*EqH%@oE^uuwXUDk~ziY!@V|DC$k+&JjbEKKw8Ztzd?DEHa4oK70~S0 zYEaIz8t4m2(}_{lu+R^R+2^O+6B}ot^(=P-ykdt+eB5KbJK^t4q zI@|r-EVeqFVWY7K+y1|vrc1>Ca3Kw(WaG!7zj&n&98XrzTg*=Ss!JPY_X#=%`4mL)ZGnw137+r2GV?(K~VxpDm`EfW~yP3KfD#Z(l2E*<- z9sB&(KQ)4Oi2lILb`uRYlChyQBTab8*+&0vs0^1%2&qUFkgGOXS!gtA%;IoDF5FWvpo9{Lvxfk=L}nqs(A;q<&Xj%!1# zO6Vu%4rs}GF161?o_^&E^kybg8t`$xMe;!A%2M70P);u~Sueo=U(w_O5#I^LRx*Q9 z*5uO?KAyR(SW5#X(P5U5#{X_QK~ni{&4znqewj9+$u+?Km{PPjy$7+4448n^dOkcx5Ai?p*cVHfT3BPLs}=ZR( zGqZ`pL&yf^H{MNN%{0cT(pqmR4A7nF27U`P>t(=^Y<2R*FmwnYNr6`8GO#b)=Bq$q zfS%0QQ>zd+$UH=#yu}kHw_@|R$9%ya%3(QcI;_xg-=Q!-Kdqr52boq#3I5QJt-ARc zLRJKjPJz`p!8H!WS|h!}097noz*cAu%Yd=Wt!JG68ub4x!f%BZB?pG6$6SR025|Dg z25=)QyE^nbwe`@;W;oNM*!!@F3qVZ)UUw{02b2ioQAc&Y zx=&&V&>#bburi6#JFN8nNxXwKAs4G9K1x`{4h(w5>EGaf%xnzcIP(-RhWG%JOqa?) z(A~f4=}}!uQ-zmVIR0u$i&#+cV+4kfFlL) zH}SlHeW{uOI(Y%F00)B07hadBX5D6M%mx z(2_mnhpFB_*aw)xuR=7F3SoHY3&1}VXi_skU~T80<|j<}S)PT$fwrxm+8-X-R8v4T zOS9Zp)bb#*b?Om-XIkJvn)nK(nruN(5iI>$)Fy+vM2W#EL3Oq~SvR%bi#Ux_YpClb z#`7qg($tzRHAew1eHDXJ_#rICaMg;h2y1{Q1_KbH3Op&HDdy0BFo+&QB+(bM&#@Ta zdo^hsA-i8?FhCp;Q?o!}fCh$xh%ihGWXKMeXVoM3Z3#TxKASsv;S>@DSHPhQQA*R9X)aSt!C@`G032f7Hv#X2%JJoB$oa7zJDpoJ67$RTsf=(3E zC29u;dfEHp`B+w0Y}6Wa6$YqbI$*0}dKT1ciw~H~PlA__bM!Lv;qzh$)H$#N;k8wu zFhG=6sh;P0Pzfh7GGG(E%gm+-(Te4Tt7R7Mxa7T=tFcY!>MBqefM_M_NH{_hRr!cK zh{5-7mU=?oY(~(}C7eX$EyfiIMre8e&QbFl6WFr&*FV{0j~I9fOZTZ-MVkpUg{?pAWEO{fQt%Wj_f1xLR&Z1g#z7A6Y zm8&Fajs3k#8uh2+jLKMgYl1E5G#Kw$fF@t@t(OWntr+^l=Wd0bn>v2H>ya(nJ zf${VgrYJO9CI1`1#QoV$aIJaGJ9C=yZuau&$-G!42lZ5OVfM%k#<1TT!ney zT~Audq}Mh1u|9w~tHkMkDcXTb%_4{gs@KH%o-d`t@+0T56tkgAk&iCv@An#!8HDK1 ztW4twAkB+5l&cknBDeG^bFMeQg}t93f~k)~pExZvc7A&vj)gcGx6y?X>Hbq34s%LR zPrH|{V?{lXSnUF2HH5iii_;uqwd7~~GIJ@Cs~%nG6=4R5gLR*Rk%T{h+f|zA`^E@U zjL?kf{VM-;t|ywBsieG)U4AAz zG}2u9p41vSFSA)}smZ;@kr>9FT{cKM7fjT#3tJqO$pFgTX1dA43gks#aW&4lo*140 zlqM*mCz#pC>6ga&%RtJpCUyfUGOVQENM%d|6}KtL1okxf3D2nRTpSss2x;W%GiegR z1P#x|;gFGX^QBosx6x$JtqE>p)8-Z)Yxbq(%p#(ak7gqn!eh)j=rO}CD4ksbad8ok z2#!rXoIORem+2w8gH8O880O_hXxj-}I=v?4KaWB8_ytTC9ecpzPY~Yz;!Y;ReA|Zo+wBB+ zq*=z)P&2|VGcjoMY7wMPr+}dapjOz}eXuz_(nt%XrRfD%GYiu0Wn8X@6N#gl>k%2{ zdL@rn=svYIurcJu!GTLUFB!Ss%v4i0R+Hml&}gLeAWb#}nvK~~YmEQ|S3<+sn*Uwk zJLol0j??9abx>HJZ2T}oHy{7Kc%N=%YI0-vUw`seI1>gk%z3C@$><^F8S)} z_4loGzB%&qkA@YJz9(5MoWx-ewx(WhGP(GDY}Av2_7p%E%D=OZFDm_qe&>HzYFxbYC6JXxq6=$(~lw4klRnZn%g2dtEQPk z=W_q#9Y5-|x90OH^hUq}c_|QuXx=dBO#w;3^!+eRZpj; z8qD}rzC~anr|mfEonbuFw3OqZl(azhvLr44%*zJoGR?!9;1ir=l)#x~apr4J-_51F ztfX@#+axjBKbq;Pf)KtpSoT*q&sYIx_{q9>_wPzkAIfU2V7=Bl1}lN?dM|T6ucM#Q zV>we;_cDS5>VYr~84d#V#}R2)j0+{6^ETWJ>HiaAL^RF-A^7IIL97tS1TLq)34SZ< zvoK@^UBCc65O<^-q#GSEtra_l6;&Q3Jc2NsoTx8?G_Ay`yyzgh1KI@v=u_Yz zdP|tL%j`3RJzPLpG|4jCedftWzp>SCM$r4h&A(4<^{=jku_srut%s8g5Qky&nZ^q7 zS*p=+;*_Ei_v%(jUYiXPy`1f!ARVEd^h1N?_$S#!Y+BQ4#Jip^xG*k*vX$x!#0)ItF*#osav6{?wE2z*t?rKz>2|oRKywTeR1`^#1zTahlyp~b zpg_+gnQUU$pP=4X2%+f!I6_cgFvS9m@M0@=zTg1#g{lyyADO1wE@{zPgiuKT=rl;2P(p{#TKL+QQj&p}yOt(N2Mct^}C#w*Bz^f)- zN78%=6pGWIaER?dC^Ib;NHEKOxQ3hHK>W;A=|Cu}?v&E}bD_=PQ0OFRLZ%)iwqU4~ z6Oz&iq$;DcVIHH#Qsl|gP-Jm1bcRPt5wx_vSx7&yRhQTrvW93XJ!?|hm!i%yMm>I5 zgN%_}J7b1QRoL8BGu+i4>uQs)(R84`R{N?3!KF`d!I~gMMp)-A870cT*@MYu5q$*1@GY2$t$|`JK!?+z z2*Q3a8pldi%sPxLb09yo4XkAV1&vd&l^J00tbZqv6XW1*?M@}SpxOIinOOyc@{Xh7rFQVrN( z5B}ESt{%*=AM6kVWkWb^D1k0gM+mVM)A8=`XjF+K*Uq@Na+ud@)LOa+rw6rKue|c? z1kBXQg-&7rwt)d!p~sX68duo5Buf9(IclC(vRi*x1l2o)37pXEi8?gU{qSMp6DYza z%8V_nbDB+7O_so9-cPQqz~}?$PRz=(23cn{GHWT$iy8p$;>{h9hK?EojeaAit9RXcnD;J%ZE_X#8pjeG!FD!V8F7unbJ> zcyKBMD1_@kld*0-mWJ7WI4j<4)d-I<53~MG@ht59(#Z^vphQ1}tveB8!2o*+!!E5B zN}{j955P)8$|vmXt@^p(HeUMQly1>1mS*u%IE+`#||vX($6 zcPbqPwzd zPTm*83RqH{?m{t;`xqcesgBU283R@rk40iHTYTrVK#yTPEvHY>@7F=g&=cTZ21t^> z1HvT^LBySr_`eEDot-4_85*FfxfMNrHJW}cuD)@@<}OK`{D0lg04W?hLaVngVuKCF z*l-|z3Nw^rwZOx%1%tZM=+#gv--022BN}}NmUl)J%Tsl6%@vP0Zb2*5uHoMeis+T? zzn)OPsKBoSPUFh3ZiuuqMI2g5(RMZQCMc`cq0x82f%_i(YG`k}0(qNT5EieeHyJ>S z9wBTX!)SQrpJEe0?L&Fu#2^M%P%H%k2q+LxAfP}%fq(-3p}_wGAqGs!7*7t8 literal 0 HcmV?d00001 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);