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/2] 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
-- 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. -
-+ {meta.methodology.map((item, i) => { + const colonIdx = item.indexOf(": "); + if (colonIdx === -1) return
{item}
; + const label = item.slice(0, colonIdx); + const rest = item.slice(colonIdx + 2); + return ( ++ {label}: {rest} +
+ ); + })} +FAQ
++ FAQ +
{item.q}
{item.a}
@@ -157,10 +156,12 @@ export default async function TradingAppExecutionPage() {