diff --git a/benchmarks/chiliz-rpc.yml b/benchmarks/chiliz-rpc.yml new file mode 100644 index 00000000..bf754b6a --- /dev/null +++ b/benchmarks/chiliz-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 190 + +slug: chiliz-rpc +number: "190" +title: Fastest free Chiliz Chain RPC, live no-key endpoint latency +seo_title: "Fastest free Chiliz Chain RPC 2026" +seo_description: "{{best_name}} leads free Chiliz Chain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Chiliz 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: | + Chiliz Chain (chain 88888) is an EVM-compatible sports and entertainment blockchain powering fan tokens for FC Barcelona, PSG, Juventus and 150+ clubs. CHZ is the gas token. Four keyless endpoints are probed continuously: PublicNode (chiliz-rpc.publicnode.com), Ankr (rpc.ankr.com/chiliz), Chiliz Foundation official (rpc.chiliz.com), and dRPC (chiliz.drpc.org). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Chiliz Chain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Chiliz Chain endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Chiliz-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"chiliz\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Chiliz Chain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Chiliz Chain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Chiliz Chain RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: PublicNode, Ankr, Chiliz Foundation official, and dRPC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Chiliz RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Chiliz Chain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="chiliz"}) + +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: PublicNode multi-chain gateway for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="sgp"}[1h]) + + - slug: chiliz-official + name: Chiliz Foundation + tag: Chiliz Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Chiliz Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chiliz-official", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chiliz-official", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chiliz-official", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="chiliz-official", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="chiliz-official", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="chiliz-official", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="sgp"}[1h]) diff --git a/benchmarks/cronos-zkevm-rpc.yml b/benchmarks/cronos-zkevm-rpc.yml new file mode 100644 index 00000000..819a5429 --- /dev/null +++ b/benchmarks/cronos-zkevm-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 193 + +slug: cronos-zkevm-rpc +number: "193" +title: Fastest free Cronos zkEVM RPC, live no-key endpoint latency +seo_title: "Fastest free Cronos zkEVM RPC 2026" +seo_description: "{{best_name}} leads free Cronos zkEVM RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Cronos zkEVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Cronos zkEVM (chain 388) is Crypto.com's zkEVM Layer 2 built on the zkSync Era stack, distinct from Cronos EVM. CRO is the bridged gas token. Three keyless endpoints are probed continuously: the Cronos official mainnet gateway (mainnet.zkevm.cronos.org), dRPC (cronos-zkevm.drpc.org), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Cronos zkEVM. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Cronos zkEVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Cronos zkEVM-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"cronos-zkevm\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Cronos zkEVM RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Cronos zkEVM RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Cronos zkEVM RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Cronos official, dRPC, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Cronos zkEVM RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Cronos zkEVM RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="cronos-zkevm"}) + +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: cronos-zkevm-official + name: Cronos (Crypto.com) + tag: Crypto.com official Cronos zkEVM public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the official Cronos zkEVM no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Cronos zkEVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Cronos zkEVM endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Cronos zkEVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Cronos zkEVM endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="sgp"}[1h]) diff --git a/benchmarks/ethereum-classic-rpc.yml b/benchmarks/ethereum-classic-rpc.yml new file mode 100644 index 00000000..6add2964 --- /dev/null +++ b/benchmarks/ethereum-classic-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 194 + +slug: ethereum-classic-rpc +number: "194" +title: Fastest free Ethereum Classic RPC, live no-key endpoint latency +seo_title: "Fastest free Ethereum Classic RPC 2026" +seo_description: "{{best_name}} leads free Ethereum Classic RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Ethereum Classic EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Ethereum Classic (chain 61) is the original Ethereum chain post-2016 DAO fork, continuing as a Proof-of-Work EVM network with ETC as the gas token. The chain upholds code-is-law immutability and has a dedicated long-term holder community. Three keyless endpoints are probed continuously: dRPC (etc.drpc.org), ETCDesktop (etc.etcdesktop.com), and ETCMC (rpc.etcmc.net). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Ethereum Classic. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Ethereum Classic endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Ethereum Classic-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"ethereum-classic\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Ethereum Classic RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Ethereum Classic RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Ethereum Classic RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: dRPC, ETCDesktop, and ETCMC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Ethereum Classic RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Ethereum Classic RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="ethereum-classic"}) + +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: drpc + name: dRPC + tag: dRPC public gateway for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="sgp"}[1h]) + + - slug: etcdesktop + name: ETCDesktop + tag: ETCDesktop community public RPC for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ETCDesktop's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etcdesktop", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etcdesktop", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etcdesktop", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etcdesktop", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="etcdesktop", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etcdesktop", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="sgp"}[1h]) + + - slug: etcmc + name: ETCMC + tag: ETCMC community public RPC for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ETCMC's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etcmc", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etcmc", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etcmc", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etcmc", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="etcmc", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etcmc", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="sgp"}[1h]) diff --git a/benchmarks/etherlink-rpc.yml b/benchmarks/etherlink-rpc.yml new file mode 100644 index 00000000..0edd3e16 --- /dev/null +++ b/benchmarks/etherlink-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 189 + +slug: etherlink-rpc +number: "189" +title: Fastest free Etherlink RPC, live no-key endpoint latency +seo_title: "Fastest free Etherlink RPC 2026" +seo_description: "{{best_name}} leads free Etherlink RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Etherlink EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Etherlink (chain 42793) is a Tezos L2 using Smart Rollup technology, offering EVM compatibility backed by the Tezos Foundation. XTZ is the bridged gas token. Four keyless endpoints are probed continuously: Etherlink official (node.mainnet.etherlink.com), dRPC (etherlink.drpc.org), Ankr (rpc.ankr.com/etherlink_mainnet), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Etherlink. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Etherlink endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Etherlink-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"etherlink\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Etherlink RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Etherlink RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Etherlink RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Etherlink official, dRPC, Ankr, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Etherlink RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Etherlink RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="etherlink"}) + +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: etherlink-official + name: Etherlink Foundation + tag: Etherlink official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Etherlink's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etherlink-official", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etherlink-official", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etherlink-official", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etherlink-official", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="etherlink-official", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etherlink-official", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Etherlink mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Etherlink + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Etherlink mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="sgp"}[1h]) diff --git a/benchmarks/fantom-rpc.yml b/benchmarks/fantom-rpc.yml new file mode 100644 index 00000000..5c3668e7 --- /dev/null +++ b/benchmarks/fantom-rpc.yml @@ -0,0 +1,181 @@ +# OpenChainBench. Bench № 184 + +slug: fantom-rpc +number: "184" +title: Fastest free Fantom RPC, live no-key endpoint latency +seo_title: "Fastest free Fantom RPC 2026" +seo_description: "{{best_name}} leads free Fantom RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Fantom EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Fantom Opera (chain 250) is a DAG-based EVM-compatible L1 using Lachesis aBFT consensus, delivering ~1-2 second finality with FTM as the gas token. Five keyless endpoints are probed continuously: the Fantom Foundation official gateway (rpcapi.fantom.network), dRPC (fantom.drpc.org), Ankr (rpc.ankr.com/fantom), Thirdweb (250.rpc.thirdweb.com), and Blast API (fantom-mainnet.public.blastapi.io). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Fantom. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Fantom 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) so the leaderboard rewards sustained availability rather than + fast error messages. The cross-chain view lives on the parent + `rpc-capabilities` benchmark; this page is the Fantom-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"fantom\"`. Provider coverage at launch: 5 no-key endpoints (Fantom Foundation, dRPC, Ankr, Thirdweb, Blast API)." + +findings: + - "{{best_name}} currently leads free Fantom RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free Fantom RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` 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." + - q: "Which Fantom RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing at launch: Fantom Foundation, dRPC, Ankr, Thirdweb, Blast API. Every listed endpoint was live-verified before inclusion." + - q: "Does the fastest Fantom RPC change by region?" + a: "Often. 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 Fantom RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions. Responses are classified so an endpoint stuck on an old head or returning errors 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="fantom"}) + +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: fantom-official + name: Fantom Foundation + tag: Fantom Foundation official public RPC gateway + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Fantom Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="fantom-official", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="fantom-official", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="fantom-official", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="fantom-official", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="fantom-official", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="fantom-official", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Fantom mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Fantom + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb chain-ID RPC gateway for Fantom + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Thirdweb's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Fantom mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="sgp"}[1h]) diff --git a/benchmarks/haqq-rpc.yml b/benchmarks/haqq-rpc.yml new file mode 100644 index 00000000..bd4ba78b --- /dev/null +++ b/benchmarks/haqq-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 188 + +slug: haqq-rpc +number: "188" +title: Fastest free HAQQ Network RPC, live no-key endpoint latency +seo_title: "Fastest free HAQQ Network RPC 2026" +seo_description: "{{best_name}} leads free HAQQ Network RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public HAQQ Network EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + HAQQ Network (chain 11235) is a Cosmos SDK EVM-compatible blockchain focused on Islamic finance and halal DeFi, with ISLM as the native gas token. Four keyless endpoints are probed continuously: PublicNode (haqq-evm-rpc.publicnode.com), dRPC (haqq.drpc.org), HAQQ Foundation official (rpc.eth.haqq.network), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to HAQQ Network. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public HAQQ Network endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + HAQQ-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"haqq\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free HAQQ Network RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free HAQQ Network RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which HAQQ Network RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: PublicNode, dRPC, HAQQ Foundation official, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest HAQQ RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is HAQQ Network RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="haqq"}) + +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: PublicNode multi-chain gateway for HAQQ EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for HAQQ Network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="sgp"}[1h]) + + - slug: haqq-official + name: HAQQ Foundation + tag: HAQQ Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to HAQQ Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="haqq-official", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="haqq-official", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="haqq-official", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="haqq-official", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="haqq-official", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="haqq-official", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for HAQQ Network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="sgp"}[1h]) diff --git a/benchmarks/hydration-rpc.yml b/benchmarks/hydration-rpc.yml new file mode 100644 index 00000000..423f4894 --- /dev/null +++ b/benchmarks/hydration-rpc.yml @@ -0,0 +1,178 @@ +# OpenChainBench. Bench № 186 + +slug: hydration-rpc +number: "186" +title: Fastest free Hydration RPC, live no-key endpoint latency +seo_title: "Fastest free Hydration RPC 2026" +seo_description: "{{best_name}} leads free Hydration RPC at {{best_p50}} (chain_getHeader p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Hydration Polkadot parachain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Hydration (formerly HydraDX) is an Omnipool-based DEX parachain on Polkadot enabling single-sided liquidity provision across assets. HDX is the native token. Five keyless endpoints are probed continuously: Hydration's official gateway (rpc.hydradx.cloud), Dwellir, Helikon, Dotters Network, and Parachains Network. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Hydration. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Hydration parachain endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Hydration-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\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "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=\"hydration\"`. Provider coverage at launch: 5 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Hydration RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free Hydration RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Hydration RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing: Hydration official, Dwellir, Helikon, Dotters Network, and Parachains Network. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Hydration RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Hydration RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds from each of 3 regions." + +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="hydration"}) + +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: hydration-official + name: Hydration + tag: Hydration official public RPC gateway + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Hydration's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="hydration-official", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="hydration-official", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="hydration-official", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="hydration-official", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="hydration-official", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="hydration-official", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="sgp"}[1h]) + + - slug: dwellir + name: Dwellir + tag: Dwellir Substrate infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dwellir's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dwellir", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dwellir", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dwellir", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dwellir", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="dwellir", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dwellir", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="sgp"}[1h]) + + - slug: helikon + name: Helikon + tag: Helikon community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Helikon's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="helikon", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="helikon", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="helikon", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="helikon", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="helikon", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="helikon", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="sgp"}[1h]) + + - slug: dotters-network + name: Dotters Network + tag: Dotters Network community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dotters Network's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dotters-network", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dotters-network", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dotters-network", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dotters-network", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="dotters-network", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dotters-network", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="sgp"}[1h]) + + - slug: parachains-network + name: Parachains Network + tag: Parachains.network community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Parachains Network's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="parachains-network", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="parachains-network", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="parachains-network", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="parachains-network", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="parachains-network", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="parachains-network", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="sgp"}[1h]) diff --git a/benchmarks/kusama-rpc.yml b/benchmarks/kusama-rpc.yml new file mode 100644 index 00000000..a69eb843 --- /dev/null +++ b/benchmarks/kusama-rpc.yml @@ -0,0 +1,204 @@ +# OpenChainBench. Bench № 185 + +slug: kusama-rpc +number: "185" +title: Fastest free Kusama RPC, live no-key endpoint latency +seo_title: "Fastest free Kusama RPC 2026" +seo_description: "{{best_name}} leads free Kusama RPC at {{best_p50}} (chain_getHeader p50, 24h). 6 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Kusama relay-chain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Kusama is Polkadot's canary network, a live production relay chain (KSM token) where new features ship before Polkadot mainnet. Substrate-based, ~6 s block time, same Substrate JSON-RPC wire protocol as Polkadot. Six keyless endpoints are probed continuously: PublicNode, OnFinality, dRPC, IBP Network, Dwellir, and 1RPC. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Kusama. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Kusama relay-chain endpoint + that sustains continuous probing, 6 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 relay-chain-scaled staleness gap (40 blocks). The + cross-chain view lives on the parent `rpc-capabilities` benchmark; + this page is the Kusama-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\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 relay blocks behind the cross-provider tip), `timeout`." + - "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=\"kusama\"`. Provider coverage at launch: 6 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Kusama RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 6 measured providers." + +faq: + - q: "What is the fastest free Kusama RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 6 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples." + - q: "Which Kusama RPCs work without an API key?" + a: "6 endpoints sustain continuous keyless probing at launch: PublicNode, OnFinality, dRPC, IBP Network (Kusama governance-funded infra), Dwellir, and 1RPC. Every listed endpoint was live-verified before inclusion." + - q: "Does the fastest Kusama RPC change by region?" + a: "Often. Substrate-ecosystem infra concentrates in Europe; endpoints that win from Amsterdam can lose from Singapore. The region tabs re-scope every number to a single origin." + - q: "How is Kusama RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds from each of 3 regions. Responses are classified so stale or error endpoints are 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="kusama"}) + +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 multi-chain gateway including Substrate + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to PublicNode's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="sgp"}[1h]) + + - slug: onfinality + name: OnFinality + tag: Substrate-native public gateway, Web3 Foundation grantee + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to OnFinality's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Kusama relay chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to dRPC's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="sgp"}[1h]) + + - slug: ibp + name: IBP Network + tag: Kusama governance-funded infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to IBP Network's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ibp", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ibp", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ibp", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ibp", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="ibp", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ibp", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="sgp"}[1h]) + + - slug: dwellir + name: Dwellir + tag: Dwellir Substrate infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dwellir's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dwellir", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dwellir", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dwellir", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dwellir", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="dwellir", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dwellir", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="sgp"}[1h]) + + - slug: "1rpc" + name: 1RPC + tag: 1RPC privacy-preserving relay for Kusama + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to 1RPC's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="1rpc", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="1rpc", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="1rpc", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="1rpc", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="1rpc", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="1rpc", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="sgp"}[1h]) diff --git a/benchmarks/oraichain-rpc.yml b/benchmarks/oraichain-rpc.yml new file mode 100644 index 00000000..36fe5517 --- /dev/null +++ b/benchmarks/oraichain-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 198 + +slug: oraichain-rpc +number: "198" +title: Fastest free Oraichain RPC, live no-key endpoint latency +seo_title: "Fastest free Oraichain RPC 2026" +seo_description: "{{best_name}} leads free Oraichain 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 Oraichain 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: | + Oraichain is an AI-focused Cosmos SDK chain featuring the ORAI native token, an AI oracle network (OraiDEX), and an AI data marketplace. It bridges AI computation and blockchain, enabling verifiable AI inference on-chain. Three keyless Cosmos RPC endpoints are probed continuously: PublicNode (oraichain-rpc.publicnode.com), the Orai Foundation official endpoint (rpc.orai.io), and LavenderFive (oraichain-rpc.lavenderfive.com). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Oraichain. + We measure the round-trip latency of a single, identical Cosmos RPC call + (Tendermint `status`) against every no-key public Oraichain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Oraichain-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: Tendermint/CometBFT `status` JSON-RPC call. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable latest_block_height), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "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=\"oraichain\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Oraichain RPC at {{best_p50}} (Tendermint status p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Oraichain 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." + - q: "Which Oraichain RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, Orai Foundation official, and LavenderFive. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Oraichain RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Oraichain RPC latency measured here?" + a: "One identical Tendermint status POST every 60 seconds against each provider from each of 3 regions." + +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="oraichain"}) + +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: PublicNode multi-chain gateway for Oraichain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint status POST sent every 60s from 3 regions to PublicNode's no-key Oraichain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="sgp"}[1h]) + + - slug: orai-official + name: Orai Foundation + tag: Orai Foundation official public Cosmos 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 to the Orai Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="orai-official", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="orai-official", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="orai-official", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="orai-official", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="orai-official", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="orai-official", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="sgp"}[1h]) + + - slug: lavenderfive + name: LavenderFive + tag: LavenderFive validator and RPC provider for Cosmos chains + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint status POST sent every 60s from 3 regions to LavenderFive's no-key Oraichain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lavenderfive", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lavenderfive", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lavenderfive", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lavenderfive", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="lavenderfive", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lavenderfive", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="sgp"}[1h]) diff --git a/benchmarks/peaq-rpc.yml b/benchmarks/peaq-rpc.yml new file mode 100644 index 00000000..7a7c34f4 --- /dev/null +++ b/benchmarks/peaq-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 199 + +slug: peaq-rpc +number: "199" +title: Fastest free Peaq Network RPC, live no-key endpoint latency +seo_title: "Fastest free Peaq Network RPC 2026" +seo_description: "{{best_name}} leads free Peaq Network RPC at {{best_p50}} (chain_getHeader p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Peaq Network Polkadot parachain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Peaq Network is a DePIN (Decentralized Physical Infrastructure) parachain on Polkadot focused on the machine economy and IoT connectivity. PEAQ is the native token. Partnerships with Bosch and Fetch.ai underpin its real-world machine data use cases. Three keyless endpoints are probed continuously: PublicNode (peaq-rpc.publicnode.com), Peaq Foundation official (rpc.peaq.network), and OnFinality (peaq.api.onfinality.io/public). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Peaq Network. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Peaq parachain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Peaq-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\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "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=\"peaq\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Peaq Network RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Peaq Network RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Peaq Network RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, Peaq Foundation official, and OnFinality. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Peaq RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Peaq Network RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds against each provider from each of 3 regions." + +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="peaq"}) + +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: PublicNode multi-chain gateway including Substrate/Peaq + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to PublicNode's no-key Peaq endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="sgp"}[1h]) + + - slug: peaq-official + name: Peaq Foundation + tag: Peaq Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Peaq Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="peaq-official", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="peaq-official", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="peaq-official", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="peaq-official", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="peaq-official", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="peaq-official", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="sgp"}[1h]) + + - slug: onfinality + name: OnFinality + tag: OnFinality Substrate public gateway for Peaq + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to OnFinality's no-key Peaq endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="sgp"}[1h]) diff --git a/benchmarks/pulsechain-rpc.yml b/benchmarks/pulsechain-rpc.yml new file mode 100644 index 00000000..48943f01 --- /dev/null +++ b/benchmarks/pulsechain-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 196 + +slug: pulsechain-rpc +number: "196" +title: Fastest free PulseChain RPC, live no-key endpoint latency +seo_title: "Fastest free PulseChain RPC 2026" +seo_description: "{{best_name}} leads free PulseChain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public PulseChain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + PulseChain (chain 369) is a full-state Ethereum fork launched in 2023 with PLS as the gas token. It maintains EVM compatibility and has a large retail user base. Three keyless endpoints are probed continuously: PublicNode (pulsechain-rpc.publicnode.com), PulseChain official (rpc.pulsechain.com), and G4MM4 (rpc-pulsechain.g4mm4.io). + +abstract: | + Per-chain member of the RPC latency cluster, extended to PulseChain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public PulseChain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + PulseChain-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"pulsechain\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free PulseChain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free PulseChain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which PulseChain RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, PulseChain official, and G4MM4. Every endpoint was live-verified before inclusion." + - q: "Does the fastest PulseChain RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is PulseChain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="pulsechain"}) + +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: PublicNode multi-chain gateway for PulseChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key PulseChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="sgp"}[1h]) + + - slug: pulsechain-official + name: PulseChain Foundation + tag: PulseChain official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PulseChain Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="pulsechain-official", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="pulsechain-official", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="pulsechain-official", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="pulsechain-official", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="pulsechain-official", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="pulsechain-official", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="sgp"}[1h]) + + - slug: g4mm4 + name: G4MM4 + tag: G4MM4 community public RPC for PulseChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to G4MM4's no-key PulseChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="g4mm4", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="g4mm4", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="g4mm4", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="g4mm4", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="g4mm4", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="g4mm4", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="sgp"}[1h]) diff --git a/benchmarks/songbird-rpc.yml b/benchmarks/songbird-rpc.yml new file mode 100644 index 00000000..db727d94 --- /dev/null +++ b/benchmarks/songbird-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 192 + +slug: songbird-rpc +number: "192" +title: Fastest free Songbird RPC, live no-key endpoint latency +seo_title: "Fastest free Songbird RPC 2026" +seo_description: "{{best_name}} leads free Songbird RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Songbird EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Songbird (chain 19, SGB) is Flare Network's canary network, a production EVM-compatible chain used to test and validate Flare's FTSO oracle system before mainnet deployment. The Flare Foundation operates four keyless endpoints: the official Songbird gateway (songbird-api.flare.network/ext/C/rpc), dRPC (songbird.drpc.org), Blast API, and the community node sgb.ftso.com.au. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Songbird. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Songbird endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Songbird-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"songbird\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Songbird RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Songbird RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Songbird RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Flare Foundation official, dRPC, Blast API, and ftso.com.au community node. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Songbird RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Songbird RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="songbird"}) + +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: flare-official + name: Flare Foundation + tag: Flare Foundation official Songbird public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the Flare Foundation's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="flare-official", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="flare-official", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="flare-official", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="flare-official", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="flare-official", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="flare-official", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Songbird canary network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Songbird + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="sgp"}[1h]) + + - slug: ftso-au + name: FTSO AU + tag: ftso.com.au community Songbird RPC node + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ftso.com.au's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ftso-au", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ftso-au", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ftso-au", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ftso-au", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="ftso-au", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ftso-au", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="sgp"}[1h]) diff --git a/benchmarks/telos-rpc.yml b/benchmarks/telos-rpc.yml new file mode 100644 index 00000000..53136be7 --- /dev/null +++ b/benchmarks/telos-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 195 + +slug: telos-rpc +number: "195" +title: Fastest free Telos EVM RPC, live no-key endpoint latency +seo_title: "Fastest free Telos EVM RPC 2026" +seo_description: "{{best_name}} leads free Telos EVM RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Telos EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Telos EVM (chain 40) is a high-performance EVM-compatible blockchain with sub-0.5 second block times, TLOS as the gas token, and a carbon-neutral operational commitment. One of the longest-running EVM-compatible chains, live since 2021. Three keyless endpoints are probed continuously: Telos Foundation official (mainnet.telos.net/evm), dRPC (telos.drpc.org), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Telos EVM. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Telos EVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Telos-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"telos\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Telos EVM RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Telos EVM RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Telos EVM RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Telos Foundation official, dRPC, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Telos RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Telos EVM RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="telos"}) + +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: telos-official + name: Telos Foundation + tag: Telos Foundation official public EVM RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Telos Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="telos-official", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="telos-official", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="telos-official", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="telos-official", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="telos-official", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="telos-official", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Telos EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Telos endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Telos EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Telos endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="sgp"}[1h]) diff --git a/benchmarks/warden-rpc.yml b/benchmarks/warden-rpc.yml new file mode 100644 index 00000000..0bb99648 --- /dev/null +++ b/benchmarks/warden-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 197 + +slug: warden-rpc +number: "197" +title: Fastest free Warden Protocol RPC, live no-key endpoint latency +seo_title: "Fastest free Warden Protocol RPC 2026" +seo_description: "{{best_name}} leads free Warden Protocol RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Warden Protocol EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Warden Protocol is a modular intent-based L1 for cross-chain smart contract security, built by the Qredo team with WARD as the native gas token. EVM-compatible with Cosmos SDK internals, enabling omnichain key management and intent execution via SpaceWard. Three keyless EVM endpoints are probed continuously: PublicNode (warden-evm-rpc.publicnode.com), dRPC (warden.drpc.org), and the Warden Foundation official endpoint (evm.wardenprotocol.org). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Warden Protocol. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Warden EVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Warden-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"warden\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Warden Protocol RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Warden Protocol RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Warden Protocol RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, dRPC, and the Warden Foundation official endpoint. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Warden RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Warden Protocol RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="warden"}) + +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: PublicNode multi-chain gateway for Warden EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key Warden endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Warden Protocol + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Warden endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="sgp"}[1h]) + + - slug: warden-official + name: Warden Foundation + tag: Warden Foundation official public EVM RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the Warden Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="warden-official", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="warden-official", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="warden-official", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="warden-official", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="warden-official", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="warden-official", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="sgp"}[1h]) diff --git a/benchmarks/wemix-rpc.yml b/benchmarks/wemix-rpc.yml new file mode 100644 index 00000000..9b3772d5 --- /dev/null +++ b/benchmarks/wemix-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 191 + +slug: wemix-rpc +number: "191" +title: Fastest free WEMIX RPC, live no-key endpoint latency +seo_title: "Fastest free WEMIX RPC 2026" +seo_description: "{{best_name}} leads free WEMIX RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public WEMIX 3.0 EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + WEMIX 3.0 (chain 1111) is a South Korean gaming blockchain by WeMade, EVM-compatible with WEMIX as the native gas token. Home to Mirror World, WonderX, and a large P2E gaming ecosystem in Asia. Four keyless endpoints are probed continuously: WEMIX official (api.wemix.com), dRPC (wemix.drpc.org), Blast API, and 1RPC. + +abstract: | + Per-chain member of the RPC latency cluster, extended to WEMIX. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public WEMIX endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + WEMIX-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"wemix\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free WEMIX RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free WEMIX RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which WEMIX RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: WEMIX official, dRPC, Blast API, and 1RPC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest WEMIX RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is WEMIX RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="wemix"}) + +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: wemix-official + name: WeMade + tag: WeMade official WEMIX 3.0 public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to WEMIX's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="wemix-official", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="wemix-official", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="wemix-official", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="wemix-official", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="wemix-official", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="wemix-official", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for WEMIX 3.0 + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for WEMIX 3.0 + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="sgp"}[1h]) + + - slug: "1rpc" + name: 1RPC + tag: 1RPC privacy-preserving relay for WEMIX + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to 1RPC's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="1rpc", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="1rpc", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="1rpc", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="1rpc", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="1rpc", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="1rpc", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="sgp"}[1h]) diff --git a/benchmarks/zetachain-rpc.yml b/benchmarks/zetachain-rpc.yml new file mode 100644 index 00000000..2b9a1bba --- /dev/null +++ b/benchmarks/zetachain-rpc.yml @@ -0,0 +1,178 @@ +# OpenChainBench. Bench № 187 + +slug: zetachain-rpc +number: "187" +title: Fastest free ZetaChain RPC, live no-key endpoint latency +seo_title: "Fastest free ZetaChain RPC 2026" +seo_description: "{{best_name}} leads free ZetaChain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public ZetaChain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + ZetaChain (chain 7000) is an EVM-compatible omnichain L1 enabling native cross-chain assets (BTC, ETH, BNB) without bridges or wrapped tokens. ZETA is the gas token. Five keyless endpoints are probed continuously: dRPC, BlockPI, Thirdweb (7000.rpc.thirdweb.com), All That Node, and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to ZetaChain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public ZetaChain endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + ZetaChain-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." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 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), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "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=\"zetachain\"`. Provider coverage at launch: 5 no-key endpoints." + +findings: + - "{{best_name}} currently leads free ZetaChain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free ZetaChain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which ZetaChain RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing: dRPC, BlockPI, Thirdweb, All That Node, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest ZetaChain RPC change by region?" + a: "Often. 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 ZetaChain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +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="zetachain"}) + +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: drpc + name: dRPC + tag: dRPC public gateway for ZetaChain mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="sgp"}[1h]) + + - slug: blockpi + name: BlockPI + tag: BlockPI public RPC gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to BlockPI's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blockpi", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blockpi", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blockpi", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blockpi", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="blockpi", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blockpi", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb chain-ID RPC gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Thirdweb's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="sgp"}[1h]) + + - slug: allthatnode + name: All That Node + tag: All That Node archive-grade public gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to All That Node's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="allthatnode", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="allthatnode", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="allthatnode", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="allthatnode", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="allthatnode", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="allthatnode", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for ZetaChain mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="sgp"}[1h]) diff --git a/harnesses/indexing-freshness/Dockerfile b/harnesses/indexing-freshness/Dockerfile deleted file mode 100644 index 63108cfc..00000000 --- a/harnesses/indexing-freshness/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM golang:1.24-alpine AS builder - -WORKDIR /app -RUN apk add --no-cache git - -COPY go.mod go.sum ./ -RUN go mod download - -COPY . . - -RUN CGO_ENABLED=0 GOOS=linux go build -o /app/monitor ./cmd/script - -FROM debian:bookworm-slim - -WORKDIR /app -RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* - -COPY --from=builder /app/monitor /app/monitor - -EXPOSE 2112 - -CMD ["/app/monitor"] diff --git a/harnesses/indexing-freshness/cmd/script/config.go b/harnesses/indexing-freshness/cmd/script/config.go deleted file mode 100644 index b4d86824..00000000 --- a/harnesses/indexing-freshness/cmd/script/config.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import ( - "os" - "strconv" - "strings" - "time" -) - -// Provider is one wallet-data API we race. Keys come exclusively from -// env (INDEXING_KEY_); a provider without a key is skipped. -// -// EveryN throttles participation for quota-tight free tiers: the -// provider only joins every Nth probe event. Budget is the monthly -// API-call budget for the guard (90% cutoff, calendar-month reset) — -// derived from each free tier's documented quota with headroom. -type Provider struct { - Slug string - EveryN int - Budget int64 -} - -var providers = []Provider{ - {Slug: "mobula", EveryN: 1, Budget: 250_000}, - {Slug: "zerion", EveryN: 1, Budget: 55_000}, - {Slug: "goldrush", EveryN: 1, Budget: 90_000}, - // Allium free tier: 20k calls/month, aggressive per-second limits. - {Slug: "allium", EveryN: 3, Budget: 18_000}, -} - -func keyFor(slug string) string { - return strings.TrimSpace(os.Getenv("INDEXING_KEY_" + strings.ToUpper(slug))) -} - -func activeProviders() []Provider { - var out []Provider - for _, p := range providers { - if keyFor(p.Slug) != "" { - out = append(out, p) - } - } - return out -} - -const chainSlug = "base" - -func rpcHTTP() string { return strings.TrimSpace(os.Getenv("INDEXING_RPC_HTTP")) } -func rpcWSS() string { return strings.TrimSpace(os.Getenv("INDEXING_RPC_WSS")) } - -// eventInterval: one probe event (fresh organic tx picked from a new -// block) per interval. 10 min default → 144 events/day, which keeps -// every provider inside its monthly free quota given the poll schedule. -func eventInterval() time.Duration { - if v := strings.TrimSpace(os.Getenv("INDEXING_EVENT_SECONDS")); v != "" { - if n, err := strconv.Atoi(v); err == nil && n >= 60 { - return time.Duration(n) * time.Second - } - } - return 10 * time.Minute -} - -// pollSchedule: seconds after T0 at which each provider is polled. -// Front-loaded because the interesting race happens in the first -// seconds; capped at 120s after which the event counts as "missed". -// Precision note for the methodology: measured lag is an upper bound -// with resolution equal to the gap between consecutive polls. -var pollSchedule = []int{1, 2, 3, 4, 6, 8, 11, 15, 20, 26, 34, 45, 60, 80, 100, 120} diff --git a/harnesses/indexing-freshness/cmd/script/main.go b/harnesses/indexing-freshness/cmd/script/main.go deleted file mode 100644 index 5d2ab929..00000000 --- a/harnesses/indexing-freshness/cmd/script/main.go +++ /dev/null @@ -1,131 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - "os/signal" - "strings" - "sync" - "syscall" - "time" -) - -// indexing-freshness — bench №070. -// -// One probe event per interval: grab a fresh organic native transfer -// from the newest block (T0 = our observation of the block), then poll -// every cohort wallet API on a front-loaded schedule until each one -// returns the tx (lag = poll time − T0) or 120s passes (missed). - -func main() { - fmt.Println("=== Indexing Freshness Harness ===") - fmt.Println("OpenChainBench — organic tx → wallet-API visibility lag.") - if rpcHTTP() == "" { - fmt.Println("[fatal] INDEXING_RPC_HTTP not set") - os.Exit(1) - } - active := activeProviders() - if len(active) == 0 { - fmt.Println("[fatal] no INDEXING_KEY_* env vars set") - os.Exit(1) - } - fmt.Printf("Chain: %s | event interval: %s | poll cap: %ds\n", chainSlug, eventInterval(), pollSchedule[len(pollSchedule)-1]) - for _, p := range active { - fmt.Printf(" - %-10s everyN=%d budget=%d calls/mo\n", p.Slug, p.EveryN, p.Budget) - } - - addr := ":2112" - if v := strings.TrimSpace(os.Getenv("METRICS_ADDR")); v != "" { - addr = v - } - fmt.Printf("Metrics server: %s/metrics\n\n", addr) - go func() { - if err := StartMetricsServer(addr); err != nil { - fmt.Printf("[fatal] metrics server: %v\n", err) - os.Exit(1) - } - }() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - go runEvents(ctx, active) - - sig := make(chan os.Signal, 1) - signal.Notify(sig, os.Interrupt, syscall.SIGTERM) - s := <-sig - fmt.Printf("\n[shutdown] %v\n", s) - cancel() -} - -func runEvents(ctx context.Context, active []Provider) { - t := time.NewTicker(eventInterval()) - defer t.Stop() - var lastSeen uint64 - eventN := 0 - for { - eventN++ - _, bn, tx := waitFreshBlock(lastSeen) - lastSeen = bn - t0 := time.Now() - fmt.Printf("[event %d] block=%d tx=%s wallet=%s\n", eventN, bn, tx.Hash[:14]+"…", tx.From[:10]+"…") - - var wg sync.WaitGroup - for _, p := range active { - if eventN%p.EveryN != 0 { - continue - } - if !quota.allow(p) { - probeTotal.WithLabelValues(p.Slug, chainSlug, "quota_paused").Inc() - fmt.Printf(" %-10s quota guard tripped — paused until month rollover\n", p.Slug) - continue - } - wg.Add(1) - go func(p Provider) { - defer wg.Done() - raceProvider(ctx, p, tx.From, tx.Hash, t0) - }(p) - } - wg.Wait() - - select { - case <-ctx.Done(): - return - case <-t.C: - } - } -} - -func raceProvider(ctx context.Context, p Provider, wallet, txHash string, t0 time.Time) { - var lastErr error - for _, after := range pollSchedule { - wait := time.Until(t0.Add(time.Duration(after) * time.Second)) - if wait > 0 { - select { - case <-ctx.Done(): - return - case <-time.After(wait): - } - } - found, err := checkProvider(p.Slug, wallet, txHash) - if err != nil { - lastErr = err - continue - } - if found { - lag := time.Since(t0).Seconds() - freshnessSeconds.WithLabelValues(p.Slug, chainSlug).Set(lag) - freshnessHist.WithLabelValues(p.Slug, chainSlug).Observe(lag) - probeTotal.WithLabelValues(p.Slug, chainSlug, "found").Inc() - fmt.Printf(" %-10s found in %.1fs\n", p.Slug, lag) - return - } - } - if lastErr != nil { - probeTotal.WithLabelValues(p.Slug, chainSlug, "api_error").Inc() - fmt.Printf(" %-10s api_error: %s\n", p.Slug, sanitize(lastErr)) - return - } - probeTotal.WithLabelValues(p.Slug, chainSlug, "missed").Inc() - fmt.Printf(" %-10s MISSED (not indexed within %ds)\n", p.Slug, pollSchedule[len(pollSchedule)-1]) -} diff --git a/harnesses/indexing-freshness/cmd/script/metrics.go b/harnesses/indexing-freshness/cmd/script/metrics.go deleted file mode 100644 index e2286884..00000000 --- a/harnesses/indexing-freshness/cmd/script/metrics.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/prometheus/client_golang/prometheus/promhttp" -) - -var ( - freshnessSeconds = promauto.NewGaugeVec( - prometheus.GaugeOpts{ - Name: "indexing_freshness_seconds", - Help: "Latest observed lag between an organic on-chain tx confirmation and the moment the provider's wallet API first returns it.", - }, - []string{"provider", "chain"}, - ) - - freshnessHist = promauto.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "indexing_freshness_seconds_histogram", - Help: "Histogram of wallet-API indexing freshness lags — drives p50/p90 via quantile_over_time.", - Buckets: []float64{1, 2, 3, 4, 6, 8, 11, 15, 20, 26, 34, 45, 60, 80, 100, 120}, - }, - []string{"provider", "chain"}, - ) - - probeTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "indexing_probe_total", - Help: "Probe outcomes per provider: found | missed (not indexed within 120s) | api_error | quota_paused.", - }, - []string{"provider", "chain", "result"}, - ) - - apiCalls = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "indexing_api_calls_total", - Help: "API calls issued per provider (feeds the monthly quota guard).", - }, - []string{"provider"}, - ) - - quotaUsedRatio = promauto.NewGaugeVec( - prometheus.GaugeOpts{ - Name: "indexing_quota_used_ratio", - Help: "Fraction of the provider's monthly call budget consumed (probing pauses at 0.90).", - }, - []string{"provider"}, - ) -) - -func StartMetricsServer(addr string) error { - mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) - mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) { - w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte("ok")) - }) - return http.ListenAndServe(addr, mux) -} diff --git a/harnesses/indexing-freshness/cmd/script/pollers.go b/harnesses/indexing-freshness/cmd/script/pollers.go deleted file mode 100644 index de7b8463..00000000 --- a/harnesses/indexing-freshness/cmd/script/pollers.go +++ /dev/null @@ -1,111 +0,0 @@ -package main - -import ( - "bytes" - "encoding/base64" - "fmt" - "io" - "net/http" - "strings" - "sync" - "time" -) - -// Detection is deliberately parser-free: we lowercase the raw response -// body and look for the tx hash substring. Every cohort API returns the -// hash verbatim in its JSON, so this is immune to per-provider schema -// churn and cannot be accused of favouring any response shape. -func bodyContains(resp *http.Response, txHash string) (bool, error) { - defer resp.Body.Close() - raw, err := io.ReadAll(io.LimitReader(resp.Body, 4<<20)) - if err != nil { - return false, err - } - if resp.StatusCode != 200 { - return false, fmt.Errorf("status %d", resp.StatusCode) - } - return bytes.Contains(bytes.ToLower(raw), []byte(strings.ToLower(txHash))), nil -} - -var httpClient = &http.Client{Timeout: 8 * time.Second} - -// checkProvider asks one provider's wallet API whether it has indexed -// txHash for wallet yet. Returns (found, error). Every call increments -// the quota counter regardless of outcome. -func checkProvider(slug, wallet, txHash string) (bool, error) { - apiCalls.WithLabelValues(slug).Inc() - key := keyFor(slug) - var req *http.Request - var err error - - switch slug { - case "zerion": - u := fmt.Sprintf("https://api.zerion.io/v1/wallets/%s/transactions/?page%%5Bsize%%5D=20&filter%%5Bchain_ids%%5D=%s", wallet, chainSlug) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(key+":"))) - req.Header.Set("Accept", "application/json") - } - case "goldrush": - u := fmt.Sprintf("https://api.covalenthq.com/v1/%s-mainnet/address/%s/transactions_v3/?page-size=20", chainSlug, wallet) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", "Bearer "+key) - } - case "allium": - body := fmt.Sprintf(`[{"chain":"%s","address":"%s","limit":20}]`, chainSlug, wallet) - req, err = http.NewRequest("POST", "https://api.allium.so/api/v1/developer/wallet/transactions", strings.NewReader(body)) - if err == nil { - req.Header.Set("X-API-KEY", key) - req.Header.Set("Content-Type", "application/json") - } - case "mobula": - u := fmt.Sprintf("https://api.mobula.io/api/1/wallet/transactions?wallet=%s&limit=20", wallet) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", key) - } - default: - return false, fmt.Errorf("unknown provider %s", slug) - } - if err != nil { - return false, err - } - req.Header.Set("User-Agent", "OpenChainBench/1.0 (+https://openchainbench.com)") - resp, err := httpClient.Do(req) - if err != nil { - return false, err - } - return bodyContains(resp, txHash) -} - -// --------------------------------------------------------------------------- -// Monthly quota guard (same design as rpc-keyed-latency). -// --------------------------------------------------------------------------- - -type quotaGuard struct { - mu sync.Mutex - month string - counts map[string]int64 -} - -var quota = "aGuard{counts: make(map[string]int64)} - -func (q *quotaGuard) allow(p Provider) bool { - q.mu.Lock() - defer q.mu.Unlock() - m := time.Now().UTC().Format("2006-01") - if m != q.month { - q.month = m - q.counts = make(map[string]int64) - } - used := q.counts[p.Slug] - ratio := float64(used) / float64(p.Budget) - quotaUsedRatio.WithLabelValues(p.Slug).Set(ratio) - if ratio >= 0.90 { - return false - } - // Reserve the worst case for one event (full poll schedule). - q.counts[p.Slug] = used + int64(len(pollSchedule)) - return true -} diff --git a/harnesses/indexing-freshness/cmd/script/sampler.go b/harnesses/indexing-freshness/cmd/script/sampler.go deleted file mode 100644 index 33a2d2ee..00000000 --- a/harnesses/indexing-freshness/cmd/script/sampler.go +++ /dev/null @@ -1,139 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "math/rand" - "net/http" - "strconv" - "strings" - "time" -) - -// The organic sampler. Instead of funding a probe wallet, we pick a -// fresh native transfer from the newest block: real user, real tx, -// different wallet every event — which also makes the ground truth -// impossible for a provider to special-case (there is no benchmark -// wallet to whitelist). -// -// T0 = the instant WE observe the block containing the tx via our own -// RPC. Identical reference for every provider, same host clock. - -type rpcTx struct { - Hash string `json:"hash"` - From string `json:"from"` - To string `json:"to"` - Input string `json:"input"` - Value string `json:"value"` -} - -type rpcBlock struct { - Number string `json:"number"` - Transactions []rpcTx `json:"transactions"` -} - -func rpcCall(method string, params string) (json.RawMessage, error) { - body := fmt.Sprintf(`{"jsonrpc":"2.0","method":"%s","params":%s,"id":%d}`, method, params, time.Now().UnixNano()) - req, _ := http.NewRequest("POST", rpcHTTP(), strings.NewReader(body)) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("User-Agent", "OpenChainBench/1.0 (+https://openchainbench.com)") - resp, err := httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - raw, err := io.ReadAll(io.LimitReader(resp.Body, 8<<20)) - if err != nil { - return nil, err - } - var env struct { - Result json.RawMessage `json:"result"` - Error *struct { - Message string `json:"message"` - } `json:"error"` - } - if err := json.Unmarshal(raw, &env); err != nil { - return nil, err - } - if env.Error != nil { - return nil, fmt.Errorf("rpc: %s", env.Error.Message) - } - return env.Result, nil -} - -func latestBlock() (*rpcBlock, error) { - res, err := rpcCall("eth_getBlockByNumber", `["latest",true]`) - if err != nil { - return nil, err - } - var b rpcBlock - if err := json.Unmarshal(res, &b); err != nil { - return nil, err - } - return &b, nil -} - -// pickNativeTransfer returns a random plain native transfer from the -// block: value > 0, empty calldata, sender is a normal EOA. On OP-stack -// chains transactions[0] is always the L1 system deposit — the -// 0xdeaddead filter drops it. -func pickNativeTransfer(b *rpcBlock) *rpcTx { - var cands []rpcTx - for _, tx := range b.Transactions { - if tx.Input != "0x" || tx.To == "" || strings.EqualFold(tx.From, tx.To) { - continue - } - if strings.HasPrefix(strings.ToLower(tx.From), "0xdeaddead") { - continue - } - v, err := strconv.ParseUint(strings.TrimPrefix(tx.Value, "0x"), 16, 64) - if err != nil || v == 0 { - continue - } - cands = append(cands, tx) - } - if len(cands) == 0 { - return nil - } - tx := cands[rand.Intn(len(cands))] - return &tx -} - -// waitFreshBlock polls the RPC until a block newer than lastSeen with a -// usable native transfer shows up. 500ms cadence bounds the T0 error at -// +500ms, identical for every provider. -func waitFreshBlock(lastSeen uint64) (*rpcBlock, uint64, *rpcTx) { - for { - b, err := latestBlock() - if err != nil { - time.Sleep(2 * time.Second) - continue - } - bn, _ := strconv.ParseUint(strings.TrimPrefix(b.Number, "0x"), 16, 64) - if bn > lastSeen { - if tx := pickNativeTransfer(b); tx != nil { - return b, bn, tx - } - lastSeen = bn - } - time.Sleep(500 * time.Millisecond) - } -} - -// sanitize strips anything URL-ish from provider errors before logging -// (defense in depth — no endpoint carries a key in this harness's URLs -// except mobula/allium headers, but keep the rule uniform). -func sanitize(err error) string { - if err == nil { - return "" - } - s := err.Error() - if i := strings.Index(s, "http"); i >= 0 { - return s[:i] + "" - } - return s -} - -var _ = bytes.MinRead diff --git a/harnesses/indexing-freshness/go.mod b/harnesses/indexing-freshness/go.mod deleted file mode 100644 index 55bd09f7..00000000 --- a/harnesses/indexing-freshness/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module indexing-freshness - -go 1.24.0 - -require github.com/prometheus/client_golang v1.23.2 - -require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.66.1 // indirect - github.com/prometheus/procfs v0.16.1 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/sys v0.35.0 // indirect - google.golang.org/protobuf v1.36.8 // indirect -) diff --git a/harnesses/indexing-freshness/go.sum b/harnesses/indexing-freshness/go.sum deleted file mode 100644 index d6b8ca98..00000000 --- a/harnesses/indexing-freshness/go.sum +++ /dev/null @@ -1,46 +0,0 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= -github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= -go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= -google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/harnesses/indexing-freshness/railway.toml b/harnesses/indexing-freshness/railway.toml deleted file mode 100644 index 2abbb1f0..00000000 --- a/harnesses/indexing-freshness/railway.toml +++ /dev/null @@ -1,7 +0,0 @@ -[build] -builder = "DOCKERFILE" -dockerfilePath = "Dockerfile" - -[deploy] -healthcheckPath = "/health" -restartPolicyType = "ON_FAILURE" diff --git a/harnesses/rpc-capabilities/cmd/script/config.go b/harnesses/rpc-capabilities/cmd/script/config.go index 0c6dc72c..ab02e508 100644 --- a/harnesses/rpc-capabilities/cmd/script/config.go +++ b/harnesses/rpc-capabilities/cmd/script/config.go @@ -1339,6 +1339,184 @@ func chains() []Chain { {Slug: "stavr", Name: "STAVR", URL: envDefault("RPC_URL_COMDEX_STAVR", "https://comdex.rpc.m.stavr.tech:443")}, }, }, + // Fantom — EVM (chain 250). 5 keyless providers. + { + Slug: "fantom", + Name: "Fantom", + Providers: []Provider{ + {Slug: "fantom-official", Name: "Fantom Foundation", URL: envDefault("RPC_URL_FANTOM_OFFICIAL", "https://rpcapi.fantom.network")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_FANTOM_DRPC", "https://fantom.drpc.org")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_FANTOM_ANKR", "https://rpc.ankr.com/fantom")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_FANTOM_THIRDWEB", "https://250.rpc.thirdweb.com")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_FANTOM_BLASTAPI", "https://fantom-mainnet.public.blastapi.io")}, + }, + }, + // Kusama — Polkadot canary relay chain. 6 keyless providers. + { + Slug: "kusama", + Name: "Kusama", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_KUSAMA_PUBLICNODE", "https://kusama-rpc.publicnode.com")}, + {Slug: "onfinality", Name: "OnFinality", URL: envDefault("RPC_URL_KUSAMA_ONFINALITY", "https://kusama.api.onfinality.io/public")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_KUSAMA_DRPC", "https://kusama.drpc.org")}, + {Slug: "ibp", Name: "IBP Network", URL: envDefault("RPC_URL_KUSAMA_IBP", "https://rpc.ibp.network/kusama")}, + {Slug: "dwellir", Name: "Dwellir", URL: envDefault("RPC_URL_KUSAMA_DWELLIR", "https://kusama-rpc.dwellir.com")}, + {Slug: "1rpc", Name: "1RPC", URL: envDefault("RPC_URL_KUSAMA_1RPC", "https://1rpc.io/ksm")}, + }, + }, + // Hydration — Polkadot DeFi parachain (HydraDX). 5 keyless providers. + { + Slug: "hydration", + Name: "Hydration", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "hydration-official", Name: "Hydration Foundation", URL: envDefault("RPC_URL_HYDRATION_OFFICIAL", "https://rpc.hydration.cloud")}, + {Slug: "dwellir", Name: "Dwellir", URL: envDefault("RPC_URL_HYDRATION_DWELLIR", "https://hydradx-rpc.dwellir.com")}, + {Slug: "helikon", Name: "Helikon", URL: envDefault("RPC_URL_HYDRATION_HELIKON", "https://rpc.helikon.io/hydradx")}, + {Slug: "dotters-network", Name: "Dotters Network", URL: envDefault("RPC_URL_HYDRATION_DOTTERS", "https://hydradx.dotters.network")}, + {Slug: "parachains-network", Name: "Parachains.network", URL: envDefault("RPC_URL_HYDRATION_PARACHAINS", "https://rpc.parachains.network/hydradx")}, + }, + }, + // ZetaChain — EVM omnichain L1 (chain 7000). 5 keyless providers. + { + Slug: "zetachain", + Name: "ZetaChain", + Providers: []Provider{ + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ZETACHAIN_DRPC", "https://zetachain.drpc.org")}, + {Slug: "blockpi", Name: "BlockPi", URL: envDefault("RPC_URL_ZETACHAIN_BLOCKPI", "https://zetachain.blockpi.network/v1/rpc/public")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_ZETACHAIN_THIRDWEB", "https://7000.rpc.thirdweb.com")}, + {Slug: "allthatnode", Name: "AllThatNode", URL: envDefault("RPC_URL_ZETACHAIN_ATN", "https://zetachain-mainnet.rpc.public.allthatnode.com")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_ZETACHAIN_BLASTAPI", "https://zetachain-mainnet.public.blastapi.io")}, + }, + }, + // HAQQ — EVM Islamic finance L1 (chain 11235). 4 keyless providers. + { + Slug: "haqq", + Name: "HAQQ", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_HAQQ_PUBLICNODE", "https://haqq-evm-rpc.publicnode.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_HAQQ_DRPC", "https://haqq.drpc.org")}, + {Slug: "haqq-official", Name: "HAQQ Foundation", URL: envDefault("RPC_URL_HAQQ_OFFICIAL", "https://rpc.eth.haqq.network")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_HAQQ_BLASTAPI", "https://haqq-network.public.blastapi.io")}, + }, + }, + // Etherlink — Tezos EVM L2 (chain 42793). 4 keyless providers. + { + Slug: "etherlink", + Name: "Etherlink", + Providers: []Provider{ + {Slug: "etherlink-official", Name: "Etherlink Foundation", URL: envDefault("RPC_URL_ETHERLINK_OFFICIAL", "https://node.mainnet.etherlink.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ETHERLINK_DRPC", "https://etherlink.drpc.org")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_ETHERLINK_ANKR", "https://rpc.ankr.com/etherlink")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_ETHERLINK_BLASTAPI", "https://etherlink-mainnet.public.blastapi.io")}, + }, + }, + // Chiliz — Sports fan token EVM (chain 88888). 4 keyless providers. + { + Slug: "chiliz", + Name: "Chiliz", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_CHILIZ_PUBLICNODE", "https://chiliz-rpc.publicnode.com")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_CHILIZ_ANKR", "https://rpc.ankr.com/chiliz")}, + {Slug: "chiliz-official", Name: "Chiliz Foundation", URL: envDefault("RPC_URL_CHILIZ_OFFICIAL", "https://rpc.chiliz.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_CHILIZ_DRPC", "https://chiliz.drpc.org")}, + }, + }, + // WEMIX — Korean web3 gaming EVM (chain 1111). 4 keyless providers. + { + Slug: "wemix", + Name: "WEMIX", + Providers: []Provider{ + {Slug: "wemix-official", Name: "WEMIX Foundation", URL: envDefault("RPC_URL_WEMIX_OFFICIAL", "https://api.wemix.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_WEMIX_DRPC", "https://wemix.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_WEMIX_BLASTAPI", "https://wemix-mainnet.public.blastapi.io")}, + {Slug: "1rpc", Name: "1RPC", URL: envDefault("RPC_URL_WEMIX_1RPC", "https://1rpc.io/wemix")}, + }, + }, + // Songbird — Flare canary network (chain 19). 4 keyless providers. + { + Slug: "songbird", + Name: "Songbird", + Providers: []Provider{ + {Slug: "flare-official", Name: "Flare Foundation", URL: envDefault("RPC_URL_SONGBIRD_FLARE", "https://songbird-api.flare.network/ext/C/rpc")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_SONGBIRD_DRPC", "https://songbird.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_SONGBIRD_BLASTAPI", "https://songbird-mainnet.public.blastapi.io")}, + {Slug: "ftso-au", Name: "FTSO AU", URL: envDefault("RPC_URL_SONGBIRD_FTSOAU", "https://songbird.rpc.ftso.au")}, + }, + }, + // Cronos zkEVM — zkSync-stack Cronos L2 (chain 388). 3 keyless providers. + { + Slug: "cronos-zkevm", + Name: "Cronos zkEVM", + Providers: []Provider{ + {Slug: "cronos-zkevm-official", Name: "Crypto.com Foundation", URL: envDefault("RPC_URL_CRONOS_ZKEVM_OFFICIAL", "https://mainnet.zkevm.cronos.org")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_CRONOS_ZKEVM_DRPC", "https://cronos-zkevm.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_CRONOS_ZKEVM_BLASTAPI", "https://cronos-zkevm-mainnet.public.blastapi.io")}, + }, + }, + // Ethereum Classic — Original Ethereum chain (chain 61). 3 keyless providers. + { + Slug: "ethereum-classic", + Name: "Ethereum Classic", + Providers: []Provider{ + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ETC_DRPC", "https://etc.drpc.org")}, + {Slug: "etcdesktop", Name: "ETC Desktop", URL: envDefault("RPC_URL_ETC_ETCDESKTOP", "https://rpc.etcdesktop.com")}, + {Slug: "etcmc", Name: "ETCMC", URL: envDefault("RPC_URL_ETC_ETCMC", "https://etcmc.rpc.nz")}, + }, + }, + // Telos EVM — High-performance EVM (chain 40). 3 keyless providers. + { + Slug: "telos", + Name: "Telos", + Providers: []Provider{ + {Slug: "telos-official", Name: "Telos Foundation", URL: envDefault("RPC_URL_TELOS_OFFICIAL", "https://mainnet.telos.net/evm")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_TELOS_DRPC", "https://telos.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_TELOS_BLASTAPI", "https://telos-mainnet.public.blastapi.io")}, + }, + }, + // PulseChain — Full-state Ethereum fork (chain 369). 3 keyless providers. + { + Slug: "pulsechain", + Name: "PulseChain", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_PULSECHAIN_PUBLICNODE", "https://pulsechain-rpc.publicnode.com")}, + {Slug: "pulsechain-official", Name: "PulseChain Foundation", URL: envDefault("RPC_URL_PULSECHAIN_OFFICIAL", "https://rpc.pulsechain.com")}, + {Slug: "g4mm4", Name: "G4MM4", URL: envDefault("RPC_URL_PULSECHAIN_G4MM4", "https://rpc-pulsechain.g4mm4.io")}, + }, + }, + // Warden Protocol — Intent-based EVM L1. 3 keyless providers. + { + Slug: "warden", + Name: "Warden Protocol", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_WARDEN_PUBLICNODE", "https://warden-evm-rpc.publicnode.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_WARDEN_DRPC", "https://warden.drpc.org")}, + {Slug: "warden-official", Name: "Warden Foundation", URL: envDefault("RPC_URL_WARDEN_OFFICIAL", "https://evm.wardenprotocol.org")}, + }, + }, + // Oraichain — AI-focused Cosmos SDK chain. 3 keyless providers. + { + Slug: "oraichain", + Name: "Oraichain", + Kind: "cosmos", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_ORAICHAIN_PUBLICNODE", "https://oraichain-rpc.publicnode.com")}, + {Slug: "orai-official", Name: "Orai Foundation", URL: envDefault("RPC_URL_ORAICHAIN_OFFICIAL", "https://rpc.orai.io")}, + {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_ORAICHAIN_LAVENDERFIVE", "https://oraichain-rpc.lavenderfive.com")}, + }, + }, + // Peaq Network — DePIN Polkadot parachain. 3 keyless providers. + { + Slug: "peaq", + Name: "Peaq Network", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_PEAQ_PUBLICNODE", "https://peaq-rpc.publicnode.com")}, + {Slug: "peaq-official", Name: "Peaq Foundation", URL: envDefault("RPC_URL_PEAQ_OFFICIAL", "https://rpc.peaq.network")}, + {Slug: "onfinality", Name: "OnFinality", URL: envDefault("RPC_URL_PEAQ_ONFINALITY", "https://peaq.api.onfinality.io/public")}, + }, + }, } filter := strings.TrimSpace(os.Getenv("OCB_CHAINS")) diff --git a/public/logos/chiliz.png b/public/logos/chiliz.png new file mode 100644 index 00000000..dfcc8d14 Binary files /dev/null and b/public/logos/chiliz.png differ diff --git a/public/logos/cronos-zkevm.png b/public/logos/cronos-zkevm.png new file mode 100644 index 00000000..ae4b44e6 Binary files /dev/null and b/public/logos/cronos-zkevm.png differ diff --git a/public/logos/ethereum-classic.png b/public/logos/ethereum-classic.png new file mode 100644 index 00000000..eb921c2b Binary files /dev/null and b/public/logos/ethereum-classic.png differ diff --git a/public/logos/etherlink.png b/public/logos/etherlink.png new file mode 100644 index 00000000..01138ea9 Binary files /dev/null and b/public/logos/etherlink.png differ diff --git a/public/logos/fantom.png b/public/logos/fantom.png new file mode 100644 index 00000000..153c1b30 Binary files /dev/null and b/public/logos/fantom.png differ diff --git a/public/logos/haqq.svg b/public/logos/haqq.svg new file mode 100644 index 00000000..a31205b2 --- /dev/null +++ b/public/logos/haqq.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/logos/hydration.png b/public/logos/hydration.png new file mode 100644 index 00000000..0606d01f Binary files /dev/null and b/public/logos/hydration.png differ diff --git a/public/logos/kusama.png b/public/logos/kusama.png new file mode 100644 index 00000000..4b59cbe0 Binary files /dev/null and b/public/logos/kusama.png differ diff --git a/public/logos/oraichain.svg b/public/logos/oraichain.svg new file mode 100644 index 00000000..0579eba0 --- /dev/null +++ b/public/logos/oraichain.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/logos/peaq.png b/public/logos/peaq.png new file mode 100644 index 00000000..58850147 Binary files /dev/null and b/public/logos/peaq.png differ diff --git a/public/logos/pulsechain.png b/public/logos/pulsechain.png new file mode 100644 index 00000000..b9f68667 Binary files /dev/null and b/public/logos/pulsechain.png differ diff --git a/public/logos/songbird.png b/public/logos/songbird.png new file mode 100644 index 00000000..fc8523fb Binary files /dev/null and b/public/logos/songbird.png differ diff --git a/public/logos/telos.png b/public/logos/telos.png new file mode 100644 index 00000000..4606f143 Binary files /dev/null and b/public/logos/telos.png differ diff --git a/public/logos/warden.svg b/public/logos/warden.svg new file mode 100644 index 00000000..f3d0807a --- /dev/null +++ b/public/logos/warden.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/logos/wemix.png b/public/logos/wemix.png new file mode 100644 index 00000000..48229825 Binary files /dev/null and b/public/logos/wemix.png differ diff --git a/public/logos/zetachain.png b/public/logos/zetachain.png new file mode 100644 index 00000000..915e0d35 Binary files /dev/null and b/public/logos/zetachain.png differ diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 4d5dfb18..3b81c121 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -480,6 +480,24 @@ const RAW: Record = { regen: "/logos/regen.png", comdex: "/logos/comdex.png", + // ─── Wave-7 RPC cluster chains (benches 184-199, 2026-08-05) ─── + fantom: "/logos/fantom.png", + kusama: "/logos/kusama.png", + hydration: "/logos/hydration.png", + zetachain: "/logos/zetachain.png", + haqq: "/logos/haqq.svg", + etherlink: "/logos/etherlink.png", + chiliz: "/logos/chiliz.png", + wemix: "/logos/wemix.png", + songbird: "/logos/songbird.png", + "cronos-zkevm": "/logos/cronos-zkevm.png", + "ethereum-classic": "/logos/ethereum-classic.png", + telos: "/logos/telos.png", + pulsechain: "/logos/pulsechain.png", + warden: "/logos/warden.svg", + oraichain: "/logos/oraichain.svg", + peaq: "/logos/peaq.png", + // ─── Wave-6 Cosmos RPC providers ─── ecostake: "/logos/ecostake.png", autostake: "/logos/autostake.png", @@ -602,6 +620,20 @@ const ALIASES: Record = { "iotex-mirror": "iotex", "harmony-s0": "harmony", + // Wave-7 RPC official-endpoint aliases (2026-08-05, benches 184-199) + "fantom-official": "fantom", + "hydration-official": "hydration", + "haqq-official": "haqq", + "etherlink-official": "etherlink", + "chiliz-official": "chiliz", + "wemix-official": "wemix", + "cronos-zkevm-official": "cronos-zkevm", + "telos-official": "telos", + "pulsechain-official": "pulsechain", + "warden-official": "warden", + "orai-official": "oraichain", + "peaq-official": "peaq", + }; export function logoPath(slug: string): string | null {