From fe5f2f28d4a9d93c99a61aa0946babe79c17b4e1 Mon Sep 17 00:00:00 2001
From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com>
Date: Thu, 13 Aug 2026 16:44:44 +0200
Subject: [PATCH 1/4] fix(204): restore ExecBenchTable page (#1924)
---
.../benchmarks/trading-app-execution/page.tsx | 151 +++++++++---------
1 file changed, 76 insertions(+), 75 deletions(-)
diff --git a/src/app/benchmarks/trading-app-execution/page.tsx b/src/app/benchmarks/trading-app-execution/page.tsx
index ebfa6b11..babfe560 100644
--- a/src/app/benchmarks/trading-app-execution/page.tsx
+++ b/src/app/benchmarks/trading-app-execution/page.tsx
@@ -1,62 +1,56 @@
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 { fetchEVMRevenue } from "@/lib/evm-exec";
-import { ExecChainTabs } from "@/components/exec-chain-tabs";
+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",
+ title:
+ "Trading App Execution Quality: Axiom vs GMGN vs Trojan vs Maestro | OpenChainBench",
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, measured passively from fee accounts, updated hourly.",
+ "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.",
});
-const 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: "How is transaction count measured?",
- a: "Tx count comes from getSignaturesForAddress on the platform's fee wallet(s), giving 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 does Trojan show a near-zero Jito rate?",
- a: "Trojan does not appear to use Jito MEV bundles for its standard execution path, consistent with its design as a Telegram bot that prioritises simplicity over MEV protection.",
- },
- {
- 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 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 timestamp in the table header reflects the last materialiser run.",
- },
- {
- 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.",
- },
-];
-
export default async function TradingAppExecutionPage() {
- const [solanaData, evmData] = await Promise.all([
+ const [data, meta] = await Promise.all([
fetchExecLeaderboard(),
- fetchEVMRevenue(),
+ 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` },
+ {
+ name: "Trading App Execution",
+ item: `${SITE.url}/benchmarks/trading-app-execution`,
+ },
]);
const faqJsonLd = buildFaqPageJsonLd(
- FAQ,
+ meta.faq,
`${SITE.url}/benchmarks/trading-app-execution`,
);
@@ -65,24 +59,36 @@ export default async function TradingAppExecutionPage() {
-
+ {faqJsonLd && (
+
+ )}
- {/* Breadcrumb */}
- {/* Header */}
- Passive on-chain execution metrics for the top Solana trading apps and Telegram bots.
- Priority fee, Jito rate, CU price, and platform fee per transaction, measured directly
- from fee accounts, no synthetic trades. EVM chain revenue on the chain tabs below.
+ {meta.subtitle}
-
+
- {/* Methodology */}
-
Methodology
-
- Priority fee = total transaction fee minus the 5 000-lamport base fee per signature. Paid to validators, not to the platform.
-
-
- CU price = priority fee ÷ compute units consumed (microlamports/CU). p50/p95 shows median and tail pressure on each platform.
-
-
- Jito rate = fraction of transactions tipping one of the 8 official Jito tip accounts. Higher = more MEV-sensitive routing.
-
-
- Platform fee = average SOL transferred to the platform's fee account per incoming transaction. This is actual protocol revenue per trade.
+
+ Methodology
-
- Tx count = total transactions at the fee wallet over the window (getSignaturesForAddress), not a sample. Fee metrics use a 100-tx sample per poll.
-
-
- EVM = USDC (ERC-20) + native ETH/BNB direct transfers to each platform's fee address. Base chain: USDC only (no free trace API). Updated block-by-block.
-
@@ -157,10 +156,12 @@ export default async function TradingAppExecutionPage() {
- {/* Back link */}
-
- ← Back to trading app revenue
+
+ Back to trading app revenue
From 090929f91eeb506dec9d99cd4778f9b6cc80bcb4 Mon Sep 17 00:00:00 2001
From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com>
Date: Thu, 13 Aug 2026 17:14:45 +0200
Subject: [PATCH 2/4] fix(206/207): remove em-dashes, shorten bench 207
disclaimer under 500 chars
---
benchmarks/solana-avg-trade-size.yml | 4 ++--
benchmarks/solana-unique-traders.yml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/benchmarks/solana-avg-trade-size.yml b/benchmarks/solana-avg-trade-size.yml
index 906133f2..34e320e1 100644
--- a/benchmarks/solana-avg-trade-size.yml
+++ b/benchmarks/solana-avg-trade-size.yml
@@ -40,7 +40,7 @@ methodology:
- "Average swap size: solana_platform_volume_24h_usd / solana_platform_trades_24h, computed in PromQL."
- "Attribution: Mobula assigns each on-chain swap to a platform via referral tags, program IDs and memo fields embedded in transactions. Each swap is attributed to exactly one platform."
- "Bot inclusion: all attributed swaps are counted including bots and MEV. Platforms with high bot activity (notably pump.fun snipers) show lower average sizes than human-only baselines would suggest."
- - "pump.fun: sourced from byLaunchpad (bonding-curve swaps on pump.fun's own site, $123M+ on Aug 13 2026 confirming bonding-curve volume persists under the fee-free model). Trades routed through GMGN or Axiom to pump.fun tokens count under those platforms. Mobula documents trades as swap-level count (not fee-event gated); whether zero-fee swaps post August 7 are indexed identically is an implementation detail not confirmed by docs — pending Mobula support response."
+ - "pump.fun: sourced from byLaunchpad (bonding-curve swaps on pump.fun's own site, $123M+ on Aug 13 2026 confirming bonding-curve volume persists under the fee-free model). Trades routed through GMGN or Axiom to pump.fun tokens count under those platforms. Mobula documents trades as swap-level count (not fee-event gated); whether zero-fee swaps post August 7 are indexed identically is an implementation detail not confirmed by docs, pending Mobula support response."
- "Meteora DBC excluded: Meteora DBC counts LP provision events and micro-rebalances as trades, making its avg size of ~$12 not comparable to pure swap activity."
findings:
@@ -48,7 +48,7 @@ findings:
- "pump.fun has the smallest average swap size in the set, dominated by bot sniping and micro-cap degen retail flow on its bonding-curve launchpad."
- "GMGN and Trojan consistently lead on average swap size, serving more sophisticated traders with larger position sizes. Note: Mobula's volume attribution for GMGN and Trojan is broader than fee-paying volume (only ~8% of attributed volume generates a fee event per bench 203), so average size comparisons with pump.fun should be treated as directional."
- "Fomo sits mid-market between retail launchpad activity and professional terminals."
- - "Trade count tells the other story: pump.fun processes more trades per day than all other platforms combined. Mobula defines trades as swap-level count; whether zero-fee bonding-curve swaps post August 7 are included identically is unconfirmed — pending Mobula support."
+ - "Trade count tells the other story: pump.fun processes more trades per day than all other platforms combined. Mobula defines trades as swap-level count; whether zero-fee bonding-curve swaps post August 7 are included identically is unconfirmed, pending Mobula support."
source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana-launchpad-wars
diff --git a/benchmarks/solana-unique-traders.yml b/benchmarks/solana-unique-traders.yml
index bce2ccb9..fdfc5f3e 100644
--- a/benchmarks/solana-unique-traders.yml
+++ b/benchmarks/solana-unique-traders.yml
@@ -14,7 +14,7 @@ unit: count
higher_is_better: true
disclaimer: |
- The metric counts unique transaction IDs (not unique wallet addresses) whose transactions touched a known platform fee wallet in the rolling 24h window. This is a proxy for unique daily active traders; the actual unique-wallet count is typically 3-10x lower since active traders execute multiple trades per day. Counts include bots, MEV searchers, and multi-wallet traders. A transaction that touches two platform fee wallets is counted in both. pump.fun tracking relies on its 9 on-chain fee wallets; since pump.fun cut bonding-curve trading fees to 0% on 2026-08-07, its count reflects only transactions generating graduation and creator fees and substantially understates true trading activity.
+ Counts unique tx_ids touching a platform fee wallet in the rolling 24h window, not unique wallets. Actual unique-wallet count is 3-10x lower since active traders execute multiple trades per day. Includes bots, MEV searchers, and multi-wallet traders. A tx touching two fee wallets is counted in both. pump.fun is substantially undercounted since its bonding-curve trading fees were cut to 0% on 2026-08-07; its count now reflects only graduation and creator fee events.
seo_intro: |
GMGN leads Solana trading terminals by unique daily active wallets, serving a broad
From 38296889e2aaaaa087b89ce3b353c49fcca52f04 Mon Sep 17 00:00:00 2001
From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com>
Date: Thu, 13 Aug 2026 17:16:45 +0200
Subject: [PATCH 3/4] fix: shorten bench 207 provider formulas under 240-char
Zod cap
---
benchmarks/solana-unique-traders.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/benchmarks/solana-unique-traders.yml b/benchmarks/solana-unique-traders.yml
index fdfc5f3e..5b7ab203 100644
--- a/benchmarks/solana-unique-traders.yml
+++ b/benchmarks/solana-unique-traders.yml
@@ -77,7 +77,7 @@ providers:
- slug: pump-fun
name: pump.fun
tag: "Solana meme launchpad"
- formula: "Unique wallet addresses (distinct fee_payer) whose transaction touched a pump.fun fee wallet in the last 24h (Dune: solana.account_activity, hourly refresh). Substantially undercounted post 2026-08-07 due to zero-fee policy."
+ formula: "Unique tx count touching pump.fun fee wallets in the last 24h (Dune: solana.account_activity, hourly). Undercounted post 2026-08-07 due to zero bonding-curve fee."
queries:
p50: solana_platform_unique_traders_24h{platform="pump-fun"}
p90: solana_platform_unique_traders_24h{platform="pump-fun"}
@@ -116,7 +116,7 @@ providers:
- slug: fomo
name: Fomo
tag: "Solana mobile trading app"
- formula: "Unique tx count for transactions where Fomo's USDC fee wallet received a positive USDC inflow in the last 24h (Dune: solana.account_activity token_balance_owner match, hourly refresh). Captures on-chain per-trade Jupiter referral fee events; off-chain relay fees excluded."
+ formula: "Unique tx count where Fomo's fee wallet (token_balance_owner match) received USDC inflow in the last 24h (Dune: solana.account_activity, hourly). On-chain Jupiter referral fees only; off-chain relay excluded."
queries:
p50: solana_platform_unique_traders_24h{platform="fomo"}
p90: solana_platform_unique_traders_24h{platform="fomo"}
From aa87040949b9d63c1b4f1d2955bde3afe5c3f7c2 Mon Sep 17 00:00:00 2001
From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com>
Date: Thu, 13 Aug 2026 17:59:44 +0200
Subject: [PATCH 4/4] fix: em dash in zetachain-rpc findings
---
benchmarks/zetachain-rpc.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/benchmarks/zetachain-rpc.yml b/benchmarks/zetachain-rpc.yml
index 47795c7f..a7e540e2 100644
--- a/benchmarks/zetachain-rpc.yml
+++ b/benchmarks/zetachain-rpc.yml
@@ -34,7 +34,7 @@ methodology:
- "Chain scope: every query on this page is pinned to `chain=\"zetachain\"`. Provider coverage: 1 no-key endpoint (Thirdweb). BlockPI returned 404; AllThatNode DNS is dead."
findings:
- - "Provider coverage is critically limited: only Thirdweb (`7000.rpc.thirdweb.com`) is configured, and its current success rate from our probes is below 1% — the endpoint responds to one-off requests but blocks sustained per-IP probing. Latency figures reflect the rare successful call and do not represent reliable availability. BlockPI and AllThatNode are dead for ZetaChain; no other free keyless endpoint was found operational at audit time."
+ - "Provider coverage is critically limited: only Thirdweb (`7000.rpc.thirdweb.com`) is configured, and its current success rate from our probes is below 1%; the endpoint responds to one-off requests but blocks sustained per-IP probing. Latency figures reflect the rare successful call and do not represent reliable availability. BlockPI and AllThatNode are dead for ZetaChain; no other free keyless endpoint was found operational at audit time."
- "Manual use of `7000.rpc.thirdweb.com` works for individual calls. The 0.5% probe success rate is an artifact of rate-limiting against our fixed Railway probe IPs, not a general outage."
faq: