From df62833ab4c64e127f811b1915b30fa4c4e15cb4 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:07:18 +0200 Subject: [PATCH 1/5] feat(evm-exec): add pump.fun Terminal fee collectors (ETH/BSC/Base) --- .../evm-exec/internal/platform/platforms.go | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/harnesses/evm-exec/internal/platform/platforms.go b/harnesses/evm-exec/internal/platform/platforms.go index e6e318f2..d40388ec 100644 --- a/harnesses/evm-exec/internal/platform/platforms.go +++ b/harnesses/evm-exec/internal/platform/platforms.go @@ -43,6 +43,27 @@ var BlocksPerDay = map[string]uint64{ // PlatformConfig maps platform → chain → configuration. var PlatformConfig = map[string]map[string]EVMPlatform{ + // pump.fun Terminal (acquired Terminal.fun/Padre Oct 2025) — confirmed via DeFiLlama + "pumpfun": { + "ethereum": { + FeeCollector: "0xa74fa823bc8617fa320a966b3d11b0f722ef09ee", + NativeEnabled: true, + ERC20Tokens: []string{USDC_ETH}, + BootstrapDays: 30, + }, + "bsc": { + FeeCollector: "0x2b0a28a0a9197f8af5d1b8371c048e92dd78b640", + NativeEnabled: true, + ERC20Tokens: []string{USDC_BSC}, + BootstrapDays: 30, + }, + "base": { + FeeCollector: "0x16388de42c5829fd0e88c8eb001ef43bfc93f177", + NativeEnabled: false, // no free trace API on Base; USDC only + ERC20Tokens: []string{USDC_BASE}, + BootstrapDays: 30, + }, + }, "gmgn": { "ethereum": { FeeCollector: "0xb8159ba378904f803639d274cec79f788931c9c8", From 7452b90b69bbb7f75f334a0a27d0a423cbb67909 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:07:22 +0200 Subject: [PATCH 2/5] feat: add bench 201 solana trading platform wars (GMGN vs Axiom vs Fomo vs Trojan) --- benchmarks/solana-trading-platform-wars.yml | 178 ++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 benchmarks/solana-trading-platform-wars.yml diff --git a/benchmarks/solana-trading-platform-wars.yml b/benchmarks/solana-trading-platform-wars.yml new file mode 100644 index 00000000..4bad9894 --- /dev/null +++ b/benchmarks/solana-trading-platform-wars.yml @@ -0,0 +1,178 @@ +# OpenChainBench. Bench 201 + +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." +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 +status: live +metric: 24h volume +unit: usd +higher_is_better: true + +disclaimer: | + Volume figures are sourced from Mobula's lighthouse aggregator, which indexes on-chain swap events attributed to each trading platform or Telegram bot. Data is refreshed every 15 minutes. Platforms with zero volume may indicate no attributable on-chain activity in the last 24 hours or a temporary attribution gap in Mobula's indexing. + +seo_intro: | + Solana's trading frontend market is a three-way race between GMGN, Axiom and + Fomo, with Trojan and Padre close behind as the dominant Telegram bots. This + benchmark tracks the 24-hour trading volume routed through each platform in + real time using Mobula's lighthouse aggregator, which attributes on-chain + swap events to the originating frontend. GMGN and Axiom typically trade + places at the top with 80 to 100 million USD in daily volume each. Fomo + processes roughly 50 million USD per day, while Trojan and Padre serve the + Telegram-native trader segment at 40 and 20 million USD respectively. + Phantom, the dominant Solana wallet, routes roughly 10 million USD per day + through its swap interface. The fee column reveals which platforms capture + the most protocol revenue per dollar traded. + +abstract: | + The harness polls the Mobula lighthouse endpoint (api.mobula.io/api/2/market/lighthouse) + every 15 minutes. Mobula attributes each on-chain swap event to the originating + trading platform or bot using referral tags, program IDs and memo fields embedded + in transactions. The harness exposes three gauges per platform: + solana_platform_volume_24h_usd, solana_platform_fees_24h_usd and + solana_platform_health. All platforms returned by the API are tracked + automatically. The benchmark YAML selects the highest-volume Solana-native + trading platforms as providers. + +methodology: + - "Source: Mobula lighthouse (api.mobula.io/api/2/market/lighthouse), byPlatform field. Mobula attributes swap events using on-chain referral tags, program IDs and memo fields." + - "Poll cadence: harness fetches the endpoint every 15 minutes and updates Prometheus gauges. Prometheus scrapes :2112/metrics every 60 seconds." + - "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)." + - "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: + - "{{best_name}} leads Solana trading platforms at ${{best_p50}} 24h volume." + - "GMGN and Axiom dominate the web-based trading terminal segment, each processing over 80 million USD in daily volume. Their fee rates and UX differentiate them for power traders." + - "Fomo is the third web platform with around 50 million USD per day. Trojan and Padre serve Telegram-native traders at 40 and 20 million USD respectively." + - "Phantom routes roughly 10 million USD per day through its wallet swap interface, confirming that a large share of retail Solana volume touches the wallet layer." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/solana-launchpad-wars + +prometheus: + window: 24h + freshness_metric: solana_platform_volume_24h_usd + +faq: + - q: "Which Solana trading platform has the most volume?" + a: "GMGN and Axiom trade places at the top depending on the day, each routing 80 to 100 million USD in daily on-chain swap volume. Fomo is close behind at around 50 million USD. The leaderboard updates every 15 minutes from live Mobula lighthouse data." + - q: "What is the difference between GMGN and Axiom?" + a: "Both are web-based Solana trading terminals targeting power traders. GMGN emphasizes AI-powered wallet analysis and copy trading. Axiom is a terminal-style platform focused on chart speed and order execution. Both route through Jupiter and direct DEX pools." + - q: "Are Trojan and Padre Telegram bots?" + a: "Yes. Trojan and Padre are Telegram-native trading bots that execute Solana swaps on behalf of users. They embed referral tags in transactions which Mobula uses to attribute volume. Padre is particularly popular among meme coin traders using bonding-curve launchpads." + - q: "Why does Bullx show zero volume?" + a: "BullX has limited Solana attribution in Mobula's lighthouse data. BullX primarily targets Ethereum and EVM chains and its Solana swap volume may not be tagged with referral data that Mobula can attribute." + - q: "How is trading platform volume different from launchpad volume?" + 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: gmgn + name: GMGN + tag: "AI trading terminal on Solana" + formula: "24h swap volume in USD attributed to GMGN (Mobula lighthouse byPlatform[name=GMGN].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="gmgn"} + p90: solana_platform_volume_24h_usd{platform="gmgn"} + p99: solana_platform_volume_24h_usd{platform="gmgn"} + mean: solana_platform_volume_24h_usd{platform="gmgn"} + success: solana_platform_health{platform="gmgn"} + sample_size: solana_platform_fees_24h_usd{platform="gmgn"} + series: solana_platform_volume_24h_usd{platform="gmgn"} + + - slug: axiom + name: Axiom + tag: "Web trading terminal on Solana" + formula: "24h swap volume in USD attributed to Axiom (Mobula lighthouse byPlatform[name=Axiom].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="axiom"} + p90: solana_platform_volume_24h_usd{platform="axiom"} + p99: solana_platform_volume_24h_usd{platform="axiom"} + mean: solana_platform_volume_24h_usd{platform="axiom"} + success: solana_platform_health{platform="axiom"} + sample_size: solana_platform_fees_24h_usd{platform="axiom"} + series: solana_platform_volume_24h_usd{platform="axiom"} + + - slug: fomo + name: Fomo + tag: "Solana trading platform" + formula: "24h swap volume in USD attributed to Fomo (Mobula lighthouse byPlatform[name=Fomo].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="fomo"} + p90: solana_platform_volume_24h_usd{platform="fomo"} + p99: solana_platform_volume_24h_usd{platform="fomo"} + mean: solana_platform_volume_24h_usd{platform="fomo"} + success: solana_platform_health{platform="fomo"} + sample_size: solana_platform_fees_24h_usd{platform="fomo"} + series: solana_platform_volume_24h_usd{platform="fomo"} + + - slug: trojan + name: Trojan + tag: "Telegram trading bot on Solana" + formula: "24h swap volume in USD attributed to Trojan (Mobula lighthouse byPlatform[name=Trojan].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="trojan"} + p90: solana_platform_volume_24h_usd{platform="trojan"} + p99: solana_platform_volume_24h_usd{platform="trojan"} + mean: solana_platform_volume_24h_usd{platform="trojan"} + success: solana_platform_health{platform="trojan"} + sample_size: solana_platform_fees_24h_usd{platform="trojan"} + series: solana_platform_volume_24h_usd{platform="trojan"} + + - slug: padre + name: Padre + tag: "AI Telegram bot on Solana" + formula: "24h swap volume in USD attributed to Padre (Mobula lighthouse byPlatform[name=Padre].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="padre"} + p90: solana_platform_volume_24h_usd{platform="padre"} + p99: solana_platform_volume_24h_usd{platform="padre"} + mean: solana_platform_volume_24h_usd{platform="padre"} + success: solana_platform_health{platform="padre"} + sample_size: solana_platform_fees_24h_usd{platform="padre"} + series: solana_platform_volume_24h_usd{platform="padre"} + + - slug: phantom + name: Phantom + tag: "Solana wallet, DEX aggregator" + formula: "24h swap volume in USD attributed to Phantom wallet (Mobula lighthouse byPlatform[name=Phantom].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="phantom"} + p90: solana_platform_volume_24h_usd{platform="phantom"} + p99: solana_platform_volume_24h_usd{platform="phantom"} + mean: solana_platform_volume_24h_usd{platform="phantom"} + success: solana_platform_health{platform="phantom"} + sample_size: solana_platform_fees_24h_usd{platform="phantom"} + series: solana_platform_volume_24h_usd{platform="phantom"} + + - slug: photon + name: Photon + tag: "Solana trading terminal" + formula: "24h swap volume in USD attributed to Photon (Mobula lighthouse byPlatform[name=Photon].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="photon"} + p90: solana_platform_volume_24h_usd{platform="photon"} + p99: solana_platform_volume_24h_usd{platform="photon"} + mean: solana_platform_volume_24h_usd{platform="photon"} + success: solana_platform_health{platform="photon"} + sample_size: solana_platform_fees_24h_usd{platform="photon"} + series: solana_platform_volume_24h_usd{platform="photon"} + + - slug: maestro + name: Maestro + tag: "Telegram trading bot on Solana" + formula: "24h swap volume in USD attributed to Maestro (Mobula lighthouse byPlatform[name=Maestro].volumeUSD.24h, updated every 15 min)." + queries: + p50: solana_platform_volume_24h_usd{platform="maestro"} + p90: solana_platform_volume_24h_usd{platform="maestro"} + p99: solana_platform_volume_24h_usd{platform="maestro"} + mean: solana_platform_volume_24h_usd{platform="maestro"} + success: solana_platform_health{platform="maestro"} + sample_size: solana_platform_fees_24h_usd{platform="maestro"} + series: solana_platform_volume_24h_usd{platform="maestro"} From 506957c17832b22238a4d6821829c782a252c20a Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:08:12 +0200 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20memecoin-platforms=20spec=20?= =?UTF-8?q?=E2=80=94=20correct=20category,=20providers=20format,=20remove?= =?UTF-8?q?=20invalid=20fields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/memecoin-platforms.yml | 140 +++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 43 deletions(-) diff --git a/benchmarks/memecoin-platforms.yml b/benchmarks/memecoin-platforms.yml index af6aac6b..92beb724 100644 --- a/benchmarks/memecoin-platforms.yml +++ b/benchmarks/memecoin-platforms.yml @@ -1,27 +1,22 @@ -# OpenChainBench. Bench № 200 +# OpenChainBench. Bench 200 slug: memecoin-platforms number: "200" title: Cheapest platform to trade memecoins (Fomo vs pump.fun vs Photon) seo_title: "Fomo vs pump.fun trading fees 2026" seo_description: "Compare trading fees on Fomo, pump.fun, Photon and Axiom. Real fee data from Mobula on the top Solana memecoins by market cap." -subtitle: Average total fee per trade (platform + gas + MEV) as a percent of trade value, sampled across the top 10 pump.fun tokens every 5 minutes. -category: Apps +subtitle: Average total fee per trade (platform fee plus gas plus MEV) as a percent of trade value, sampled across the top 10 pump.fun tokens every 5 minutes. +category: Trading status: live metric: Avg total fee unit: pct -dimensions: - platform: - - { value: fomo, label: Fomo } - - { value: pump-fun, label: pump.fun } - - { value: photon, label: Photon } - - { value: axiom, label: Axiom } +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/memecoin-platforms seo_intro: | Fomo and pump.fun both compete for Solana memecoin traders, but they charge - very differently. This benchmark measures the real all-in cost — platform fee - plus gas plus any MEV — on the top 10 pump.fun tokens by market cap, sampled + very differently. This benchmark measures the real all-in cost, platform fee + plus gas plus any MEV, on the top 10 pump.fun tokens by market cap, sampled every 5 minutes via Mobula's enriched trades API. The headline number is total fee as a percent of trade value, not the advertised fee rate. Aggregators like Photon and Axiom route through the same pools but add their own markup; this @@ -30,40 +25,99 @@ seo_intro: | abstract: | The harness fetches the top 10 tokens by market cap from pump.fun every 5 minutes, then pulls the last 200 trades per token from Mobula's - `/api/2/token/trades-enriched` endpoint (`chainId=solana:solana`). Each trade - carries a `platform` tag (fomo, pump-fun, photon, axiom, …) and three fee - fields: `platformFeesUSD`, `gasFeesUSD`, `mevFeesUSD`. We group by platform, - compute the average total fee (sum of all three) as a percent of `amountUSD`, - and emit `memecoin_platform_fee_pct`. The leaderboard sorts by the median of - that gauge over 24 hours. + token/trades-enriched endpoint (chainId=solana:solana). Each trade carries a + platform tag (fomo, pump-fun, photon, axiom, trojan, gmgn...) and three fee + fields: platformFeesUSD, gasFeesUSD, mevFeesUSD. We group by platform, compute + the average total fee as a percent of amountUSD, and emit + memecoin_platform_fee_pct. The leaderboard sorts by the median over 24 hours. -formula: avg(memecoin_platform_fee_pct) by (platform) +methodology: + - "Tokens: top 10 by market cap from pump.fun, refreshed every 5 minutes." + - "Trades: last 200 trades per token from Mobula token/trades-enriched (chainId=solana:solana)." + - "Cost: totalFeesUSD / amountUSD * 100, covering platform fee plus gas plus MEV." + - "Grouping: trades are split by the platform field returned by Mobula (fomo, pump-fun, photon, axiom, trojan, gmgn, maestro, phantom)." + - "Cadence: full sweep every 5 minutes; each poll covers the 200 most recent trades per token." + - "Aggregation: headline is the average of memecoin_platform_fee_pct across all tracked tokens over 24 hours." -leaderboard: - - id: fee_pct_by_platform - title: Average total fee % by platform - description: Mean fee across all sampled tokens (lower is better) - query: avg(avg_over_time(memecoin_platform_fee_pct[24h])) by (platform) - unit: pct - lower_is_better: true +findings: + - "{{best_name}} currently leads with the lowest average trading fee at {{best_p50}} (p50, 24h) across top pump.fun tokens." + - "{{worst_name}} has the highest average fee at {{worst_p50}} (p50, 24h). Trading bots charge a fixed tip on top of DEX fees, which dominates at small trade sizes." - - id: platform_fee_usd - title: Average platform fee (USD) - description: Explicit protocol fee, excluding gas - query: avg(avg_over_time(memecoin_platform_fee_usd[24h])) by (platform) - unit: usd - lower_is_better: true +faq: + - q: "Is Fomo cheaper than pump.fun?" + a: "{{best_name}} currently leads at {{best_p50}} (p50, 24h). The live leaderboard refreshes every 5 minutes from Mobula trade data." + - q: "What fees do memecoin trading platforms charge?" + a: "Native clients (pump.fun) charge a protocol fee on each swap. Aggregator frontends (Photon, Axiom) add a referral tip on top. Trading bots (Trojan, Maestro, GMGN) charge a fixed percentage per trade. Gas is a separate Solana transaction fee. This benchmark combines all three into a single all-in percent." + - q: "Does MEV affect Solana memecoin trading?" + a: "Minimally at this scale. Solana's parallel execution and fast finality reduce MEV extraction compared to EVM chains. The mevFeesUSD field in Mobula's data is near zero for most trades on these tokens." - - id: gas_usd - title: Average gas fee (USD) - description: Solana transaction fee per trade - query: avg(avg_over_time(memecoin_platform_gas_usd[24h])) by (platform) - unit: usd - lower_is_better: true +prometheus: + window: 24h + expected_freshness_seconds: 900 - - id: trade_volume - title: Trade samples (24h) - description: Number of trades analyzed per platform - query: sum(avg_over_time(memecoin_platform_trade_count[24h])) by (platform) - unit: count - lower_is_better: false +providers: + - slug: fomo + name: Fomo + tag: Mobile app + formula: "Average total fee percent across top pump.fun tokens traded via Fomo, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="fomo"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="fomo"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="fomo"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="fomo"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="fomo"}[24h])) + + - slug: pump-fun + name: pump.fun + tag: Native launchpad + formula: "Average total fee percent across top pump.fun tokens traded via the pump.fun native interface, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="pump-fun"}[24h])) + + - slug: photon + name: Photon + tag: Aggregator frontend + formula: "Average total fee percent across top pump.fun tokens traded via Photon, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="photon"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="photon"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="photon"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="photon"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="photon"}[24h])) + + - slug: axiom + name: Axiom + tag: Aggregator frontend + formula: "Average total fee percent across top pump.fun tokens traded via Axiom, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="axiom"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="axiom"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="axiom"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="axiom"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="axiom"}[24h])) + + - slug: trojan + name: Trojan + tag: Trading bot + formula: "Average total fee percent across top pump.fun tokens traded via Trojan bot, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="trojan"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="trojan"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="trojan"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="trojan"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="trojan"}[24h])) + + - slug: gmgn + name: GMGN + tag: Trading bot + formula: "Average total fee percent across top pump.fun tokens traded via GMGN, 24h median." + queries: + p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="gmgn"})[24h:5m]) + p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="gmgn"})[24h:5m]) + p99: quantile_over_time(0.99, avg(memecoin_platform_fee_pct{platform="gmgn"})[24h:5m]) + mean: avg_over_time(avg(memecoin_platform_fee_pct{platform="gmgn"})[24h:5m]) + sample_size: sum(avg_over_time(memecoin_platform_trade_count{platform="gmgn"}[24h])) From cf8873cbb5bb0ecfebf65d5a394284656c8c7124 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:08:38 +0200 Subject: [PATCH 4/5] feat(evm-exec): expose pumpfun in evm-revenue coverage map --- harnesses/solana-exec/cmd/api/main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/harnesses/solana-exec/cmd/api/main.go b/harnesses/solana-exec/cmd/api/main.go index aa7f84cb..2aa7d0b1 100644 --- a/harnesses/solana-exec/cmd/api/main.go +++ b/harnesses/solana-exec/cmd/api/main.go @@ -228,7 +228,8 @@ func mustEnv(key string) string { // evmCoverage is the static coverage map derived from the evm-exec platform config. // "full" = native + stable; "stable-only" = only ERC-20 USDC tracked. var evmCoverage = map[string]map[string]string{ - "gmgn": {"ethereum": "full", "bsc": "full", "base": "stable-only"}, + "gmgn": {"ethereum": "full", "bsc": "full", "base": "stable-only"}, + "pumpfun": {"ethereum": "full", "bsc": "full", "base": "stable-only"}, } // coinGeckoIDs maps chain name → CoinGecko asset ID for native price lookup. From 41f25b9760a0456ff95c10491a346cbf38b8e823 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:37:56 +0200 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20map=20platform:null=20to=20pump-fun?= =?UTF-8?q?=20=E2=80=94=20Mobula=20does=20not=20tag=20native=20trades?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/memecoin-platforms.yml | 2 +- harnesses/memecoin-platforms/cmd/monitor/main.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/benchmarks/memecoin-platforms.yml b/benchmarks/memecoin-platforms.yml index 92beb724..b02eead4 100644 --- a/benchmarks/memecoin-platforms.yml +++ b/benchmarks/memecoin-platforms.yml @@ -70,7 +70,7 @@ providers: - slug: pump-fun name: pump.fun tag: Native launchpad - formula: "Average total fee percent across top pump.fun tokens traded via the pump.fun native interface, 24h median." + formula: "Average total fee percent for trades on pump.fun bonding curve and its graduated Raydium pools, 24h median. Mobula does not tag pump.fun native trades with a platform id; they return platform:null and are counted here since we exclusively sample pump.fun top tokens." queries: p50: quantile_over_time(0.50, avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) p90: quantile_over_time(0.90, avg(memecoin_platform_fee_pct{platform="pump-fun"})[24h:5m]) diff --git a/harnesses/memecoin-platforms/cmd/monitor/main.go b/harnesses/memecoin-platforms/cmd/monitor/main.go index 534236d4..60b07cf1 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/main.go +++ b/harnesses/memecoin-platforms/cmd/monitor/main.go @@ -74,7 +74,11 @@ func runPoll(client *http.Client, apiKey string) { for _, t := range trades { p := t.Platform if p == "" { - p = "unknown" + // Mobula does not tag pump.fun native trades — they return + // platform:null. Since we only sample pump.fun top tokens, + // untagged trades are overwhelmingly pump.fun bonding curve + // or its graduated Raydium pool. + p = "pump-fun" } s := byPlatform[p] if s == nil {