diff --git a/benchmarks/solana-avg-trade-size.yml b/benchmarks/terminal-avg-trade-size.yml similarity index 99% rename from benchmarks/solana-avg-trade-size.yml rename to benchmarks/terminal-avg-trade-size.yml index ff0f8b534..13000f110 100644 --- a/benchmarks/solana-avg-trade-size.yml +++ b/benchmarks/terminal-avg-trade-size.yml @@ -1,6 +1,6 @@ # OpenChainBench. Bench № 206 -slug: solana-avg-trade-size +slug: terminal-avg-trade-size number: "206" title: "Average swap size per trading terminal: who carries the biggest tickets" seo_title: "Average trade size by trading terminal 2026" diff --git a/benchmarks/solana-unique-traders.yml b/benchmarks/terminal-swap-transactions.yml similarity index 98% rename from benchmarks/solana-unique-traders.yml rename to benchmarks/terminal-swap-transactions.yml index 552b66f97..0eb3355d2 100644 --- a/benchmarks/solana-unique-traders.yml +++ b/benchmarks/terminal-swap-transactions.yml @@ -1,6 +1,6 @@ # OpenChainBench. Bench № 207 -slug: solana-unique-traders +slug: terminal-swap-transactions number: "207" title: "Daily swap transactions per trading terminal: Axiom vs Fomo vs pump.fun vs GMGN" seo_title: "Daily swap transactions by trading terminal 2026" @@ -51,7 +51,7 @@ methodology: - "Latest complete day, not a rolling 24 hours: the source publishes daily and its latest day is normally yesterday. A terminal with no activity on that day carries no figure and reads unresponsive rather than having its last live day carried forward. BasedBot is the live case, with volume on Robinhood Chain and almost none on Solana." - "Stale source: a day more than 3 whole days behind, or a terminal the source stops returning, has its gauges deleted and reads unresponsive. An old figure is never republished as current, because these gauges are scraped every 60 seconds and read through a 24h window, which would average a frozen figure in as though it had just been measured." - "Two freshness layers, because they fail differently: terminal_activity_last_success_unix says the harness is still running, and terminal_activity_health says this particular terminal and chain published a day inside the window. A harness that runs while its source freezes trips the second, not the first." - - "Scope: seven chains as tabs plus an all-chains total, from the ten the harness measures. The slug still reads solana- because this bench was Solana-only until 2026-10-07 and renaming a slug is a separate change; the page, its title and its default view are not Solana-only any more." + - "Scope: seven chains as tabs plus an all-chains total, from the ten the harness measures. The remaining three carry one or two terminals each, which is a list rather than a comparison." - "Not scored here: what those transactions cost. A terminal can lead on transaction count and be the most expensive way to route a swap; benches 268 and 279 measure that." findings: diff --git a/src/app/trading-apps/page.tsx b/src/app/trading-apps/page.tsx index d6e3a87e5..7082591c9 100644 --- a/src/app/trading-apps/page.tsx +++ b/src/app/trading-apps/page.tsx @@ -33,8 +33,8 @@ const ALL_BENCH_SLUGS = [ "terminal-fill-quality", "solana-trading-platform-wars", "solana-dex-volume", - "solana-unique-traders", - "solana-avg-trade-size", + "terminal-swap-transactions", + "terminal-avg-trade-size", "trading-platform-wallets", "solana-launchpad-wars", "memecoin-platforms", @@ -51,8 +51,8 @@ const ALL_GROUPS = [ items: [ { slug: "solana-trading-platform-wars", title: "Volume and commission" }, { slug: "solana-dex-volume", title: "DEX volume & protocol revenue" }, - { slug: "solana-unique-traders", title: "Swap transactions" }, - { slug: "solana-avg-trade-size", title: "Average trade size" }, + { slug: "terminal-swap-transactions", title: "Swap transactions" }, + { slug: "terminal-avg-trade-size", title: "Average trade size" }, { slug: "trading-platform-wallets", title: "Daily active wallets" }, ], }, @@ -110,7 +110,7 @@ export default async function TradingAppsHubPage() { // tehcscreener API on 2026-10-07 and are in the staging pipeline for the 24h // window and the audit round every bench serves on production after, so say // that rather than naming a blocker that has been cleared. - const pausedNote = isDevOnlyBench("solana-unique-traders") + const pausedNote = isDevOnlyBench("terminal-swap-transactions") ? "Benches 203 platform fee rates, 206 average trade size, 207 swap transactions and 232 active wallets were re-sourced on 2026-10-07 and are completing validation on staging. " : ""; const kpiCol = COLUMNS.find( diff --git a/src/data/bench-published.json b/src/data/bench-published.json index 79d36d935..fde7dfd39 100644 --- a/src/data/bench-published.json +++ b/src/data/bench-published.json @@ -178,12 +178,10 @@ "sei-rpc": "2026-07-26T14:46:53.000Z", "sentinel-rpc": "2026-08-28T18:56:40.000Z", "shentu-rpc": "2026-08-29T17:19:43.000Z", - "solana-avg-trade-size": "2026-08-13T00:01:53.000Z", "solana-dex-volume": "2026-08-12T19:45:32.000Z", "solana-launchpad-wars": "2026-08-11T14:35:34.000Z", "solana-rpc": "2026-07-12T15:37:15.000Z", "solana-trading-platform-wars": "2026-08-11T15:07:42.000Z", - "solana-unique-traders": "2026-08-13T00:44:06.000Z", "soneium-rpc": "2026-07-03T22:44:42.000Z", "songbird-rpc": "2026-08-05T14:29:04.000Z", "sonic-rpc": "2026-07-03T22:44:42.000Z", @@ -197,8 +195,10 @@ "swellchain-rpc": "2026-08-02T21:30:41.000Z", "taiko-rpc": "2026-07-03T22:44:42.000Z", "telos-rpc": "2026-08-05T14:29:04.000Z", + "terminal-avg-trade-size": "2026-08-13T00:01:53.000Z", "terminal-execution-quality": "2026-09-24T18:51:48.000Z", "terminal-fill-quality": "2026-09-18T08:17:28.000Z", + "terminal-swap-transactions": "2026-08-13T00:44:06.000Z", "terra-rpc": "2026-08-04T15:53:48.000Z", "tezos-rpc": "2026-08-18T23:06:04.000Z", "token-deployment-cost": "2026-06-09T15:34:12.000Z", diff --git a/src/lib/removed-benches.ts b/src/lib/removed-benches.ts index 35c2e97f0..a972a67df 100644 --- a/src/lib/removed-benches.ts +++ b/src/lib/removed-benches.ts @@ -177,36 +177,23 @@ export const DEV_ONLY_BENCH_SLUGS = new Set([ // of the eight rows have no maker rate at all. Un-gate after a 24h // window and an audit round. "perp-fee-disclosure", - // The Dune trial ended 2026-10-02 and no paid plan was committed, so these - // four stood down. The note here used to say they "have no free equivalent - // for what they measure"; that stopped being true on 2026-10-07, when they - // were re-sourced to the public tehcscreener API (Allium-backed, no key) via - // harnesses/terminal-activity. Bench 201 had already moved to DeFiLlama's - // free adapters (see bench 201 and 267). + // Benches 203, 206, 207 and 232 left this list on 2026-10-07. // - // They stay here for the ordinary reason, not the old one: a re-sourced - // bench needs a full 24h window of the new series and an audit round before - // production serves it. Un-gate condition: both of those, not a Dune plan. + // They were gated on 2026-10-02 when the Dune trial ended, under a note + // saying they "have no free equivalent for what they measure". They were + // re-sourced the same week to the public tehcscreener API (Allium-backed, + // no key) via harnesses/terminal-activity: a different vendor, not a + // cheaper route to the same one. Bench 201 had already moved to DeFiLlama. // - // The move was not a cheaper route to the same numbers. Fee-wallet - // attribution could not see a terminal that charges no fee, so pump.fun was - // structurally absent from three of the four and Fomo from the wallet count; - // all five rows that were blank for source reasons now carry a figure, and - // the comparison is per chain rather than Solana-only. + // Un-gated after the audit round rather than after a 24h window, because + // these four read instant gauges and declare no range selector: the only + // thing a day buys them is a complete chart, which is cosmetic. What the + // audit round caught is in #2843, #2844, #2846, #2848 and #2849. // - // 206 average trade size, 207 swap transactions, 232 active wallets: all - // three now read terminal-activity. Un-gate condition: a 24h window of the - // new series plus an audit round. - "solana-avg-trade-size", - "solana-unique-traders", - "trading-platform-wallets", - // 203 memecoin platform fee rates: the headline take rate now reads - // terminal-activity. Its fee-paying-rate panel was removed rather than - // re-sourced: that column measured the share of transactions that actually - // paid a fee, which the new source does not report and which none of its - // fields reconstruct. Approximating it would have put a derived number where - // a measured one stood. Un-gate condition: a 24h window plus an audit round. - "memecoin-platforms", + // 206 and 207 were renamed on the way out, from solana-avg-trade-size and + // solana-unique-traders. Neither was ever served on production, so there is + // no signal to preserve and no redirect is owed: their default view is + // all-chains now and the old slugs claimed otherwise. ]); /** diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 291209776..11bfc68c0 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -477,7 +477,9 @@ const loadBenchmarkUnfilteredCached = unstable_cache( // v88 (2026-09-30): GetBlock joins the keyed cohort on the nine chain RPC // benches. The provider set of those benches changed, so v87 entries hold a // keyed cohort of three and a GetBlock exclusion row that is no longer true. - ["bench-unfiltered-v88", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v89: four benches left DEV_ONLY for production (203, 206, 207, 232) and + // two of them changed slug, so every cached bench set is stale. + ["bench-unfiltered-v89", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); @@ -716,7 +718,9 @@ const loadAllBenchmarksCached = unstable_cache( // Dune benches gated). // v81: lockstep with bench-unfiltered-v88 (GetBlock joins the keyed cohort // on the nine chain RPC benches). - ["all-benchmarks-v81", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v82: lockstep with bench-unfiltered-v89 (four benches to production, two + // renamed). + ["all-benchmarks-v82", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] }, ); export const loadAllBenchmarks = cache(loadAllBenchmarksCached); @@ -819,7 +823,9 @@ const loadBenchmarkFiltered = unstable_cache( // v32: lockstep with bench-unfiltered-v88. The GetBlock row lives only in // the tier=keyed variants, so without this bump the keyed tabs keep serving // a three-provider cohort. - ["bench-filters-v32", process.env.VERCEL_ENV === "production" ? "prod" : "all"], + // v33: lockstep with bench-unfiltered-v89. The four new production benches + // carry a chain dimension the cached filter sets do not know about. + ["bench-filters-v33", process.env.VERCEL_ENV === "production" ? "prod" : "all"], { revalidate: 300, tags: ["benchmarks"] } ); diff --git a/src/lib/trading-apps.ts b/src/lib/trading-apps.ts index 95a8bf538..51083ca89 100644 --- a/src/lib/trading-apps.ts +++ b/src/lib/trading-apps.ts @@ -79,7 +79,7 @@ export const ALL_TRADING_APP_COLUMNS: readonly TradingAppColumn[] = [ key: "traders", label: "Swap Tx", scope: "solana", - bench: "solana-unique-traders", + bench: "terminal-swap-transactions", fmt: fmtCount, tip: "Swap transactions routed on one complete UTC day, on Solana, from the tehcscreener API. Counted directly rather than inferred from who paid a fee, so a terminal that charges nothing is still counted: pump.fun now appears, having been structurally invisible before.", higherBetter: true, @@ -88,7 +88,7 @@ export const ALL_TRADING_APP_COLUMNS: readonly TradingAppColumn[] = [ key: "tradeSize", label: "Avg Trade", scope: "solana", - bench: "solana-avg-trade-size", + bench: "terminal-avg-trade-size", fmt: fmtUSD, tip: "One complete UTC day's routed Solana volume divided by that day's swap count, from the tehcscreener API. Includes bots and MEV, so a terminal carrying heavy sniping reads lower than a human-only baseline would. Padre, Phantom and Bloom left this column on 2026-10-07: the current source does not cover them, and a row that cannot be measured is removed rather than shown as zero.", higherBetter: true, @@ -152,8 +152,8 @@ const SOURCE_BY_BENCH: Record = { // fee-wallet attribution could not see a terminal that charges no fee, so // pump.fun was structurally absent from three of these four columns and // Fomo from the wallet one. - "solana-unique-traders": "tehcscreener", - "solana-avg-trade-size": "tehcscreener", + "terminal-swap-transactions": "tehcscreener", + "terminal-avg-trade-size": "tehcscreener", "trading-platform-wallets": "tehcscreener", "memecoin-platforms": "tehcscreener", "solana-trading-platform-wars": "DeFiLlama",