diff --git a/benchmarks/hydration-rpc.yml b/benchmarks/hydration-rpc.yml index 61115f2c..336f2b05 100644 --- a/benchmarks/hydration-rpc.yml +++ b/benchmarks/hydration-rpc.yml @@ -4,44 +4,49 @@ slug: hydration-rpc number: "186" title: Fastest free Hydration RPC, live no-key endpoint latency seo_title: "Fastest free Hydration RPC 2026" -seo_description: "Hydration RPC bench temporarily suspended: all 5 providers are DNS dead or returning HTTP 400. Will resume when endpoints recover." +seo_description: "{{best_name}} leads free Hydration RPC at {{best_p50}} (chain_getHeader Substrate p50, 24h). 2 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: draft +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. This bench is currently suspended: all 5 previously measured providers (Hydration official, Dwellir, Helikon, Dotters Network, Parachains Network) are either DNS dead or returning HTTP 400. The bench will resume when endpoints recover. + Hydration (formerly HydraDX) is an Omnipool-based DEX parachain on Polkadot enabling single-sided liquidity provision across assets. HDX is the native token. It produces one block every 6 seconds via the Polkadot relay and exposes a Substrate JSON-RPC interface. Public keyless endpoints are available from Hydration official and Dwellir. Every provider was live-verified with consecutive chain_getHeader probes at launch. abstract: | Per-chain member of the RPC latency cluster, extended to Hydration. - This bench is currently suspended: all 5 previously measured providers - are DNS dead or returning HTTP 400. Data will resume when at least - one keyless Hydration RPC endpoint becomes reachable again. + We measure the round-trip latency of a single Substrate JSON-RPC call + (chain_getHeader) against every available public Hydration parachain + node that sustains continuous probing: 2 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 + Polkadot-scaled staleness gap (40 blocks, around 4 min at 6 s/block). + The cross-chain view lives on the parent rpc-capabilities benchmark; + this page is the Hydration-scoped answer with per-region breakdowns. 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\"`. Bench currently suspended: all 5 previously measured providers are DNS dead or returning HTTP 400." + - "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. Substrate JSON-RPC." + - "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 (block more than 40 behind the cross-provider tip), timeout. Latency without reliability is a misleading ranking signal." + - "This page is part of the per-chain RPC cluster derived from the cross-chain rpc-capabilities 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: 2 endpoints (Hydration official, Dwellir)." findings: - - "Hydration RPC bench is suspended. All previously measured providers (Hydration official, Dwellir, Helikon, Dotters Network, Parachains Network) are unreachable." + - "{{best_name}} currently leads Hydration RPC at {{best_p50}} (chain_getHeader p50, 24h) across 2 measured providers." faq: - q: "What is the fastest free Hydration RPC right now?" - a: "This bench is currently suspended. All 5 previously measured keyless providers are DNS dead or returning HTTP 400. The bench will resume when at least one reachable endpoint is found." - - q: "Which Hydration RPCs work without an API key?" - a: "All 5 previously verified endpoints (Hydration official, Dwellir, Helikon, Dotters Network, Parachains Network) are currently unreachable. The bench will resume when providers recover." + a: "{{best_name}} currently leads at {{best_p50}} (Hydration block number p50 over the last 24h), measured against 2 providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples." + - q: "Which Hydration RPC endpoints work without an API key?" + a: "2 endpoints sustain continuous keyless probing at launch: Hydration official (rpc.hydradx.cloud) and Dwellir (hydration-rpc.n.dwellir.com). Every listed endpoint was live-verified with a chain_getHeader call returning a parsable block number 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." + a: "Often. Public infra concentrates in specific regions; a gateway that wins from Amsterdam can lose from Singapore by multiples. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Hydration RPC latency measured here, technically?" + a: "One chain_getHeader Substrate JSON-RPC POST every 60 seconds against each provider from each of 3 regions. Wall-clock round-trip is recorded at millisecond precision; p50/p90/p99 are computed via Prometheus quantile_over_time over 24 hours." source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities @@ -58,14 +63,11 @@ dimensions: - { value: eu-west, label: EU-West } - { value: sgp, label: Singapore } -# All 5 previously measured providers are DNS dead or returning HTTP 400. -# Suspended 2026-08-07. Will resume when endpoints recover. -# Removed: dwellir, helikon, dotters-network, parachains-network providers: - slug: hydration-official name: Hydration - tag: Hydration official public RPC (currently unreachable) - 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 the Hydration official no-key endpoint." + tag: Hydration official public RPC (rpc.hydradx.cloud), keyless + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a chain_getHeader POST sent every 60s from 3 regions to rpc.hydradx.cloud." 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"}) @@ -84,3 +86,26 @@ providers: - 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 public Hydration RPC (hydration-rpc.n.dwellir.com), keyless + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a chain_getHeader POST sent every 60s from 3 regions to hydration-rpc.n.dwellir.com." + 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]) diff --git a/benchmarks/trading-app-execution.yml b/benchmarks/trading-app-execution.yml deleted file mode 100644 index a4c2f2f9..00000000 --- a/benchmarks/trading-app-execution.yml +++ /dev/null @@ -1,80 +0,0 @@ -# OpenChainBench. Bench 204 - -slug: trading-app-execution -number: "204" -title: "Trading app execution quality: Axiom vs GMGN vs Trojan vs Maestro, Solana + EVM" -seo_title: "Solana trading bot execution quality 2026: Axiom, GMGN, Trojan, Maestro, pump.fun" -seo_description: "Compare on-chain execution quality for Solana trading apps: avg platform fee, priority fee, Jito bundle rate, CU price. Axiom vs GMGN vs Trojan vs Maestro vs pump.fun vs Photon, measured passively from fee accounts, updated hourly." -subtitle: Passive on-chain execution metrics for the top Solana trading apps and Telegram bots. Measured directly from fee-account transactions, no synthetic trades. Priority fee, Jito rate, CU price, and platform fee per transaction. EVM chain revenue (Ethereum, BSC, Base) on the chain tabs. - -category: Trading -status: live -metric: Avg platform fee -unit: sol -higher_is_better: false - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana-exec - -abstract: | - The harness monitors the on-chain fee-receiver accounts for each trading app using - the Solana JSON-RPC getSignaturesForAddress method. For every incoming fee transaction, - it records the priority fee, compute units consumed, CU price, presence of a Jito tip, - and the SOL amount transferred to the fee account. Samples are bucketed by hour in - PostgreSQL and materialised every 5 minutes. No trades are simulated; the collector - reads only existing on-chain activity. For EVM chains (Ethereum, BSC, Base), a separate - collector tracks USDC and native ETH/BNB transfers to each platform's fee address using - eth_getLogs on public RPCs; no trace API required. - -methodology: - - "Solana source: Helius RPC getSignaturesForAddress on each platform's fee wallet. 100 transactions sampled per poll (every ~5 min)." - - "Priority fee: transaction fee minus the 5 000-lamport base fee per signature. Paid by the user to compete for block space." - - "CU price: priority fee divided by compute units consumed (microlamports/CU). p50/p95 from sampled CU data." - - "Jito rate: fraction of sampled transactions tipping one of the 8 official Jito tip accounts." - - "Platform fee: average SOL transferred to the platform's fee account per incoming transaction." - - "Tx count: total transactions at the fee account over the window, from raw getSignaturesForAddress counts (not just the 100-tx sample)." - - "EVM source: eth_getLogs for USDC (ERC-20) transfers + native ETH/BNB transfers to each platform's fee address. Base chain: USDC only (no free trace API for native)." - - "EVM cadence: block-by-block scanning, bootstrapped 30 days back on first run, then continuous." - - "All measurements are passive; no test transactions, no funded wallets, no on-chain footprint." - -findings: - - "Axiom leads Solana trading apps by transaction volume, processing over 400K fee transactions per 24h across its 20 fee wallets." - - "GMGN charges the highest average platform fee per transaction among actively-charging platforms, reflecting its higher-notional trader base." - - "Maestro has the highest Jito bundle rate, indicating MEV-sensitive routing for its Telegram bot users." - - "Photon has the highest CU price p95, showing aggressive compute-unit bidding during peak hours." - - "pump.fun moved to a fee-free model on August 7 2026; bonding-curve trading continues but the protocol no longer collects a per-swap fee in native SOL. PumpSwap protocol fees arrive as WSOL on ATA recipients and are not captured by this harness's SOL-native collector, so the platform fee row understates true pump.fun revenue." - -faq: - - q: "What is platform fee vs priority fee?" - a: "Priority fee is paid to Solana validators to compete for block space; it does not go to the trading app. Platform fee is the SOL transferred to the trading app's own fee wallet per transaction, which is the actual revenue the platform captures from each trade." - - q: "Why does Trojan show a near-zero Jito rate?" - a: "Trojan does not appear to use Jito MEV bundles for its standard execution path. This is consistent with its design as a Telegram bot that prioritises simplicity over MEV protection." - - q: "How is transaction count measured?" - a: "Tx count comes from getSignaturesForAddress on the platform's fee wallet(s), which gives the total number of transactions that sent fees to that address. This is the full population count, not a sample; the 100-tx sample is used only for fee amount and CU metrics." - - q: "Why are EVM revenues lower than Solana revenues?" - a: "Most platforms primarily target Solana users. EVM fee collection varies: some platforms charge mostly in native ETH/BNB via internal transactions which are not traceable without a trace API. The EVM figures reflect directly visible ERC-20 (USDC) and native transfers only." - - q: "How often is data updated?" - a: "Solana metrics update every 5 minutes (materialiser cycle). EVM revenue updates block-by-block continuously. The page reflects the state at the last materialiser run, shown in the table header." - - q: "Which platforms are tracked on EVM chains?" - a: "GMGN, Maestro, and Banana Gun are tracked on Ethereum. GMGN, Maestro, Axiom, and Banana Gun are tracked on BSC. GMGN, Maestro, and Banana Gun are tracked on Base. pump.fun Terminal is tracked on all three EVM chains." - -providers: - - slug: axiom - name: Axiom - - slug: gmgn - name: GMGN - - slug: trojan - name: Trojan - - slug: maestro - name: Maestro - - slug: pump-fun - name: pump.fun - - slug: photon - name: Photon - - slug: bullx - name: BullX - - slug: banana-gun - name: Banana Gun - -# No prometheus section -- this bench uses a custom page renderer -# at src/app/benchmarks/trading-app-execution/page.tsx that reads -# directly from the exec REST API (exec.openchainbench.com). diff --git a/harnesses/rpc-capabilities/cmd/script/config.go b/harnesses/rpc-capabilities/cmd/script/config.go index 10480a8e..dbfadb58 100644 --- a/harnesses/rpc-capabilities/cmd/script/config.go +++ b/harnesses/rpc-capabilities/cmd/script/config.go @@ -102,6 +102,19 @@ func chains() []Chain { {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_POLKADOT_PUBLICNODE", "https://polkadot-rpc.publicnode.com")}, }, }, + // ─── Hydration (Polkadot parachain, Omnipool DEX) — Substrate + // chain_getHeader probe. Resumed 2026-08-19 after all 5 original + // providers went dead; verified: rpc.hydradx.cloud (Hydration + // official), hydration-rpc.n.dwellir.com (Dwellir). + { + Slug: "hydration", + Name: "Hydration", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "hydration-official", Name: "Hydration", URL: envDefault("RPC_URL_HYDRATION_OFFICIAL", "https://rpc.hydradx.cloud")}, + {Slug: "dwellir", Name: "Dwellir", URL: envDefault("RPC_URL_HYDRATION_DWELLIR", "https://hydration-rpc.n.dwellir.com")}, + }, + }, // ─── Osmosis (Cosmos SDK, CometBFT / Tendermint) — first // Cosmos chain in the cluster. Probed via Tendermint JSON-RPC // `status` (returns sync_info.latest_block_height + diff --git a/next.config.ts b/next.config.ts index ad07b9bb..5dce2a63 100644 --- a/next.config.ts +++ b/next.config.ts @@ -264,7 +264,12 @@ const nextConfig: NextConfig = { }, { source: "/apps/exec", - destination: "/benchmarks/trading-app-execution", + destination: "/trading-apps", + permanent: true, + }, + { + source: "/benchmarks/trading-app-execution", + destination: "/trading-apps", permanent: true, }, { diff --git a/src/app/benchmarks/trading-app-execution/page.tsx b/src/app/benchmarks/trading-app-execution/page.tsx deleted file mode 100644 index 58d2415a..00000000 --- a/src/app/benchmarks/trading-app-execution/page.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import type { Metadata } from "next"; -import { readFileSync } from "fs"; -import { join } from "path"; -import yaml from "js-yaml"; -import Link from "next/link"; -import { pageMetadata } from "@/lib/page-metadata"; -import { safeJsonLd, buildBreadcrumbJsonLd, buildFaqPageJsonLd } from "@/lib/jsonld"; -import { SITE } from "@/data/site"; -import { fetchExecLeaderboard } from "@/lib/solana-exec"; -import { ExecBenchTable } from "@/components/exec-bench-table"; - -export const revalidate = 60; - -type BenchMeta = { - faq: { q: string; a: string }[]; - methodology: string[]; - findings: string[]; - subtitle: string; -}; - -function loadBenchMeta(): BenchMeta { - const raw = readFileSync( - join(process.cwd(), "benchmarks/trading-app-execution.yml"), - "utf-8", - ); - return yaml.load(raw) as BenchMeta; -} - -export const metadata: Metadata = pageMetadata({ - path: "/benchmarks/trading-app-execution", - title: - "Trading App Execution Quality: Axiom vs GMGN vs Trojan vs Maestro | OpenChainBench", - description: - "Compare on-chain execution quality for Solana trading apps: Jito rate, CU price, priority fee, platform fee. Axiom vs GMGN vs Trojan vs Maestro, measured passively from fee accounts.", -}); - -export default async function TradingAppExecutionPage() { - const [data, meta] = await Promise.all([ - fetchExecLeaderboard(), - Promise.resolve(loadBenchMeta()), - ]); - - const breadcrumb = buildBreadcrumbJsonLd([ - { name: "Home", item: SITE.url }, - { name: "Benchmarks", item: `${SITE.url}/benchmarks` }, - { - name: "Trading App Execution", - item: `${SITE.url}/benchmarks/trading-app-execution`, - }, - ]); - - const faqJsonLd = buildFaqPageJsonLd( - meta.faq, - `${SITE.url}/benchmarks/trading-app-execution`, - ); - - return ( -
-