diff --git a/benchmarks/bitcoin-rpc.yml b/benchmarks/bitcoin-rpc.yml
new file mode 100644
index 000000000..5fc30be7d
--- /dev/null
+++ b/benchmarks/bitcoin-rpc.yml
@@ -0,0 +1,127 @@
+# OpenChainBench. Bench No 259
+
+slug: bitcoin-rpc
+number: "259"
+title: Fastest free Bitcoin RPC, live no-key endpoint latency
+seo_title: "Fastest free Bitcoin RPC 2026"
+seo_description: "{{best_name}} leads free Bitcoin RPC at {{best_p50}} (getblockcount p50, 24h). 3 no-key providers measured every 60s from 3 regions."
+subtitle: HTTP round-trip latency for block-height queries against every available public Bitcoin endpoint, audited every 60 seconds from 3 regions.
+
+category: RPCs
+status: live
+metric: RPC latency
+unit: ms
+higher_is_better: false
+
+seo_intro: |
+ Bitcoin is the original proof-of-work UTXO blockchain, targeting one block every ten minutes under SHA-256. It exposes the canonical Bitcoin Core JSON-RPC interface; the lightest height method is getblockcount, which returns the current chain tip as a plain integer. A handful of providers serve this endpoint with no API key: PublicNode, dRPC and NOWNodes (public no-key endpoint, rate-limited to 5 requests per second). Every provider was live-verified with consecutive getblockcount probes at launch, all returning the same tip.
+
+abstract: |
+ Per-chain member of the RPC latency cluster, extended to Bitcoin. We probe every
+ public no-key endpoint with a single getblockcount call every 60 seconds from three
+ regions (us-east, eu-west, Singapore) and record wall-clock round-trip latency. Only ok
+ responses (HTTP 200 with a usable block height, not stale) contribute to the distribution;
+ p50/p90/p99 are computed via Prometheus quantile_over_time over a rolling 24-hour window.
+
+methodology:
+ - "Probe: a single getblockcount JSON-RPC POST every 60 seconds per provider from us-east, eu-west and Singapore. Latency is the client-side wall-clock round trip."
+ - "Classification: ok (HTTP 200 with a usable height), http_err, jsonrpc_err (HTTP 200 with an error body), stale (tip more than 20 blocks behind the cross-provider max), timeout. Only ok responses contribute latency."
+ - "Providers: PublicNode (bitcoin-rpc.publicnode.com), dRPC (bitcoin.drpc.org), NOWNodes (public-btc.nownodes.io, no key, 5 RPS)."
+ - "Aggregation: p50/p90/p99 via Prometheus quantile_over_time over 24h; the headline cites the cross-region figure and the region tabs re-scope it."
+
+findings:
+ - "{{best_name}} leads at {{best_p50}} (getblockcount p50, 24h) across {{provider_count}} no-key Bitcoin endpoints."
+ - "Bitcoin's ten-minute block time means read latency reflects the provider's edge, not chain speed: a stale tip is rare, so this bench is a near-pure latency race."
+ - "{{name:nownodes}} serves Bitcoin from its public no-key endpoint at {{p50:nownodes}} (p50, 24h), rate-limited to 5 requests per second."
+
+faq:
+ - q: "Which free Bitcoin RPC is fastest?"
+ a: "Per the live data above: {{best_name}} at {{best_p50}} (getblockcount p50, 24h) across the no-key providers measured here."
+ - q: "How is Bitcoin RPC latency measured?"
+ a: "A single getblockcount call every 60 seconds from three regions (us-east, eu-west, Singapore), recording the wall-clock round trip. Only successful, non-stale responses count."
+ - q: "Do these endpoints need an API key?"
+ a: "No. All three (PublicNode, dRPC, NOWNodes) serve Bitcoin Core JSON-RPC with no key. NOWNodes' public endpoint is rate-limited to 5 requests per second."
+
+source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities
+
+prometheus:
+ window: 24h
+ expected_freshness_seconds: 5400
+
+rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="bitcoin"})
+
+dimensions:
+ region:
+ - { value: us-east, label: US-East }
+ - { value: eu-west, label: EU-West }
+ - { value: sgp, label: Singapore }
+
+providers:
+ - slug: publicnode
+ name: PublicNode
+ tag: Allnodes-operated, no-key Bitcoin Core JSON-RPC
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `getblockcount` sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key Bitcoin endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="bitcoin"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="bitcoin"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="bitcoin"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="bitcoin"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="bitcoin"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="bitcoin"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="bitcoin"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="bitcoin"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="bitcoin", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="bitcoin", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="bitcoin", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="bitcoin", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="bitcoin", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="bitcoin", region="sgp"}[1h])
+
+ - slug: drpc
+ name: dRPC
+ tag: Decentralised RPC mesh, no-key Bitcoin endpoint
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `getblockcount` sent every 60s from 3 regions (us-east + eu-west + sgp) to dRPC's no-key Bitcoin endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bitcoin"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="bitcoin"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="bitcoin"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="bitcoin"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="bitcoin"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="bitcoin"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="bitcoin"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bitcoin"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bitcoin", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bitcoin", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bitcoin", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bitcoin", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="bitcoin", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="bitcoin", region="sgp"}[1h])
+
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `getblockcount` sent every 60s from 3 regions (us-east + eu-west + sgp) to NOWNodes's no-key Bitcoin endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bitcoin"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes", chain="bitcoin"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes", chain="bitcoin"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes", chain="bitcoin"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes", chain="bitcoin"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes", chain="bitcoin"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes", chain="bitcoin"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bitcoin"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bitcoin", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bitcoin", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bitcoin", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bitcoin", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bitcoin", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bitcoin", region="sgp"}[1h])
diff --git a/benchmarks/bnb-rpc.yml b/benchmarks/bnb-rpc.yml
index 95ca204e9..94bf6875c 100644
--- a/benchmarks/bnb-rpc.yml
+++ b/benchmarks/bnb-rpc.yml
@@ -86,6 +86,29 @@ providers:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="bnb", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="bnb", region="sgp"}[1h])
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to NOWNodes public no-key BNB Chain endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bnb"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes", chain="bnb"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes", chain="bnb"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes", chain="bnb"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes", chain="bnb"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes", chain="bnb"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes", chain="bnb"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bnb"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bnb", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bnb", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bnb", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bnb", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="bnb", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="bnb", region="sgp"}[1h])
+
- slug: drpc
name: dRPC
tag: Decentralized RPC mesh, consensus-checked
diff --git a/benchmarks/coreum-rpc.yml b/benchmarks/coreum-rpc.yml
index 9791f6636..da4bfa34d 100644
--- a/benchmarks/coreum-rpc.yml
+++ b/benchmarks/coreum-rpc.yml
@@ -111,6 +111,29 @@ providers:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="coreum", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="coreum", region="sgp"}[1h])
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint `status` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to PublicNode's no-key Coreum endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="coreum"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes", chain="coreum"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes", chain="coreum"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes", chain="coreum"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes", chain="coreum"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes", chain="coreum"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes", chain="coreum"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="coreum"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="coreum", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="coreum", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="coreum", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="coreum", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="coreum", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="coreum", region="sgp"}[1h])
+
- slug: coreum-official
name: Coreum Foundation
tag: Coreum Foundation's official public RPC
diff --git a/benchmarks/ethereum-rpc.yml b/benchmarks/ethereum-rpc.yml
index ce4e21741..98627c04d 100644
--- a/benchmarks/ethereum-rpc.yml
+++ b/benchmarks/ethereum-rpc.yml
@@ -87,6 +87,29 @@ providers:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="ethereum", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="ethereum", region="sgp"}[1h])
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions (us-east + eu-west + sgp) to NOWNodes public no-key Ethereum endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="ethereum"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes", chain="ethereum"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes", chain="ethereum"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes", chain="ethereum"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes", chain="ethereum"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes", chain="ethereum"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes", chain="ethereum"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="ethereum"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="ethereum", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="ethereum", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="ethereum", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="ethereum", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="ethereum", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="ethereum", region="sgp"}[1h])
+
- slug: drpc
name: dRPC
tag: Decentralized RPC mesh, consensus-checked
diff --git a/benchmarks/lukso-rpc.yml b/benchmarks/lukso-rpc.yml
new file mode 100644
index 000000000..bb7092c04
--- /dev/null
+++ b/benchmarks/lukso-rpc.yml
@@ -0,0 +1,127 @@
+# OpenChainBench. Bench No 260
+
+slug: lukso-rpc
+number: "260"
+title: Fastest free LUKSO RPC, live no-key endpoint latency
+seo_title: "Fastest free LUKSO RPC 2026"
+seo_description: "{{best_name}} leads free LUKSO 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 available public LUKSO endpoint, audited every 60 seconds from 3 regions.
+
+category: RPCs
+status: live
+metric: RPC latency
+unit: ms
+higher_is_better: false
+
+seo_intro: |
+ LUKSO is an EVM layer-1 (chain ID 42) built around Universal Profiles and the LSP standards. It speaks standard Ethereum JSON-RPC, so the canonical height probe is eth_getBlockByNumber('latest'). Three providers serve LUKSO mainnet with no API key: the LUKSO Foundation's official RPC, NOWNodes (public no-key endpoint, 5 requests per second) and thirdweb's public edge. All three were live-verified at launch, returning the same chain tip.
+
+abstract: |
+ Per-chain member of the RPC latency cluster, extended to LUKSO. We probe every
+ public no-key endpoint with a single eth_getBlockByNumber call every 60 seconds from three
+ regions (us-east, eu-west, Singapore) and record wall-clock round-trip latency. Only ok
+ responses (HTTP 200 with a usable block height, not stale) contribute to the distribution;
+ p50/p90/p99 are computed via Prometheus quantile_over_time over a rolling 24-hour window.
+
+methodology:
+ - "Probe: a single eth_getBlockByNumber('latest', false) JSON-RPC POST every 60 seconds per provider from us-east, eu-west and Singapore. Latency is the client-side wall-clock round trip."
+ - "Classification: ok (HTTP 200 with a usable block number), http_err, jsonrpc_err, stale (block more than 20 behind the cross-provider tip), timeout. Only ok responses contribute latency."
+ - "Providers: LUKSO Foundation (rpc.mainnet.lukso.network), NOWNodes (public-lukso.nownodes.io, no key, 5 RPS), thirdweb (42.rpc.thirdweb.com)."
+ - "Aggregation: p50/p90/p99 via Prometheus quantile_over_time over 24h; the headline cites the cross-region figure and the region tabs re-scope it."
+
+findings:
+ - "{{best_name}} leads at {{best_p50}} (eth_getBlockByNumber p50, 24h) across {{provider_count}} no-key LUKSO endpoints."
+ - "LUKSO targets a short EVM block time, so a stale tip is uncommon and the ranking is driven by each provider's regional edge placement."
+ - "{{name:nownodes}} serves LUKSO from its public no-key endpoint at {{p50:nownodes}} (p50, 24h), rate-limited to 5 requests per second."
+
+faq:
+ - q: "Which free LUKSO RPC is fastest?"
+ a: "Per the live data above: {{best_name}} at {{best_p50}} (eth_getBlockByNumber p50, 24h) across the no-key providers measured here."
+ - q: "How is LUKSO RPC latency measured?"
+ a: "A single eth_getBlockByNumber call every 60 seconds from three regions (us-east, eu-west, Singapore), recording the wall-clock round trip. Only successful, non-stale responses count."
+ - q: "Do these endpoints need an API key?"
+ a: "No. LUKSO Foundation, NOWNodes and thirdweb all serve LUKSO mainnet JSON-RPC with no key. NOWNodes' public endpoint is rate-limited to 5 requests per second."
+
+source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities
+
+prometheus:
+ window: 24h
+ expected_freshness_seconds: 5400
+
+rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="lukso"})
+
+dimensions:
+ region:
+ - { value: us-east, label: US-East }
+ - { value: eu-west, label: EU-West }
+ - { value: sgp, label: Singapore }
+
+providers:
+ - slug: lukso-official
+ name: LUKSO Foundation
+ tag: Official LUKSO mainnet RPC, no key
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` sent every 60s from 3 regions (us-east + eu-west + sgp) to LUKSO Foundation's no-key LUKSO endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lukso-official", chain="lukso"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lukso-official", chain="lukso"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lukso-official", chain="lukso"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lukso-official", chain="lukso"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="lukso-official", chain="lukso"}) / sum(ocb:rpc_call:rate_24h{provider="lukso-official", chain="lukso"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="lukso-official", chain="lukso"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="lukso-official", chain="lukso"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lukso-official", chain="lukso", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="lukso-official", chain="lukso", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lukso-official", chain="lukso", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="lukso-official", chain="lukso", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lukso-official", chain="lukso", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="lukso-official", chain="lukso", region="sgp"}[1h])
+
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` sent every 60s from 3 regions (us-east + eu-west + sgp) to NOWNodes's no-key LUKSO endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="lukso"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes", chain="lukso"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes", chain="lukso"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes", chain="lukso"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes", chain="lukso"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes", chain="lukso"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes", chain="lukso"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="lukso"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="lukso", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="lukso", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="lukso", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="lukso", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", chain="lukso", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", chain="lukso", region="sgp"}[1h])
+
+ - slug: thirdweb
+ name: thirdweb
+ tag: Multi-chain RPC edge, no-key public endpoint
+ formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` sent every 60s from 3 regions (us-east + eu-west + sgp) to thirdweb's no-key LUKSO endpoint."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="lukso"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="lukso"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="lukso"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="lukso"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="lukso"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="lukso"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="lukso"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="lukso"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="lukso", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="lukso", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="lukso", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="lukso", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="lukso", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="lukso", region="sgp"}[1h])
diff --git a/benchmarks/rpc-capabilities.yml b/benchmarks/rpc-capabilities.yml
index cee5e02a3..5e265b958 100644
--- a/benchmarks/rpc-capabilities.yml
+++ b/benchmarks/rpc-capabilities.yml
@@ -187,6 +187,29 @@ providers:
p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", region="sgp"})
series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", region="sgp"}[1h])
+ - slug: nownodes
+ name: NOWNodes
+ tag: Public node, 110+ chains, 5 RPS free tier
+ formula: "Mean over its measured chains (Ethereum, BNB, Bitcoin, LUKSO, Coreum) and 3 regions of per-cell 24h p50 round-trip latency (ms) to NOWNodes public no-key endpoints. Successful calls only; failures show in the Success column."
+ queries:
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes"})
+ p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="nownodes"})
+ p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="nownodes"})
+ mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="nownodes"})
+ success: sum(ocb:rpc_call:ok_rate_24h{provider="nownodes"}) / sum(ocb:rpc_call:rate_24h{provider="nownodes"})
+ sample_size: sum(ocb:rpc_call:increase_24h{provider="nownodes"})
+ series: avg(avg_over_time(rpc_latency_milliseconds{provider="nownodes"}[1h]))
+ regions:
+ - region: us-east
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", region="us-east"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", region="us-east"}[1h])
+ - region: eu-west
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", region="eu-west"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", region="eu-west"}[1h])
+ - region: ap-southeast
+ p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="nownodes", region="sgp"})
+ series: avg_over_time(rpc_latency_milliseconds{provider="nownodes", region="sgp"}[1h])
+
- slug: drpc
name: dRPC
tag: Decentralized RPC mesh, consensus-checked
diff --git a/public/logos/lukso.svg b/public/logos/lukso.svg
new file mode 100644
index 000000000..cfab20ee5
--- /dev/null
+++ b/public/logos/lukso.svg
@@ -0,0 +1,17 @@
+
+
+
diff --git a/public/logos/nownodes.svg b/public/logos/nownodes.svg
index 297c5a4e1..5e94ea570 100644
--- a/public/logos/nownodes.svg
+++ b/public/logos/nownodes.svg
@@ -1,4 +1,4 @@
-