From 8c9b49832549f910776d1c855bbe090cc9e075bc Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Fri, 21 Aug 2026 16:40:10 +0200 Subject: [PATCH] feat: dune community datasets for all 4 trading-app bench metrics + padre/basedbot + clean refs --- benchmarks/memecoin-platforms.yml | 134 ++++++++++------- benchmarks/solana-avg-trade-size.yml | 137 ++++++++++-------- benchmarks/solana-trading-platform-wars.yml | 22 +-- benchmarks/solana-unique-traders.yml | 132 ++++++++++------- .../dune-platform-volume/cmd/script/dune.go | 70 ++++----- .../dune-platform-volume/cmd/script/main.go | 4 +- .../cmd/script/metrics.go | 39 ++++- src/app/trading-apps/page.tsx | 6 +- 8 files changed, 322 insertions(+), 222 deletions(-) diff --git a/benchmarks/memecoin-platforms.yml b/benchmarks/memecoin-platforms.yml index cb651588..49e4a060 100644 --- a/benchmarks/memecoin-platforms.yml +++ b/benchmarks/memecoin-platforms.yml @@ -66,7 +66,7 @@ source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/memecoi prometheus: window: 24h - freshness_metric: memecoin_platform_health + freshness_metric: dune_platform_fee_rate_pct faq: - q: "What is a take rate?" @@ -87,86 +87,112 @@ faq: providers: - slug: axiom name: Axiom - tag: "Solana trading terminal, 0.9% fee" - formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join). Fees: native SOL inflows to 20 known fee wallets. Fee-paying volume: largest swap in each fee-receiving tx from dex_solana.trades." + tag: "Trading terminal, 0.9% fee" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_axiom_daily, cross-chain), latest complete day." queries: - p50: memecoin_platform_fee_paying_rate_pct{platform="axiom"} - p90: memecoin_platform_fee_paying_rate_pct{platform="axiom"} - p99: memecoin_platform_fee_paying_rate_pct{platform="axiom"} - mean: memecoin_platform_fee_paying_rate_pct{platform="axiom"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="axiom"} - series: memecoin_platform_fee_paying_rate_pct{platform="axiom"} + p50: dune_platform_fee_rate_pct{platform="axiom"} + p90: dune_platform_fee_rate_pct{platform="axiom"} + p99: dune_platform_fee_rate_pct{platform="axiom"} + mean: dune_platform_fee_rate_pct{platform="axiom"} + success: dune_platform_volume_health{platform="axiom"} + sample_size: dune_platform_fees_24h_usd{platform="axiom"} + series: dune_platform_fee_rate_pct{platform="axiom"} - slug: fomo name: Fomo - tag: "Solana mobile trading app" - formula: "24h protocol fee revenue (DeFiLlama Solana) / 24h volume (Mobula lighthouse). Fomo fees include on-chain USDC + off-chain relay fees via DeFiLlama; fee-paying volume not available for Fomo." + tag: "Solana trading platform" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_fomo_sol_daily, Solana), latest complete day." queries: - p50: memecoin_platform_fee_rate_pct{platform="fomo"} - p90: memecoin_platform_fee_rate_pct{platform="fomo"} - p99: memecoin_platform_fee_rate_pct{platform="fomo"} - mean: memecoin_platform_fee_rate_pct{platform="fomo"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="fomo"} - series: memecoin_platform_fee_rate_pct{platform="fomo"} + p50: dune_platform_fee_rate_pct{platform="fomo"} + p90: dune_platform_fee_rate_pct{platform="fomo"} + p99: dune_platform_fee_rate_pct{platform="fomo"} + mean: dune_platform_fee_rate_pct{platform="fomo"} + success: dune_platform_volume_health{platform="fomo"} + sample_size: dune_platform_fees_24h_usd{platform="fomo"} + series: dune_platform_fee_rate_pct{platform="fomo"} - slug: pump-fun name: pump.fun - tag: "Solana meme launchpad + PumpSwap AMM" - formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join). Captures protocol share (0.95%) on bonding curve and PumpSwap trades; creator and LP shares excluded." + tag: "Solana meme launchpad + relay, 0% fee since Aug 2026" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_pumpapp_sol_daily + dataset_pumpfun_relay_daily), latest complete day. fees=0 since fee cut Aug 2026." queries: - p50: memecoin_platform_fee_paying_rate_pct{platform="pump-fun"} - p90: memecoin_platform_fee_paying_rate_pct{platform="pump-fun"} - p99: memecoin_platform_fee_paying_rate_pct{platform="pump-fun"} - mean: memecoin_platform_fee_paying_rate_pct{platform="pump-fun"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="pump-fun"} - series: memecoin_platform_fee_paying_rate_pct{platform="pump-fun"} + p50: dune_platform_fee_rate_pct{platform="pump-fun"} + p90: dune_platform_fee_rate_pct{platform="pump-fun"} + p99: dune_platform_fee_rate_pct{platform="pump-fun"} + mean: dune_platform_fee_rate_pct{platform="pump-fun"} + success: dune_platform_volume_health{platform="pump-fun"} + sample_size: dune_platform_fees_24h_usd{platform="pump-fun"} + series: dune_platform_fee_rate_pct{platform="pump-fun"} - slug: gmgn name: GMGN - tag: "Solana AI trading terminal, 1% fee" - formula: "24h Solana protocol fee revenue (Dune, 9 wallet addresses) / 24h fee-paying volume (Dune tx join). Total revenue across all chains is ~5x higher per DeFiLlama." + tag: "AI trading terminal, ~1% fee, multi-chain" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_gmgn_daily, cross-chain), latest complete day." queries: - p50: memecoin_platform_fee_paying_rate_pct{platform="gmgn"} - p90: memecoin_platform_fee_paying_rate_pct{platform="gmgn"} - p99: memecoin_platform_fee_paying_rate_pct{platform="gmgn"} - mean: memecoin_platform_fee_paying_rate_pct{platform="gmgn"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="gmgn"} - series: memecoin_platform_fee_paying_rate_pct{platform="gmgn"} + p50: dune_platform_fee_rate_pct{platform="gmgn"} + p90: dune_platform_fee_rate_pct{platform="gmgn"} + p99: dune_platform_fee_rate_pct{platform="gmgn"} + mean: dune_platform_fee_rate_pct{platform="gmgn"} + success: dune_platform_volume_health{platform="gmgn"} + sample_size: dune_platform_fees_24h_usd{platform="gmgn"} + series: dune_platform_fee_rate_pct{platform="gmgn"} - slug: photon name: Photon tag: "Solana trading terminal, ~1% fee" - formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join)." + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_photon_daily), latest complete day." queries: - p50: memecoin_platform_fee_paying_rate_pct{platform="photon"} - p90: memecoin_platform_fee_paying_rate_pct{platform="photon"} - p99: memecoin_platform_fee_paying_rate_pct{platform="photon"} - mean: memecoin_platform_fee_paying_rate_pct{platform="photon"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="photon"} - series: memecoin_platform_fee_paying_rate_pct{platform="photon"} + p50: dune_platform_fee_rate_pct{platform="photon"} + p90: dune_platform_fee_rate_pct{platform="photon"} + p99: dune_platform_fee_rate_pct{platform="photon"} + mean: dune_platform_fee_rate_pct{platform="photon"} + success: dune_platform_volume_health{platform="photon"} + sample_size: dune_platform_fees_24h_usd{platform="photon"} + series: dune_platform_fee_rate_pct{platform="photon"} - slug: trojan name: Trojan tag: "Solana Telegram bot, ~0.9% fee" - formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join). Fee is collected in the swap transaction; DeFiLlama Solana match within 6% confirms capture." + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_trojan_daily), latest complete day." queries: - p50: memecoin_platform_fee_paying_rate_pct{platform="trojan"} - p90: memecoin_platform_fee_paying_rate_pct{platform="trojan"} - p99: memecoin_platform_fee_paying_rate_pct{platform="trojan"} - mean: memecoin_platform_fee_paying_rate_pct{platform="trojan"} - success: memecoin_platform_health - sample_size: memecoin_platform_fees_usd_24h{platform="trojan"} - series: memecoin_platform_fee_paying_rate_pct{platform="trojan"} + p50: dune_platform_fee_rate_pct{platform="trojan"} + p90: dune_platform_fee_rate_pct{platform="trojan"} + p99: dune_platform_fee_rate_pct{platform="trojan"} + mean: dune_platform_fee_rate_pct{platform="trojan"} + success: dune_platform_volume_health{platform="trojan"} + sample_size: dune_platform_fees_24h_usd{platform="trojan"} + series: dune_platform_fee_rate_pct{platform="trojan"} + + - slug: padre + name: Terminal + tag: "pump.fun's own trading app (formerly Padre)" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_terminal_daily, cross-chain), latest complete day." + queries: + p50: dune_platform_fee_rate_pct{platform="padre"} + p90: dune_platform_fee_rate_pct{platform="padre"} + p99: dune_platform_fee_rate_pct{platform="padre"} + mean: dune_platform_fee_rate_pct{platform="padre"} + success: dune_platform_volume_health{platform="padre"} + sample_size: dune_platform_fees_24h_usd{platform="padre"} + series: dune_platform_fee_rate_pct{platform="padre"} + + - slug: basedbot + name: BasedBot + tag: "Multi-chain trading bot" + formula: "24h fee rate % (fees_usd / volume_usd * 100) from Dune community datasets (dataset_basedbot_daily, cross-chain), latest complete day." + queries: + p50: dune_platform_fee_rate_pct{platform="basedbot"} + p90: dune_platform_fee_rate_pct{platform="basedbot"} + p99: dune_platform_fee_rate_pct{platform="basedbot"} + mean: dune_platform_fee_rate_pct{platform="basedbot"} + success: dune_platform_volume_health{platform="basedbot"} + sample_size: dune_platform_fees_24h_usd{platform="basedbot"} + series: dune_platform_fee_rate_pct{platform="basedbot"} - slug: maestro name: Maestro tag: "Solana Telegram bot, ~1% fee" - formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join)." + formula: "24h protocol fee revenue (Dune wallet inflows) / 24h fee-paying volume (Dune tx join). No community dataset available; sourced from on-chain fee wallet detection." queries: p50: memecoin_platform_fee_paying_rate_pct{platform="maestro"} p90: memecoin_platform_fee_paying_rate_pct{platform="maestro"} diff --git a/benchmarks/solana-avg-trade-size.yml b/benchmarks/solana-avg-trade-size.yml index 34e320e1..75a66258 100644 --- a/benchmarks/solana-avg-trade-size.yml +++ b/benchmarks/solana-avg-trade-size.yml @@ -54,7 +54,7 @@ source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana- prometheus: window: 24h - freshness_metric: solana_platform_trades_24h + freshness_metric: dune_platform_avg_trade_usd faq: - q: "What does average swap size measure?" @@ -69,42 +69,42 @@ faq: providers: - slug: pump-fun name: pump.fun - tag: "Solana meme launchpad" - formula: "Average swap size in USD on pump.fun's bonding curve (solana_platform_volume_24h_usd{platform=pump-fun} / solana_platform_trades_24h{platform=pump-fun}, Mobula lighthouse byLaunchpad, 15 min poll)." + tag: "Solana meme launchpad + relay" + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_pumpapp_sol_daily + dataset_pumpfun_relay_daily), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="pump-fun"} / solana_platform_trades_24h{platform="pump-fun"} - p90: solana_platform_volume_24h_usd{platform="pump-fun"} / solana_platform_trades_24h{platform="pump-fun"} - p99: solana_platform_volume_24h_usd{platform="pump-fun"} / solana_platform_trades_24h{platform="pump-fun"} - mean: solana_platform_volume_24h_usd{platform="pump-fun"} / solana_platform_trades_24h{platform="pump-fun"} - success: solana_platform_health{platform="pump-fun"} - sample_size: solana_platform_trades_24h{platform="pump-fun"} - series: solana_platform_volume_24h_usd{platform="pump-fun"} / solana_platform_trades_24h{platform="pump-fun"} + p50: dune_platform_avg_trade_usd{platform="pump-fun"} + p90: dune_platform_avg_trade_usd{platform="pump-fun"} + p99: dune_platform_avg_trade_usd{platform="pump-fun"} + mean: dune_platform_avg_trade_usd{platform="pump-fun"} + success: dune_platform_volume_health{platform="pump-fun"} + sample_size: dune_platform_txns_24h{platform="pump-fun"} + series: dune_platform_avg_trade_usd{platform="pump-fun"} - slug: gmgn name: GMGN - tag: "AI trading terminal on Solana" - formula: "Average swap size in USD routed through GMGN (Mobula lighthouse byPlatform, 15 min poll)." + tag: "AI trading terminal, multi-chain" + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_gmgn_daily, cross-chain), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="gmgn"} / solana_platform_trades_24h{platform="gmgn"} - p90: solana_platform_volume_24h_usd{platform="gmgn"} / solana_platform_trades_24h{platform="gmgn"} - p99: solana_platform_volume_24h_usd{platform="gmgn"} / solana_platform_trades_24h{platform="gmgn"} - mean: solana_platform_volume_24h_usd{platform="gmgn"} / solana_platform_trades_24h{platform="gmgn"} - success: solana_platform_health{platform="gmgn"} - sample_size: solana_platform_trades_24h{platform="gmgn"} - series: solana_platform_volume_24h_usd{platform="gmgn"} / solana_platform_trades_24h{platform="gmgn"} + p50: dune_platform_avg_trade_usd{platform="gmgn"} + p90: dune_platform_avg_trade_usd{platform="gmgn"} + p99: dune_platform_avg_trade_usd{platform="gmgn"} + mean: dune_platform_avg_trade_usd{platform="gmgn"} + success: dune_platform_volume_health{platform="gmgn"} + sample_size: dune_platform_txns_24h{platform="gmgn"} + series: dune_platform_avg_trade_usd{platform="gmgn"} - slug: trojan name: Trojan tag: "Telegram trading bot on Solana" - formula: "Average swap size in USD routed through Trojan (Mobula lighthouse byPlatform, 15 min poll)." + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_trojan_daily), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="trojan"} / solana_platform_trades_24h{platform="trojan"} - p90: solana_platform_volume_24h_usd{platform="trojan"} / solana_platform_trades_24h{platform="trojan"} - p99: solana_platform_volume_24h_usd{platform="trojan"} / solana_platform_trades_24h{platform="trojan"} - mean: solana_platform_volume_24h_usd{platform="trojan"} / solana_platform_trades_24h{platform="trojan"} - success: solana_platform_health{platform="trojan"} - sample_size: solana_platform_trades_24h{platform="trojan"} - series: solana_platform_volume_24h_usd{platform="trojan"} / solana_platform_trades_24h{platform="trojan"} + p50: dune_platform_avg_trade_usd{platform="trojan"} + p90: dune_platform_avg_trade_usd{platform="trojan"} + p99: dune_platform_avg_trade_usd{platform="trojan"} + mean: dune_platform_avg_trade_usd{platform="trojan"} + success: dune_platform_volume_health{platform="trojan"} + sample_size: dune_platform_txns_24h{platform="trojan"} + series: dune_platform_avg_trade_usd{platform="trojan"} - slug: maestro name: Maestro @@ -122,54 +122,67 @@ providers: - slug: fomo name: Fomo tag: "Solana trading platform" - formula: "Average swap size in USD routed through Fomo (Mobula lighthouse byPlatform, 15 min poll)." + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_fomo_sol_daily, Solana), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="fomo"} / solana_platform_trades_24h{platform="fomo"} - p90: solana_platform_volume_24h_usd{platform="fomo"} / solana_platform_trades_24h{platform="fomo"} - p99: solana_platform_volume_24h_usd{platform="fomo"} / solana_platform_trades_24h{platform="fomo"} - mean: solana_platform_volume_24h_usd{platform="fomo"} / solana_platform_trades_24h{platform="fomo"} - success: solana_platform_health{platform="fomo"} - sample_size: solana_platform_trades_24h{platform="fomo"} - series: solana_platform_volume_24h_usd{platform="fomo"} / solana_platform_trades_24h{platform="fomo"} + p50: dune_platform_avg_trade_usd{platform="fomo"} + p90: dune_platform_avg_trade_usd{platform="fomo"} + p99: dune_platform_avg_trade_usd{platform="fomo"} + mean: dune_platform_avg_trade_usd{platform="fomo"} + success: dune_platform_volume_health{platform="fomo"} + sample_size: dune_platform_txns_24h{platform="fomo"} + series: dune_platform_avg_trade_usd{platform="fomo"} - slug: axiom name: Axiom - tag: "Web trading terminal on Solana" - formula: "Average swap size in USD routed through Axiom (Mobula lighthouse byPlatform, 15 min poll)." + tag: "Web trading terminal, multi-chain" + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_axiom_daily, cross-chain), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="axiom"} / solana_platform_trades_24h{platform="axiom"} - p90: solana_platform_volume_24h_usd{platform="axiom"} / solana_platform_trades_24h{platform="axiom"} - p99: solana_platform_volume_24h_usd{platform="axiom"} / solana_platform_trades_24h{platform="axiom"} - mean: solana_platform_volume_24h_usd{platform="axiom"} / solana_platform_trades_24h{platform="axiom"} - success: solana_platform_health{platform="axiom"} - sample_size: solana_platform_trades_24h{platform="axiom"} - series: solana_platform_volume_24h_usd{platform="axiom"} / solana_platform_trades_24h{platform="axiom"} + p50: dune_platform_avg_trade_usd{platform="axiom"} + p90: dune_platform_avg_trade_usd{platform="axiom"} + p99: dune_platform_avg_trade_usd{platform="axiom"} + mean: dune_platform_avg_trade_usd{platform="axiom"} + success: dune_platform_volume_health{platform="axiom"} + sample_size: dune_platform_txns_24h{platform="axiom"} + series: dune_platform_avg_trade_usd{platform="axiom"} - slug: photon name: Photon tag: "Solana trading terminal" - formula: "Average swap size in USD routed through Photon (Mobula lighthouse byPlatform, 15 min poll)." + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_photon_daily), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="photon"} / solana_platform_trades_24h{platform="photon"} - p90: solana_platform_volume_24h_usd{platform="photon"} / solana_platform_trades_24h{platform="photon"} - p99: solana_platform_volume_24h_usd{platform="photon"} / solana_platform_trades_24h{platform="photon"} - mean: solana_platform_volume_24h_usd{platform="photon"} / solana_platform_trades_24h{platform="photon"} - success: solana_platform_health{platform="photon"} - sample_size: solana_platform_trades_24h{platform="photon"} - series: solana_platform_volume_24h_usd{platform="photon"} / solana_platform_trades_24h{platform="photon"} + p50: dune_platform_avg_trade_usd{platform="photon"} + p90: dune_platform_avg_trade_usd{platform="photon"} + p99: dune_platform_avg_trade_usd{platform="photon"} + mean: dune_platform_avg_trade_usd{platform="photon"} + success: dune_platform_volume_health{platform="photon"} + sample_size: dune_platform_txns_24h{platform="photon"} + series: dune_platform_avg_trade_usd{platform="photon"} - slug: padre - name: Padre - tag: "AI Telegram bot on Solana" - formula: "Average swap size in USD routed through Padre (Mobula lighthouse byPlatform, 15 min poll)." + name: Terminal + tag: "pump.fun's own trading app (formerly Padre)" + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_terminal_daily, cross-chain), latest complete day." queries: - p50: solana_platform_volume_24h_usd{platform="padre"} / solana_platform_trades_24h{platform="padre"} - p90: solana_platform_volume_24h_usd{platform="padre"} / solana_platform_trades_24h{platform="padre"} - p99: solana_platform_volume_24h_usd{platform="padre"} / solana_platform_trades_24h{platform="padre"} - mean: solana_platform_volume_24h_usd{platform="padre"} / solana_platform_trades_24h{platform="padre"} - success: solana_platform_health{platform="padre"} - sample_size: solana_platform_trades_24h{platform="padre"} - series: solana_platform_volume_24h_usd{platform="padre"} / solana_platform_trades_24h{platform="padre"} + p50: dune_platform_avg_trade_usd{platform="padre"} + p90: dune_platform_avg_trade_usd{platform="padre"} + p99: dune_platform_avg_trade_usd{platform="padre"} + mean: dune_platform_avg_trade_usd{platform="padre"} + success: dune_platform_volume_health{platform="padre"} + sample_size: dune_platform_txns_24h{platform="padre"} + series: dune_platform_avg_trade_usd{platform="padre"} + + - slug: basedbot + name: BasedBot + tag: "Multi-chain trading bot" + formula: "Average swap size in USD (volume_usd / txns) from Dune community datasets (dataset_basedbot_daily, cross-chain), latest complete day." + queries: + p50: dune_platform_avg_trade_usd{platform="basedbot"} + p90: dune_platform_avg_trade_usd{platform="basedbot"} + p99: dune_platform_avg_trade_usd{platform="basedbot"} + mean: dune_platform_avg_trade_usd{platform="basedbot"} + success: dune_platform_volume_health{platform="basedbot"} + sample_size: dune_platform_txns_24h{platform="basedbot"} + series: dune_platform_avg_trade_usd{platform="basedbot"} - slug: phantom name: Phantom diff --git a/benchmarks/solana-trading-platform-wars.yml b/benchmarks/solana-trading-platform-wars.yml index 1ea97b67..6e22c459 100644 --- a/benchmarks/solana-trading-platform-wars.yml +++ b/benchmarks/solana-trading-platform-wars.yml @@ -5,7 +5,7 @@ number: "201" title: "Trading platform leaderboard: GMGN vs Axiom vs Fomo vs pump.fun, live 24h volume" seo_title: "Trading platform comparison 2026: GMGN, Axiom, Fomo, pump.fun, Trojan, Terminal" seo_description: "{{best_name}} leads trading platforms at ${{best_p50}} 24h volume. GMGN vs Axiom vs Fomo vs Trojan vs Terminal vs BasedBot ranked live from Dune community datasets." -subtitle: Live 24-hour trading volume per platform and Telegram bot, cross-chain (Solana + BNB + Base + Robinhood node + HyperEVM + Monad). Sourced from Sacha's Dune community datasets, refreshed every 4 hours. +subtitle: Live 24-hour trading volume per platform and Telegram bot, cross-chain (Solana + BNB + Base + Robinhood node + HyperEVM + Monad). Sourced from Dune community datasets, refreshed every 4 hours. category: Trading status: live @@ -14,7 +14,7 @@ unit: usd higher_is_better: true disclaimer: | - Volume figures are sourced from Sacha's (adam_tehc) Dune community datasets, which aggregate cross-chain trading activity per platform (Solana, BNB Chain, Base, Robinhood node, HyperEVM, Monad, and more). Data is refreshed every 4 hours. pump.fun volume = bonding-curve Solana swaps (dataset_pumpapp_sol_daily) + cross-chain relay swaps (dataset_pumpfun_relay_daily). Fomo = Solana only (dataset_fomo_sol_daily). All others sum across all blockchains. + Volume figures are sourced from Dune community datasets, which aggregate cross-chain trading activity per platform (Solana, BNB Chain, Base, Robinhood node, HyperEVM, Monad, and more). Data is refreshed every 4 hours. pump.fun volume = bonding-curve Solana swaps (dataset_pumpapp_sol_daily) + cross-chain relay swaps (dataset_pumpfun_relay_daily). Fomo = Solana only (dataset_fomo_sol_daily). All others sum across all blockchains. seo_intro: | Solana's trading frontend market is a contested race between GMGN, Axiom and @@ -42,11 +42,11 @@ abstract: | trading platforms as providers. methodology: - - "Source: Sacha's (adam_tehc) Dune community datasets (dune.adam_tehc_co.dataset_*_daily). Each dataset covers one trading platform across all blockchains it operates on." + - "Source: Dune community datasets (dataset_*_daily). Each dataset covers one trading platform across all blockchains it operates on." - "Poll cadence: harness queries Dune every 4 hours and updates Prometheus gauges. Prometheus scrapes :2112/metrics every 60 seconds." - "Volume: sum of volume_usd across all blockchains for the most recent complete day in each platform's dataset. Higher = more total user activity." - "pump.fun: dataset_pumpapp_sol_daily (Solana bonding-curve) + dataset_pumpfun_relay_daily filtered to req_class='swap'. pump.fun cut fees to 0% in Aug 2026; volume is for their own frontend only (pumpapp), not all bonding-curve activity." - - "fomo: dataset_fomo_sol_daily (Solana only). Includes Fomo's relay cross-chain volume when Sacha incorporates it." + - "fomo: dataset_fomo_sol_daily (Solana only)." - "BasedBot: multi-chain bot (Robinhood node, BNB, Base, Solana, ETH, HyperEVM, Avalanche)." findings: @@ -82,7 +82,7 @@ providers: - slug: gmgn name: GMGN tag: "AI trading terminal, multi-chain" - formula: "24h cross-chain volume in USD (Solana + BNB + Robinhood node + Base + ETH + more) from dune.adam_tehc_co.dataset_gmgn_daily, latest complete day." + formula: "24h cross-chain volume in USD (Solana + BNB + Robinhood node + Base + ETH + more) from Dune community datasets (dataset_gmgn_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="gmgn"} p90: dune_platform_volume_24h_usd{platform="gmgn"} @@ -95,7 +95,7 @@ providers: - slug: axiom name: Axiom tag: "Web trading terminal, multi-chain" - formula: "24h cross-chain volume in USD (Solana + Robinhood node + BNB + ETH) from dune.adam_tehc_co.dataset_axiom_daily, latest complete day." + formula: "24h cross-chain volume in USD (Solana + Robinhood node + BNB + ETH) from Dune community datasets (dataset_axiom_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="axiom"} p90: dune_platform_volume_24h_usd{platform="axiom"} @@ -108,7 +108,7 @@ providers: - slug: fomo name: Fomo tag: "Solana trading platform" - formula: "24h Solana volume in USD from dune.adam_tehc_co.dataset_fomo_sol_daily, latest complete day." + formula: "24h Solana volume in USD from Dune community datasets (dataset_fomo_sol_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="fomo"} p90: dune_platform_volume_24h_usd{platform="fomo"} @@ -121,7 +121,7 @@ providers: - slug: basedbot name: BasedBot tag: "Multi-chain trading bot" - formula: "24h cross-chain volume in USD (Robinhood node + BNB + Base + Solana + ETH + HyperEVM) from dune.adam_tehc_co.dataset_basedbot_daily, latest complete day." + formula: "24h cross-chain volume in USD (Robinhood node + BNB + Base + Solana + ETH + HyperEVM) from Dune community datasets (dataset_basedbot_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="basedbot"} p90: dune_platform_volume_24h_usd{platform="basedbot"} @@ -147,7 +147,7 @@ providers: - slug: padre name: Terminal tag: "pump.fun's own trading app (formerly Padre, acquired Apr 2025)" - formula: "24h cross-chain volume in USD (Solana + Robinhood node + Base + BNB) from dune.adam_tehc_co.dataset_terminal_daily, latest complete day." + formula: "24h cross-chain volume in USD (Solana + Robinhood node + Base + BNB) from Dune community datasets (dataset_terminal_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="padre"} p90: dune_platform_volume_24h_usd{platform="padre"} @@ -160,7 +160,7 @@ providers: - slug: trojan name: Trojan tag: "Telegram trading bot on Solana" - formula: "24h Solana volume in USD from dune.adam_tehc_co.dataset_trojan_daily, latest complete day." + formula: "24h Solana volume in USD from Dune community datasets (dataset_trojan_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="trojan"} p90: dune_platform_volume_24h_usd{platform="trojan"} @@ -173,7 +173,7 @@ providers: - slug: photon name: Photon tag: "Solana trading terminal" - formula: "24h Solana volume in USD from dune.adam_tehc_co.dataset_photon_daily, latest complete day." + formula: "24h Solana volume in USD from Dune community datasets (dataset_photon_daily), latest complete day." queries: p50: dune_platform_volume_24h_usd{platform="photon"} p90: dune_platform_volume_24h_usd{platform="photon"} diff --git a/benchmarks/solana-unique-traders.yml b/benchmarks/solana-unique-traders.yml index bac5ac41..943af494 100644 --- a/benchmarks/solana-unique-traders.yml +++ b/benchmarks/solana-unique-traders.yml @@ -60,7 +60,7 @@ source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana- prometheus: window: 24h - freshness_metric: solana_platform_unique_traders_24h + freshness_metric: dune_platform_txns_24h faq: - q: "What does unique daily swap transactions measure?" @@ -79,81 +79,107 @@ faq: providers: - slug: pump-fun name: pump.fun - tag: "Solana meme launchpad" - formula: "Unique tx_ids from dex_solana.trades WHERE project IN ('pumpdotfun','pumpswap') in the last 24h (Dune Spellbook, hourly). Covers bonding-curve swaps and graduated PumpSwap AMM." + tag: "Solana meme launchpad + relay" + formula: "Daily swap tx count from Dune community datasets (dataset_pumpapp_sol_daily + dataset_pumpfun_relay_daily, req_class=swap), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="pump-fun"} - p90: solana_platform_unique_traders_24h{platform="pump-fun"} - p99: solana_platform_unique_traders_24h{platform="pump-fun"} - mean: solana_platform_unique_traders_24h{platform="pump-fun"} - success: solana_platform_trader_health{platform="pump-fun"} - sample_size: solana_platform_unique_traders_24h{platform="pump-fun"} - series: solana_platform_unique_traders_24h{platform="pump-fun"} + p50: dune_platform_txns_24h{platform="pump-fun"} + p90: dune_platform_txns_24h{platform="pump-fun"} + p99: dune_platform_txns_24h{platform="pump-fun"} + mean: dune_platform_txns_24h{platform="pump-fun"} + success: dune_platform_volume_health{platform="pump-fun"} + sample_size: dune_platform_txns_24h{platform="pump-fun"} + series: dune_platform_txns_24h{platform="pump-fun"} - slug: gmgn name: GMGN - tag: "AI trading terminal on Solana" - formula: "Unique tx_ids where GMGN fee wallets received SOL or USDC/WSOL inflow in the last 24h (Dune: solana.account_activity, hourly refresh)." + tag: "AI trading terminal, multi-chain" + formula: "Daily swap tx count from Dune community datasets (dataset_gmgn_daily, cross-chain), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="gmgn"} - p90: solana_platform_unique_traders_24h{platform="gmgn"} - p99: solana_platform_unique_traders_24h{platform="gmgn"} - mean: solana_platform_unique_traders_24h{platform="gmgn"} - success: solana_platform_trader_health{platform="gmgn"} - sample_size: solana_platform_unique_traders_24h{platform="gmgn"} - series: solana_platform_unique_traders_24h{platform="gmgn"} + p50: dune_platform_txns_24h{platform="gmgn"} + p90: dune_platform_txns_24h{platform="gmgn"} + p99: dune_platform_txns_24h{platform="gmgn"} + mean: dune_platform_txns_24h{platform="gmgn"} + success: dune_platform_volume_health{platform="gmgn"} + sample_size: dune_platform_txns_24h{platform="gmgn"} + series: dune_platform_txns_24h{platform="gmgn"} - slug: axiom name: Axiom - tag: "Web trading terminal on Solana" - formula: "Unique tx_ids where Axiom fee wallets received SOL inflow in the last 24h (Dune: solana.account_activity, hourly refresh)." + tag: "Web trading terminal, multi-chain" + formula: "Daily swap tx count from Dune community datasets (dataset_axiom_daily, cross-chain), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="axiom"} - p90: solana_platform_unique_traders_24h{platform="axiom"} - p99: solana_platform_unique_traders_24h{platform="axiom"} - mean: solana_platform_unique_traders_24h{platform="axiom"} - success: solana_platform_trader_health{platform="axiom"} - sample_size: solana_platform_unique_traders_24h{platform="axiom"} - series: solana_platform_unique_traders_24h{platform="axiom"} + p50: dune_platform_txns_24h{platform="axiom"} + p90: dune_platform_txns_24h{platform="axiom"} + p99: dune_platform_txns_24h{platform="axiom"} + mean: dune_platform_txns_24h{platform="axiom"} + success: dune_platform_volume_health{platform="axiom"} + sample_size: dune_platform_txns_24h{platform="axiom"} + series: dune_platform_txns_24h{platform="axiom"} - slug: fomo name: Fomo - tag: "Solana mobile trading app" - formula: "Unique tx_ids 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." + tag: "Solana trading platform" + formula: "Daily swap tx count from Dune community datasets (dataset_fomo_sol_daily, Solana), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="fomo"} - p90: solana_platform_unique_traders_24h{platform="fomo"} - p99: solana_platform_unique_traders_24h{platform="fomo"} - mean: solana_platform_unique_traders_24h{platform="fomo"} - success: solana_platform_trader_health{platform="fomo"} - sample_size: solana_platform_unique_traders_24h{platform="fomo"} - series: solana_platform_unique_traders_24h{platform="fomo"} + p50: dune_platform_txns_24h{platform="fomo"} + p90: dune_platform_txns_24h{platform="fomo"} + p99: dune_platform_txns_24h{platform="fomo"} + mean: dune_platform_txns_24h{platform="fomo"} + success: dune_platform_volume_health{platform="fomo"} + sample_size: dune_platform_txns_24h{platform="fomo"} + series: dune_platform_txns_24h{platform="fomo"} - slug: trojan name: Trojan tag: "Telegram trading bot on Solana" - formula: "Unique tx_ids where Trojan fee wallets received SOL inflow in the last 24h (Dune: solana.account_activity, hourly refresh)." + formula: "Daily swap tx count from Dune community datasets (dataset_trojan_daily, Solana), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="trojan"} - p90: solana_platform_unique_traders_24h{platform="trojan"} - p99: solana_platform_unique_traders_24h{platform="trojan"} - mean: solana_platform_unique_traders_24h{platform="trojan"} - success: solana_platform_trader_health{platform="trojan"} - sample_size: solana_platform_unique_traders_24h{platform="trojan"} - series: solana_platform_unique_traders_24h{platform="trojan"} + p50: dune_platform_txns_24h{platform="trojan"} + p90: dune_platform_txns_24h{platform="trojan"} + p99: dune_platform_txns_24h{platform="trojan"} + mean: dune_platform_txns_24h{platform="trojan"} + success: dune_platform_volume_health{platform="trojan"} + sample_size: dune_platform_txns_24h{platform="trojan"} + series: dune_platform_txns_24h{platform="trojan"} - slug: photon name: Photon tag: "Solana trading terminal" - formula: "Unique tx_ids where Photon fee wallet received SOL inflow in the last 24h (Dune: solana.account_activity, hourly refresh)." + formula: "Daily swap tx count from Dune community datasets (dataset_photon_daily, Solana), latest complete day." queries: - p50: solana_platform_unique_traders_24h{platform="photon"} - p90: solana_platform_unique_traders_24h{platform="photon"} - p99: solana_platform_unique_traders_24h{platform="photon"} - mean: solana_platform_unique_traders_24h{platform="photon"} - success: solana_platform_trader_health{platform="photon"} - sample_size: solana_platform_unique_traders_24h{platform="photon"} - series: solana_platform_unique_traders_24h{platform="photon"} + p50: dune_platform_txns_24h{platform="photon"} + p90: dune_platform_txns_24h{platform="photon"} + p99: dune_platform_txns_24h{platform="photon"} + mean: dune_platform_txns_24h{platform="photon"} + success: dune_platform_volume_health{platform="photon"} + sample_size: dune_platform_txns_24h{platform="photon"} + series: dune_platform_txns_24h{platform="photon"} + + - slug: padre + name: Terminal + tag: "pump.fun's own trading app (formerly Padre)" + formula: "Daily swap tx count from Dune community datasets (dataset_terminal_daily, cross-chain), latest complete day." + queries: + p50: dune_platform_txns_24h{platform="padre"} + p90: dune_platform_txns_24h{platform="padre"} + p99: dune_platform_txns_24h{platform="padre"} + mean: dune_platform_txns_24h{platform="padre"} + success: dune_platform_volume_health{platform="padre"} + sample_size: dune_platform_txns_24h{platform="padre"} + series: dune_platform_txns_24h{platform="padre"} + + - slug: basedbot + name: BasedBot + tag: "Multi-chain trading bot" + formula: "Daily swap tx count from Dune community datasets (dataset_basedbot_daily, cross-chain), latest complete day." + queries: + p50: dune_platform_txns_24h{platform="basedbot"} + p90: dune_platform_txns_24h{platform="basedbot"} + p99: dune_platform_txns_24h{platform="basedbot"} + mean: dune_platform_txns_24h{platform="basedbot"} + success: dune_platform_volume_health{platform="basedbot"} + sample_size: dune_platform_txns_24h{platform="basedbot"} + series: dune_platform_txns_24h{platform="basedbot"} - slug: maestro name: Maestro diff --git a/harnesses/dune-platform-volume/cmd/script/dune.go b/harnesses/dune-platform-volume/cmd/script/dune.go index a10a020c..7d26a77f 100644 --- a/harnesses/dune-platform-volume/cmd/script/dune.go +++ b/harnesses/dune-platform-volume/cmd/script/dune.go @@ -9,49 +9,47 @@ import ( "time" ) -// querySQL fetches yesterday's total cross-chain volume per platform from -// Sacha's community datasets (dune.adam_tehc_co.dataset_*). +// querySQL fetches the latest complete day's cross-chain metrics per platform +// from Dune community datasets. // -// Dataset schemas: -// dataset_{platform}_daily → day, blockchain, volume_usd, fees_usd, txns, wallets -// dataset_fomo_sol_daily → day, volume_usd, fees_usd, txns, wallets, wallets_dedup (no blockchain col) -// dataset_pumpapp_sol_daily → day, blockchain, volume_usd, fees_usd, txns, wallets, wallets_dedup -// dataset_pumpfun_relay_daily → day, fill_chain, req_class, volume_usd, app_fees_usd, txns, wallets -// -// pump.fun total = pumpapp Solana + relay swaps (req_class='swap'). -// All others: SUM(volume_usd) across all blockchains for latest available day. +// Returns per platform: volume_usd, txns, fees_usd, avg_trade_usd, fee_rate_pct. +// pump.fun = pumpapp Solana + relay swaps (req_class='swap'), fees=0 (fee cut Aug 2026). +// fomo = Solana only (dataset_fomo_sol_daily, no blockchain col). +// All others sum across all blockchains for latest available day. const querySQL = ` WITH latest AS ( - SELECT - 'gmgn' AS platform, SUM(volume_usd) AS volume_usd FROM dune.adam_tehc_co.dataset_gmgn_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_gmgn_daily) + SELECT 'gmgn' AS platform, SUM(volume_usd) AS volume_usd, SUM(CAST(txns AS BIGINT)) AS txns, SUM(CAST(fees_usd AS DOUBLE)) AS fees_usd + FROM dune.adam_tehc_co.dataset_gmgn_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_gmgn_daily) UNION ALL - SELECT 'axiom', SUM(volume_usd) FROM dune.adam_tehc_co.dataset_axiom_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_axiom_daily) + SELECT 'axiom', SUM(volume_usd), SUM(CAST(txns AS BIGINT)), SUM(CAST(fees_usd AS DOUBLE)) + FROM dune.adam_tehc_co.dataset_axiom_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_axiom_daily) UNION ALL - SELECT 'trojan', SUM(volume_usd) FROM dune.adam_tehc_co.dataset_trojan_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_trojan_daily) + SELECT 'trojan', SUM(volume_usd), SUM(CAST(txns AS BIGINT)), SUM(CAST(fees_usd AS DOUBLE)) + FROM dune.adam_tehc_co.dataset_trojan_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_trojan_daily) UNION ALL - SELECT 'padre', SUM(volume_usd) FROM dune.adam_tehc_co.dataset_terminal_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_terminal_daily) + SELECT 'padre', SUM(volume_usd), SUM(CAST(txns AS BIGINT)), SUM(CAST(fees_usd AS DOUBLE)) + FROM dune.adam_tehc_co.dataset_terminal_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_terminal_daily) UNION ALL - SELECT 'photon', SUM(volume_usd) FROM dune.adam_tehc_co.dataset_photon_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_photon_daily) + SELECT 'photon', SUM(volume_usd), SUM(CAST(txns AS BIGINT)), SUM(CAST(fees_usd AS DOUBLE)) + FROM dune.adam_tehc_co.dataset_photon_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_photon_daily) UNION ALL - SELECT 'basedbot', SUM(volume_usd) FROM dune.adam_tehc_co.dataset_basedbot_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_basedbot_daily) + SELECT 'basedbot', SUM(volume_usd), SUM(CAST(txns AS BIGINT)), SUM(CAST(fees_usd AS DOUBLE)) + FROM dune.adam_tehc_co.dataset_basedbot_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_basedbot_daily) UNION ALL - SELECT 'fomo', volume_usd FROM dune.adam_tehc_co.dataset_fomo_sol_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_fomo_sol_daily) + SELECT 'fomo', volume_usd, CAST(txns AS BIGINT), CAST(fees_usd AS DOUBLE) + FROM dune.adam_tehc_co.dataset_fomo_sol_daily WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_fomo_sol_daily) UNION ALL SELECT 'pump-fun', - COALESCE((SELECT SUM(volume_usd) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily)), 0) - + COALESCE((SELECT SUM(volume_usd) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily - WHERE day = (SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily) - AND req_class = 'swap'), 0) + COALESCE((SELECT SUM(volume_usd) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily WHERE day=(SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily)),0) + + COALESCE((SELECT SUM(volume_usd) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily WHERE day=(SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily) AND req_class='swap'),0), + COALESCE((SELECT SUM(CAST(txns AS BIGINT)) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily WHERE day=(SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpapp_sol_daily)),0) + + COALESCE((SELECT SUM(CAST(txns AS BIGINT)) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily WHERE day=(SELECT MAX(day) FROM dune.adam_tehc_co.dataset_pumpfun_relay_daily) AND req_class='swap'),0), + CAST(0 AS DOUBLE) ) -SELECT platform, volume_usd FROM latest ORDER BY volume_usd DESC +SELECT platform, volume_usd, txns, fees_usd, + CASE WHEN txns > 0 THEN volume_usd / txns ELSE NULL END AS avg_trade_usd, + CASE WHEN volume_usd > 0 THEN fees_usd / volume_usd * 100 ELSE 0.0 END AS fee_rate_pct +FROM latest ORDER BY volume_usd DESC ` const duneBase = "https://api.dune.com/api/v1" @@ -62,8 +60,12 @@ type duneClient struct { } type duneRow struct { - Platform string `json:"platform"` - VolumeUSD float64 `json:"volume_usd"` + Platform string `json:"platform"` + VolumeUSD float64 `json:"volume_usd"` + Txns float64 `json:"txns"` + FeesUSD float64 `json:"fees_usd"` + AvgTradeUSD float64 `json:"avg_trade_usd"` + FeeRatePct float64 `json:"fee_rate_pct"` } func newDuneClient(apiKey string) *duneClient { @@ -95,7 +97,7 @@ func (d *duneClient) req(method, path string, body any) (*http.Response, error) func (d *duneClient) createQuery() (string, error) { payload := map[string]any{ - "name": "OCB: Cross-chain trading platform volume (Sacha datasets)", + "name": "OCB: Cross-chain trading platform metrics", "query_sql": querySQL, "is_private": false, "parameters": []any{}, diff --git a/harnesses/dune-platform-volume/cmd/script/main.go b/harnesses/dune-platform-volume/cmd/script/main.go index 84ce6664..5ee3e093 100644 --- a/harnesses/dune-platform-volume/cmd/script/main.go +++ b/harnesses/dune-platform-volume/cmd/script/main.go @@ -1,6 +1,6 @@ // dune-platform-volume -- Bench 201 (replaces Mobula lighthouse source) // -// Queries Sacha's community datasets on Dune (dune.adam_tehc_co.dataset_*_daily) +// Queries Dune community datasets (dataset_*_daily) // for cross-chain trading platform volume. Each dataset has columns: // day, blockchain, volume_usd, fees_usd, txns, wallets. // pump.fun uses dataset_pumpapp_sol_daily (Solana) + dataset_pumpfun_relay_daily (relay). @@ -29,7 +29,7 @@ const ( func main() { fmt.Println("=== dune-platform-volume harness ===") - fmt.Println("OpenChainBench Bench 201 -- Cross-chain trading platform volume via Sacha's Dune datasets.") + fmt.Println("OpenChainBench Bench 201 -- Cross-chain trading platform volume via Dune community datasets.") apiKey := os.Getenv("DUNE_API_KEY") if apiKey == "" { diff --git a/harnesses/dune-platform-volume/cmd/script/metrics.go b/harnesses/dune-platform-volume/cmd/script/metrics.go index b087b85a..fd7107c7 100644 --- a/harnesses/dune-platform-volume/cmd/script/metrics.go +++ b/harnesses/dune-platform-volume/cmd/script/metrics.go @@ -10,17 +10,44 @@ import ( var ( platformVolume = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name: "dune_platform_volume_24h_usd", - Help: "24h trading volume in USD per platform, summed across all blockchains (Sacha's Dune community datasets).", + Help: "24h trading volume in USD per platform, summed across all blockchains (Dune community datasets).", + }, []string{"platform"}) + + platformTxns = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "dune_platform_txns_24h", + Help: "24h swap transaction count per platform, summed across all blockchains (Dune community datasets).", + }, []string{"platform"}) + + platformFeesUSD = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "dune_platform_fees_24h_usd", + Help: "24h protocol fee revenue in USD per platform, summed across all blockchains (Dune community datasets).", + }, []string{"platform"}) + + platformAvgTrade = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "dune_platform_avg_trade_usd", + Help: "Average swap size in USD per platform (volume_usd / txns, Dune community datasets).", + }, []string{"platform"}) + + platformFeeRate = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "dune_platform_fee_rate_pct", + Help: "Observed fee take rate in percent per platform (fees_usd / volume_usd * 100, Dune community datasets).", }, []string{"platform"}) platformHealth = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name: "dune_platform_volume_health", - Help: "1 if this platform returned volume data in the last Dune poll.", + Help: "1 if this platform returned data in the last Dune poll.", }, []string{"platform"}) ) func init() { - prometheus.MustRegister(platformVolume, platformHealth) + prometheus.MustRegister( + platformVolume, + platformTxns, + platformFeesUSD, + platformAvgTrade, + platformFeeRate, + platformHealth, + ) } func publishRows(rows []duneRow) { @@ -29,6 +56,12 @@ func publishRows(rows []duneRow) { continue } platformVolume.WithLabelValues(r.Platform).Set(r.VolumeUSD) + platformTxns.WithLabelValues(r.Platform).Set(r.Txns) + platformFeesUSD.WithLabelValues(r.Platform).Set(r.FeesUSD) + if r.AvgTradeUSD > 0 { + platformAvgTrade.WithLabelValues(r.Platform).Set(r.AvgTradeUSD) + } + platformFeeRate.WithLabelValues(r.Platform).Set(r.FeeRatePct) platformHealth.WithLabelValues(r.Platform).Set(1) } } diff --git a/src/app/trading-apps/page.tsx b/src/app/trading-apps/page.tsx index ed66e625..e05f158b 100644 --- a/src/app/trading-apps/page.tsx +++ b/src/app/trading-apps/page.tsx @@ -27,7 +27,7 @@ const BENCH_SLUGS = [ "app-store-ratings", ] as const; -// Volume source: Sacha's (adam_tehc) Dune community datasets (dataset_*_daily). +// Volume source: Dune community datasets (dataset_*_daily). // Each platform is a separate dataset with cross-chain breakdown (blockchain col). // pump.fun = pumpapp Solana + relay swaps, shown with proper attribution now. // Terminal (slug: padre) = pump.fun's own trading app (formerly Padre, acq Apr 2025). @@ -50,7 +50,7 @@ const COLUMNS = [ label: "24h Volume", bench: "solana-trading-platform-wars", fmt: fmtUSD, - tip: "Cross-chain 24h volume from Sacha's (adam_tehc) Dune community datasets. Includes Solana + BNB + Base + Robinhood node + HyperEVM + Monad etc. pump.fun = pumpapp frontend only (not all bonding-curve). Terminal = pump.fun's own trading app (formerly Padre, acq. Apr 2025).", + tip: "Cross-chain 24h volume from Dune community datasets. Includes Solana + BNB + Base + Robinhood node + HyperEVM + Monad etc. pump.fun = pumpapp frontend only (not all bonding-curve). Terminal = pump.fun's own trading app (formerly Padre, acq. Apr 2025).", higherBetter: true, }, { @@ -424,7 +424,7 @@ export default async function TradingAppsHubPage() { Methodology
- Volume from Sacha's (adam_tehc) Dune community datasets: cross-chain + Volume from Dune community datasets: cross-chain totals per platform (Solana + BNB + Base + Robinhood node + HyperEVM + Monad). pump.fun = pumpapp frontend + relay swaps only, not all bonding-curve activity. Terminal = pump.fun's own app (formerly Padre,