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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/prod-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,16 @@ jobs:
# the next step auto-rolls back the prod alias to the previous good
# deploy. This catches the class of bug that bled SEO on 2026-06-25
# (bench page 404 + noindex while still in the sitemap).
#
# Sitemap fetched from the deployment URL (bypasses s-maxage=3600
# CDN cache — was serving the previous deploy's sitemap for up to
# 1 h, causing false rollbacks). Pages checked against the prod
# domain (second arg) so the noindex injected on Vercel preview
# URLs does not false-fail the per-page checks.
- name: Sitemap indexability smoke
id: smoke
continue-on-error: true
run: node scripts/sitemap-smoke.mjs https://openchainbench.com
run: node scripts/sitemap-smoke.mjs ${{ steps.deploy.outputs.url }} https://openchainbench.com

- name: Auto-rollback on smoke failure
if: steps.smoke.outcome == 'failure'
Expand Down
136 changes: 136 additions & 0 deletions benchmarks/acala-rpc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# OpenChainBench. Bench No 248

slug: acala-rpc
number: "248"
title: Fastest free Acala RPC, live no-key endpoint latency
seo_title: "Fastest free Acala RPC 2026"
seo_description: "{{best_name}} leads free Acala RPC at {{best_p50}} (block height p50, 24h). 3 providers measured every 60s from 3 regions."
subtitle: HTTP round-trip latency for Substrate chain_getHeader queries against every available public Acala endpoint, audited every 60 seconds from 3 regions.

category: RPCs
status: live
metric: RPC latency
unit: ms
higher_is_better: false

seo_intro: |
Acala is the DeFi hub of the Polkadot ecosystem, a Polkadot parachain providing decentralized stablecoin (aUSD), liquid staking (LDOT), and an EVM-compatible execution environment. Acala uses the Substrate framework and exposes a standard Substrate JSON-RPC interface; block height is queried via chain_getHeader. Public endpoints are available without an API key from OnFinality, Dwellir, and PublicNode. Every provider was live-verified with consecutive block-height probes at launch.

abstract: |
Per-chain member of the RPC latency cluster, extended to Acala.
We measure the round-trip latency of a Substrate chain_getHeader query against
every available public Acala endpoint that sustains continuous probing:
3 providers at launch, every 60 seconds, from us-east, eu-west and
Singapore. Each provider is probed via a JSON-RPC POST (chain_getHeader)
from which the block number is extracted.
The harness classifies every response (ok / http_err / jsonrpc_err / stale / timeout)
with a Polkadot-scaled staleness gap (40 blocks, around 8 min at 12 s/block).
The cross-chain view lives on the parent rpc-capabilities benchmark;
this page is the Acala-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\":<rotating>,\"method\":\"chain_getHeader\",\"params\":[]}. The result contains a number field (hex-encoded block number)."
- "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 (parsable block height returned), http_err, jsonrpc_err, stale (block more than 40 behind the cross-provider tip), timeout."
- "This page is part of the per-chain RPC cluster derived from the cross-chain 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=acala. Provider coverage at launch: 3 endpoints (OnFinality, Dwellir, PublicNode)."

findings:
- "{{best_name}} currently leads Acala RPC at {{best_p50}} (chain_getHeader p50, 24h) across 3 measured providers."

faq:
- q: "What is the fastest free Acala RPC right now?"
a: "{{best_name}} currently leads at {{best_p50}} (Acala block height p50 over the last 24h), measured against 3 providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples."
- q: "Which Acala RPC endpoints work without an API key?"
a: "3 endpoints sustain continuous keyless probing at launch: OnFinality (acala.api.onfinality.io/public), Dwellir (acala-rpc.n.dwellir.com) and PublicNode (acala-rpc.publicnode.com). Every listed endpoint was live-verified before inclusion."
- q: "Does the fastest Acala RPC change by region?"
a: "Often. OnFinality has a global CDN, Dwellir is Europe-focused, and PublicNode has dedicated nodes per region. Rankings shift significantly depending on your geographic origin. The region tabs re-scope every number to a single origin."
- q: "How does Acala RPC latency compare to other Polkadot parachains?"
a: "All Polkadot parachains use the same Substrate JSON-RPC probe (chain_getHeader) and the same 3 keyless providers (OnFinality, Dwellir, PublicNode), making latency directly comparable. The parent rpc-capabilities benchmark shows the cross-chain view."

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="acala"})

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: onfinality
name: OnFinality
tag: OnFinality public Acala RPC, no API key required
formula: "50th percentile over 24h of client-side round-trip latency (ms) for a chain_getHeader POST sent every 60s from 3 regions to acala.api.onfinality.io/public."
queries:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="acala"})
p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="acala"})
p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="acala"})
mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="acala"})
success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="acala"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="acala"})
sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="acala"})
series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="acala"}[1h]))
regions:
- region: us-east
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="acala", region="us-east"})
series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="acala", region="us-east"}[1h])
- region: eu-west
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="acala", region="eu-west"})
series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="acala", region="eu-west"}[1h])
- region: ap-southeast
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="acala", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="acala", region="sgp"}[1h])

- slug: dwellir
name: Dwellir
tag: Dwellir public Acala RPC, no API key required
formula: "50th percentile over 24h of client-side round-trip latency (ms) for a chain_getHeader POST sent every 60s from 3 regions to acala-rpc.n.dwellir.com."
queries:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="acala"})
p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dwellir", chain="acala"})
p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dwellir", chain="acala"})
mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dwellir", chain="acala"})
success: sum(ocb:rpc_call:ok_rate_24h{provider="dwellir", chain="acala"}) / sum(ocb:rpc_call:rate_24h{provider="dwellir", chain="acala"})
sample_size: sum(ocb:rpc_call:increase_24h{provider="dwellir", chain="acala"})
series: avg(avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="acala"}[1h]))
regions:
- region: us-east
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="acala", region="us-east"})
series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="acala", region="us-east"}[1h])
- region: eu-west
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="acala", region="eu-west"})
series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="acala", region="eu-west"}[1h])
- region: ap-southeast
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="acala", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="acala", region="sgp"}[1h])

- slug: publicnode
name: PublicNode
tag: PublicNode public Acala RPC, no API key required
formula: "50th percentile over 24h of client-side round-trip latency (ms) for a chain_getHeader POST sent every 60s from 3 regions to acala-rpc.publicnode.com."
queries:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="acala"})
p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="acala"})
p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="acala"})
mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="acala"})
success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="acala"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="acala"})
sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="acala"})
series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="acala"}[1h]))
regions:
- region: us-east
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="acala", region="us-east"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="acala", region="us-east"}[1h])
- region: eu-west
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="acala", region="eu-west"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="acala", region="eu-west"}[1h])
- region: ap-southeast
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="acala", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="acala", region="sgp"}[1h])
Loading