From 74ae8fc61e23722050958999481a0eb7e5e36a57 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 13 Aug 2026 01:09:20 +0200 Subject: [PATCH 1/2] feat: add pump.fun to bench 201 via byLaunchpad cross-publish --- benchmarks/solana-trading-platform-wars.yml | 22 +++++++++++++++---- .../cmd/script/metrics.go | 7 ++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/benchmarks/solana-trading-platform-wars.yml b/benchmarks/solana-trading-platform-wars.yml index 4bad9894..edceb261 100644 --- a/benchmarks/solana-trading-platform-wars.yml +++ b/benchmarks/solana-trading-platform-wars.yml @@ -2,9 +2,9 @@ slug: solana-trading-platform-wars number: "201" -title: "Solana trading platform leaderboard: GMGN vs Axiom vs Fomo vs Trojan, live 24h volume" -seo_title: "Solana trading platform comparison 2026: GMGN, Axiom, Fomo, Trojan" -seo_description: "{{best_name}} leads Solana trading platforms at ${{best_p50}} 24h volume. GMGN vs Axiom vs Fomo vs Trojan vs Padre vs Phantom ranked live from Mobula lighthouse data." +title: "Solana trading platform leaderboard: pump.fun vs GMGN vs Axiom vs Fomo, live 24h volume" +seo_title: "Solana trading platform comparison 2026: pump.fun, GMGN, Axiom, Fomo, Trojan" +seo_description: "{{best_name}} leads Solana trading platforms at ${{best_p50}} 24h volume. pump.fun vs GMGN vs Axiom vs Fomo vs Trojan vs Padre vs Phantom ranked live from Mobula lighthouse data." subtitle: Live 24-hour trading volume for each Solana trading platform and Telegram bot. Polled every 15 minutes from Mobula lighthouse, which aggregates on-chain swap events routed through each frontend across all Solana DEX programs. category: Trading @@ -45,7 +45,8 @@ methodology: - "Volume: sum of all swap event notional values (in USD at time of swap) within the last 24 hours for swaps attributed to this platform. Higher = more user activity routed through this frontend." - "Fees: on-chain protocol fees collected or attributable to this platform within the last 24 hours. Bot fee charging through referral accounts is included where attributable." - "Attribution method: Mobula uses a combination of on-chain referral tags embedded by each platform SDK and program-level routing heuristics. Attribution may undercount platforms that do not use standard referral tags." - - "Scope: this bench covers trading frontends and Telegram bots that route swap orders across Solana DEX programs. Launchpads with dedicated bonding-curve programs (PumpFun, Flap, Bankr) are a separate bench (200)." + - "Scope: this bench covers trading frontends and Telegram bots that route swap orders across Solana DEX programs. pump.fun is included here via its byLaunchpad attribution, representing trades routed through pump.fun's own frontend. Other launchpads (Flap, Bankr) are in bench 200." + - "pump.fun note: pump.fun volume comes from Mobula's byLaunchpad bucket (bonding-curve swaps via pump.fun's own site). Trades on pump.fun tokens routed through GMGN or Axiom are counted under those platforms, not under pump.fun. Attribution is mutually exclusive." - "Phantom note: Phantom is primarily a wallet; its swap volume here reflects users initiating swaps from the Phantom interface via Jupiter or other aggregators." findings: @@ -73,6 +74,19 @@ faq: a: "Launchpad volume (bench 200) counts swaps through bonding-curve programs like PumpFun or Flap. Platform volume here counts swaps attributed to a trading frontend regardless of which underlying DEX or launchpad was used. A single trade on PumpFun via GMGN is counted in both benches." providers: + - slug: pump-fun + name: pump.fun + tag: "Solana meme launchpad, bonding curve" + formula: "24h swap volume in USD on pump.fun's bonding curve via pump.fun's own frontend (Mobula lighthouse byLaunchpad[name=PumpFun].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="pump-fun"} + p90: solana_platform_volume_24h_usd{platform="pump-fun"} + p99: solana_platform_volume_24h_usd{platform="pump-fun"} + mean: solana_platform_volume_24h_usd{platform="pump-fun"} + success: solana_platform_health{platform="pump-fun"} + sample_size: solana_platform_fees_24h_usd{platform="pump-fun"} + series: solana_platform_volume_24h_usd{platform="pump-fun"} + - slug: gmgn name: GMGN tag: "AI trading terminal on Solana" diff --git a/harnesses/solana-launchpad-wars/cmd/script/metrics.go b/harnesses/solana-launchpad-wars/cmd/script/metrics.go index db39ba36..31f24ce3 100644 --- a/harnesses/solana-launchpad-wars/cmd/script/metrics.go +++ b/harnesses/solana-launchpad-wars/cmd/script/metrics.go @@ -73,6 +73,13 @@ func publishLighthouse(data *lighthouseData) { launchpadFees24h.WithLabelValues(slug).Set(e.FeesPaidUSD.H24) launchpadTrades24h.WithLabelValues(slug).Set(e.Trades.H24) launchpadHealth.WithLabelValues(slug).Set(1) + // pump.fun trades via its own frontend are in byLaunchpad; publish as platform + // so bench 201 can compare it against GMGN, Axiom, Fomo etc. (same attribution logic). + if slug == "pumpfun" { + platformVol24h.WithLabelValues("pump-fun").Set(e.VolumeUSD.H24) + platformFees24h.WithLabelValues("pump-fun").Set(e.FeesPaidUSD.H24) + platformHealth.WithLabelValues("pump-fun").Set(1) + } } for _, e := range data.ByPlatform { slug := slugify(e.Name) From 846eaf8d7e5e4fb785f9b96e355865344e1d94f7 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Thu, 13 Aug 2026 02:00:18 +0200 Subject: [PATCH 2/2] feat: bench 206 avg swap size + platformTrades24h gauge --- benchmarks/solana-avg-trade-size.yml | 197 ++++++++++++++++++ .../cmd/script/metrics.go | 8 + 2 files changed, 205 insertions(+) create mode 100644 benchmarks/solana-avg-trade-size.yml diff --git a/benchmarks/solana-avg-trade-size.yml b/benchmarks/solana-avg-trade-size.yml new file mode 100644 index 00000000..bf619e6d --- /dev/null +++ b/benchmarks/solana-avg-trade-size.yml @@ -0,0 +1,197 @@ +# OpenChainBench. Bench 206 + +slug: solana-avg-trade-size +number: "206" +title: "Average swap size on Solana: pump.fun vs GMGN vs Fomo vs Axiom, live" +seo_title: "Average trade size by Solana trading platform 2026: pump.fun vs GMGN vs Axiom vs Fomo" +seo_description: "{{best_name}} has the largest average swap size at ${{best_p50}} per trade. pump.fun vs GMGN vs Axiom vs Fomo vs Trojan ranked by average trade size, live from Mobula lighthouse." +subtitle: Live average swap size in USD per attributed transaction for each Solana trading platform and launchpad. Polled every 15 minutes from Mobula lighthouse. Reveals the trader profile of each platform, from retail micro-trades to sophisticated large-order flow. + +category: Trading +status: live +metric: Avg swap size +unit: usd +higher_is_better: true + +disclaimer: | + Average swap size is computed as 24h attributed volume divided by 24h attributed trade count from Mobula lighthouse. Both numerator and denominator include bot and MEV activity; the metric reflects all on-chain swaps attributed to each platform, not human-only trades. pump.fun volume comes from the byLaunchpad bucket (bonding-curve swaps via pump.fun's own frontend); all other platforms come from byPlatform. Attribution is mutually exclusive per Mobula's referral-tag methodology. + +seo_intro: | + The average swap size on Solana varies by more than 6x across platforms, revealing + sharply different trader profiles. pump.fun sits at the bottom with roughly $35 per + swap across 3.7 million daily transactions, reflecting the micro-cap degen activity + of its bonding-curve launchpad. GMGN and Trojan sit at the top near $100 to $120 per + swap, serving more sophisticated traders running larger positions. Fomo lands in the + middle at around $79 per swap. This benchmark tracks average swap size live across + all major Solana trading frontends and launchpads, updated every 15 minutes from + Mobula lighthouse attribution data. + +abstract: | + The harness polls Mobula lighthouse (api.mobula.io/api/2/market/lighthouse) every + 15 minutes and records volumeUSD.24h and trades.24h for each platform and launchpad. + Average swap size is derived as volumeUSD.24h divided by trades.24h. The harness + exposes solana_platform_volume_24h_usd, solana_platform_trades_24h and + solana_platform_health per platform. pump.fun is sourced from byLaunchpad and + cross-published into the platform gauge; all others come from byPlatform. + +methodology: + - "Source: Mobula lighthouse (api.mobula.io/api/2/market/lighthouse), poll every 15 min." + - "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). Trades routed through GMGN or Axiom to pump.fun tokens count under those platforms." + - "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: + - "{{best_name}} attracts the largest average swap at ${{best_p50}} per transaction." + - "pump.fun has the smallest average swap size at around $35 across 3.7 million daily transactions, dominated by bot sniping and micro-cap degen retail flow." + - "GMGN and Trojan lead at $100 to $120 per swap, serving more sophisticated traders with larger position sizes." + - "Fomo sits mid-market at around $79 per swap, positioned between retail and professional." + - "Trade count tells the other story: pump.fun processes more trades per day than all other platforms combined." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana-launchpad-wars + +prometheus: + window: 24h + freshness_metric: solana_platform_trades_24h + +faq: + - q: "What does average swap size measure?" + a: "Average swap size is total 24h attributed volume divided by total 24h attributed trade count. It reflects the typical notional size of a single swap on each platform. A platform with many small trades will show a low average; one with fewer but larger trades will show a high average." + - q: "Why does pump.fun have so many trades?" + a: "pump.fun's bonding curve generates enormous transaction volume from sniping bots, copy-trade bots and retail buyers all racing to buy newly launched tokens in the first seconds. The 3.7 million daily trades include a large proportion of automated activity, which also drags the average size down toward $35." + - q: "Is this apple-to-apple between pump.fun and the other platforms?" + a: "Directionally yes. Mobula attributes each swap to exactly one frontend using referral tags. A pump.fun token bought via GMGN counts under GMGN, not pump.fun. So both reflect genuine frontend-attributed activity. The difference is that pump.fun's activity skews heavily toward bots and micro-trades on bonding-curve launches, while GMGN and Axiom serve more secondary-market trading." + - q: "Why is Fomo's average trade size lower than GMGN despite similar positioning?" + a: "Fomo attracts a broader retail base through its social copy-trading and wallet features, which pulls the average down compared to GMGN's power-trader demographic. Fomo also has notably low protocol fees in Mobula's data relative to DeFiLlama, suggesting part of its fee model may not be captured by on-chain referral attribution." + +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)." + 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"} + + - 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)." + 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"} + + - 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)." + 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"} + + - slug: maestro + name: Maestro + tag: "Telegram trading bot on Solana" + formula: "Average swap size in USD routed through Maestro (Mobula lighthouse byPlatform, 15 min poll)." + queries: + p50: solana_platform_volume_24h_usd{platform="maestro"} / solana_platform_trades_24h{platform="maestro"} + p90: solana_platform_volume_24h_usd{platform="maestro"} / solana_platform_trades_24h{platform="maestro"} + p99: solana_platform_volume_24h_usd{platform="maestro"} / solana_platform_trades_24h{platform="maestro"} + mean: solana_platform_volume_24h_usd{platform="maestro"} / solana_platform_trades_24h{platform="maestro"} + success: solana_platform_health{platform="maestro"} + sample_size: solana_platform_trades_24h{platform="maestro"} + series: solana_platform_volume_24h_usd{platform="maestro"} / solana_platform_trades_24h{platform="maestro"} + + - slug: fomo + name: Fomo + tag: "Solana trading platform" + formula: "Average swap size in USD routed through Fomo (Mobula lighthouse byPlatform, 15 min poll)." + 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"} + + - 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)." + 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"} + + - slug: photon + name: Photon + tag: "Solana trading terminal" + formula: "Average swap size in USD routed through Photon (Mobula lighthouse byPlatform, 15 min poll)." + 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"} + + - 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)." + 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"} + + - slug: phantom + name: Phantom + tag: "Solana wallet, DEX aggregator" + formula: "Average swap size in USD routed through Phantom wallet (Mobula lighthouse byPlatform, 15 min poll)." + queries: + p50: solana_platform_volume_24h_usd{platform="phantom"} / solana_platform_trades_24h{platform="phantom"} + p90: solana_platform_volume_24h_usd{platform="phantom"} / solana_platform_trades_24h{platform="phantom"} + p99: solana_platform_volume_24h_usd{platform="phantom"} / solana_platform_trades_24h{platform="phantom"} + mean: solana_platform_volume_24h_usd{platform="phantom"} / solana_platform_trades_24h{platform="phantom"} + success: solana_platform_health{platform="phantom"} + sample_size: solana_platform_trades_24h{platform="phantom"} + series: solana_platform_volume_24h_usd{platform="phantom"} / solana_platform_trades_24h{platform="phantom"} + + - slug: bloom + name: Bloom + tag: "Solana trading terminal" + formula: "Average swap size in USD routed through Bloom (Mobula lighthouse byPlatform, 15 min poll)." + queries: + p50: solana_platform_volume_24h_usd{platform="bloom"} / solana_platform_trades_24h{platform="bloom"} + p90: solana_platform_volume_24h_usd{platform="bloom"} / solana_platform_trades_24h{platform="bloom"} + p99: solana_platform_volume_24h_usd{platform="bloom"} / solana_platform_trades_24h{platform="bloom"} + mean: solana_platform_volume_24h_usd{platform="bloom"} / solana_platform_trades_24h{platform="bloom"} + success: solana_platform_health{platform="bloom"} + sample_size: solana_platform_trades_24h{platform="bloom"} + series: solana_platform_volume_24h_usd{platform="bloom"} / solana_platform_trades_24h{platform="bloom"} diff --git a/harnesses/solana-launchpad-wars/cmd/script/metrics.go b/harnesses/solana-launchpad-wars/cmd/script/metrics.go index 31f24ce3..54cb19cb 100644 --- a/harnesses/solana-launchpad-wars/cmd/script/metrics.go +++ b/harnesses/solana-launchpad-wars/cmd/script/metrics.go @@ -40,6 +40,11 @@ var ( Help: "24h platform fees in USD collected by this Solana trading platform.", }, []string{"platform"}) + platformTrades24h = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "solana_platform_trades_24h", + Help: "24h trade count attributed to this Solana trading platform (Mobula lighthouse).", + }, []string{"platform"}) + platformHealth = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name: "solana_platform_health", Help: "1 if this platform returned data in the last lighthouse poll.", @@ -54,6 +59,7 @@ func init() { launchpadHealth, platformVol24h, platformFees24h, + platformTrades24h, platformHealth, ) } @@ -78,6 +84,7 @@ func publishLighthouse(data *lighthouseData) { if slug == "pumpfun" { platformVol24h.WithLabelValues("pump-fun").Set(e.VolumeUSD.H24) platformFees24h.WithLabelValues("pump-fun").Set(e.FeesPaidUSD.H24) + platformTrades24h.WithLabelValues("pump-fun").Set(e.Trades.H24) platformHealth.WithLabelValues("pump-fun").Set(1) } } @@ -85,6 +92,7 @@ func publishLighthouse(data *lighthouseData) { slug := slugify(e.Name) platformVol24h.WithLabelValues(slug).Set(e.VolumeUSD.H24) platformFees24h.WithLabelValues(slug).Set(e.FeesPaidUSD.H24) + platformTrades24h.WithLabelValues(slug).Set(e.Trades.H24) platformHealth.WithLabelValues(slug).Set(1) } }