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) } }