diff --git a/benchmarks/memecoin-platforms.yml b/benchmarks/memecoin-platforms.yml index 26f9a9e4..24a69c72 100644 --- a/benchmarks/memecoin-platforms.yml +++ b/benchmarks/memecoin-platforms.yml @@ -12,7 +12,7 @@ metric: Median fee unit: pct disclaimer: | - Measures explicit, separately charged platform fees on sampled trades above $5 USD. Costs embedded in pool pricing (bonding-curve spread, AMM LP fees, price impact) are not captured. Effective round-trip cost may differ — see methodology for sampling scope. + Measures explicit, separately charged platform fees on sampled trades above $5 USD. Costs embedded in pool pricing (bonding-curve spread, AMM LP fees, price impact) are not captured. Effective round-trip cost may differ; see methodology for sampling scope. source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/memecoin-platforms diff --git a/benchmarks/trading-app-execution.yml b/benchmarks/trading-app-execution.yml index d0310b56..d05e885a 100644 --- a/benchmarks/trading-app-execution.yml +++ b/benchmarks/trading-app-execution.yml @@ -4,8 +4,8 @@ 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. +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 @@ -23,7 +23,7 @@ abstract: | 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. + 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)." @@ -34,7 +34,7 @@ methodology: - "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." + - "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." @@ -45,7 +45,7 @@ findings: 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." + 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?" diff --git a/src/app/apps/page.tsx b/src/app/apps/page.tsx index 0db64487..a83010c0 100644 --- a/src/app/apps/page.tsx +++ b/src/app/apps/page.tsx @@ -7,13 +7,14 @@ import { fetchExecLeaderboard } from "@/lib/solana-exec"; import { fetchSolPrice } from "@/lib/sol-price"; import { fetchFOMORelayFees } from "@/lib/dune"; import { TRADING_APPS } from "@/lib/trading-apps-config"; +import { fetchDeFiLlamaData, type DLPlatformData } from "@/lib/defillama"; import { TradingAppsLeaderboard, type UnifiedAppRow } from "@/components/trading-apps-leaderboard"; import { RevenueSummary } from "@/components/revenue-summary"; import { ExecChainTabs } from "@/components/exec-chain-tabs"; import Link from "next/link"; const DESCRIPTION = - "Protocol fees collected by trading apps: meme bots and telegram bots. On-chain data, updated hourly."; + "Protocol fees collected by trading apps and meme trading terminals — Solana, Ethereum, BSC. On-chain data, updated every 5 min."; export const metadata: Metadata = pageMetadata({ path: "/apps", @@ -26,13 +27,22 @@ export const revalidate = 300; const WINDOWS = ["24h", "7d", "30d"] as const; export default async function AppsHubPage() { - const [evmData, solanaData, solPrice, fomoRelay] = await Promise.all([ + const dlSlugMap = Object.fromEntries( + TRADING_APPS.filter((a) => a.defillamaSlug).map((a) => [a.id, a.defillamaSlug!]) + ); + + const [evmData, solanaData, solPrice, fomoRelay, dlData] = await Promise.all([ fetchEVMRevenue(), fetchExecLeaderboard(), fetchSolPrice(), fetchFOMORelayFees(), + fetchDeFiLlamaData(dlSlugMap), ]); + // Market share = each platform's DL 24h fees / cohort total (active only) + const activeDlTotal = TRADING_APPS.filter((a) => !a.inactive && a.defillamaSlug) + .reduce((sum, a) => sum + (dlData.get(a.id)?.total24h ?? 0), 0); + const evmByPlatform = new Map( (evmData?.platforms ?? []).map((p) => [p.platform, p]) ); @@ -97,6 +107,11 @@ export default async function AppsHubPage() { }; } + const dl = dlData.get(meta.id) ?? null; + const marketSharePct = dl && activeDlTotal > 0 && !meta.inactive + ? (dl.total24h / activeDlTotal) * 100 + : null; + return { meta, windows, @@ -106,6 +121,8 @@ export default async function AppsHubPage() { base: baseChain?.coverage === "stable-only", robinhood: rhChain?.coverage === "stable-only", }, + dl, + marketSharePct, }; }); @@ -135,7 +152,7 @@ export default async function AppsHubPage() {
diff --git a/src/components/trading-apps-leaderboard.tsx b/src/components/trading-apps-leaderboard.tsx
index d4fc8a11..dd645631 100644
--- a/src/components/trading-apps-leaderboard.tsx
+++ b/src/components/trading-apps-leaderboard.tsx
@@ -5,6 +5,7 @@ import Link from "next/link";
import { useState } from "react";
import { logoPath } from "@/lib/logo-manifest";
import type { AppMeta } from "@/lib/trading-apps-config";
+import type { DLPlatformData } from "@/lib/defillama";
type FeeWindow = {
solana: number | null;
@@ -19,6 +20,8 @@ export type UnifiedAppRow = {
meta: AppMeta;
windows: Record
+ DL Rev = net revenue per DeFiLlama (fees minus referral/cashback). ² Venue-level: bonding curve + creator slice, not frontend-only.
+
{sorted.map((row, i) => {
- const { meta, stableOnly } = row;
+ const { meta, dl, marketSharePct } = row;
const fees = row.windows[window] ?? { solana: null, ethereum: null, bsc: null, base: null, robinhood: null, total: 0 };
const logo = meta.logoKey ? logoPath(meta.logoKey) : null;
+ const evmTotal = (fees.ethereum ?? 0) + (fees.bsc ?? 0) + (fees.base ?? 0) + (fees.robinhood ?? 0);
return (
#
App
- Category
+ Type
Solana
- Ethereum
- BSC
- Base
- Robinhood
+ ETH/BSC/Base
+ DL Rev
+ 50% daily swing (possible data gap)" : undefined}
+ >
+ Share{hasExtremeMove ? " ⚠" : ""}
+
Total {window}
@@ -181,9 +200,10 @@ export function TradingAppsLeaderboard({
)}
+ {dl?.change_1d !== null && dl?.change_1d !== undefined && !meta.inactive && dl.total24h >= 5000 && (
+ (() => {
+ const extreme = Math.abs(dl.change_1d) > 50;
+ return (
+ = 0
+ ? "text-green-400 bg-green-500/10"
+ : "text-red-400 bg-red-500/10"
+ }`}
+ title={extreme ? "Large move — possible data ingestion gap, not verified" : "DeFiLlama revenue 24h vs prior 24h"}
+ >
+ {extreme ? "⚠ " : dl.change_1d >= 0 ? "+" : ""}{dl.change_1d.toFixed(1)}%
+
+ );
+ })()
+ )}
{meta.benchUrl && (
-
- {CATEGORY_LABEL[meta.category]}
-
+
+ {evmTotal > 0 ? (
+ {fmtUSD(evmTotal)}
+ ) : —}
+
+
+ {dl && !meta.inactive ? (
+
+ {fmtUSD(dl.total24h)}
+ {meta.defillamaScope === "venue" && (
+ ²
+ )}
+
+ ) : —}
+
+
+ {marketSharePct !== null ? (
+ (() => {
+ const rowExtreme = !meta.inactive && dl && Math.abs(dl.change_1d ?? 0) > 50;
+ return rowExtreme ? (
+ ⚠
+ ) : (
+
{fees.total > 0 ? fmtUSD(fees.total) :
@@ -273,6 +348,9 @@ export function TradingAppsLeaderboard({
)}