From 55d6e431585daff28650a8df8c2dc565ab59339e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 22:48:05 +0200 Subject: [PATCH 1/6] fix(apps): add missing logos for bullx, photon, banana-gun --- public/logos/banana-gun.png | Bin 0 -> 5793 bytes public/logos/bullx.png | Bin 0 -> 2934 bytes public/logos/photon.webp | Bin 0 -> 2068 bytes src/lib/logo-manifest.ts | 3 +++ src/lib/trading-apps-config.ts | 6 +++--- 5 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 public/logos/banana-gun.png create mode 100644 public/logos/bullx.png create mode 100644 public/logos/photon.webp diff --git a/public/logos/banana-gun.png b/public/logos/banana-gun.png new file mode 100644 index 0000000000000000000000000000000000000000..740eca24067ae3aa826a7ff132deff3784d47b35 GIT binary patch literal 5793 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 literal 0 HcmV?d00001 diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 4a2de723..4137b373 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -297,6 +297,9 @@ const RAW: Record = { trojan: "/logos/trojan.jpg", gmgn: "/logos/gmgn.jpg", maestro: "/logos/maestro.jpg", + bullx: "/logos/bullx.png", + photon: "/logos/photon.webp", + "banana-gun": "/logos/banana-gun.png", // ─── App Store ratings (bench № 202) ─── pumpfun: "/logos/pumpfun.svg", diff --git a/src/lib/trading-apps-config.ts b/src/lib/trading-apps-config.ts index 91c2fd8a..f5116f8c 100644 --- a/src/lib/trading-apps-config.ts +++ b/src/lib/trading-apps-config.ts @@ -13,12 +13,12 @@ export type AppMeta = { export const TRADING_APPS: AppMeta[] = [ { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: null, evmKey: "pumpfun", solanaKey: "pump.fun", perpsSlug: null }, { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: null, evmKey: null, solanaKey: "fomo", perpsSlug: null }, - { id: "bullx", name: "BullX", category: "meme-bot", logoKey: null, productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx", perpsSlug: null }, - { id: "photon", name: "Photon", category: "meme-bot", logoKey: null, productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon", perpsSlug: null }, + { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx", perpsSlug: null }, + { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon", perpsSlug: null }, { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: null, evmKey: "gmgn", solanaKey: "gmgn", perpsSlug: null }, { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: null, evmKey: "axiom", solanaKey: "axiom", perpsSlug: null }, { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: null, evmKey: "maestro", solanaKey: null, perpsSlug: null }, - { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: null, productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null, perpsSlug: null }, + { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null, perpsSlug: null }, { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: null, evmKey: null, solanaKey: "trojan", perpsSlug: null }, { id: "hyperliquid", name: "Hyperliquid", category: "perps", logoKey: "hyperliquid", productUrl: "https://hyperliquid.xyz", benchUrl: "/hyperliquid", evmKey: null, solanaKey: null, perpsSlug: "hyperliquid" }, { id: "jupiter-perps", name: "Jupiter Perps", category: "perps", logoKey: "jupiter", productUrl: "https://jup.ag/perps", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "jupiter-perps" }, From d329fc27822dabb49694b5c54e63410e09b55b93 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 23:14:03 +0200 Subject: [PATCH 2/6] feat: rotating proxy primary + helius fallback, 200ms sleep, 2h window --- .../memecoin-platforms/cmd/monitor/main.go | 32 +++++++++++++++---- .../memecoin-platforms/cmd/monitor/mobula.go | 2 +- .../memecoin-platforms/cmd/monitor/solana.go | 16 ++++++---- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/harnesses/memecoin-platforms/cmd/monitor/main.go b/harnesses/memecoin-platforms/cmd/monitor/main.go index 5142b5ec..b19ac938 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/main.go +++ b/harnesses/memecoin-platforms/cmd/monitor/main.go @@ -3,6 +3,7 @@ package main import ( "log" "net/http" + "net/url" "os" "time" @@ -19,8 +20,27 @@ func main() { log.Fatal("MOBULA_API_KEY is required") } + heliusKey := os.Getenv("HELIUS_API_KEY") + mobulaClient := &http.Client{Timeout: 30 * time.Second} - rpcClient := &http.Client{Timeout: 10 * time.Second} + + // rpcClient routes through rotating proxy to avoid per-IP rate limits + var rpcClient *http.Client + if proxyRaw := os.Getenv("HTTPS_PROXY"); proxyRaw != "" { + if proxyURL, err := url.Parse(proxyRaw); err == nil { + rpcClient = &http.Client{ + Timeout: 15 * time.Second, + Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}, + } + log.Printf("rpc: rotating proxy enabled") + } + } + if rpcClient == nil { + rpcClient = &http.Client{Timeout: 15 * time.Second} + } + + // heliusClient used as fallback for older tx not in public RPC history + heliusClient := &http.Client{Timeout: 15 * time.Second} setSolPrice(175.0) updateSolPrice(mobulaClient) @@ -42,12 +62,12 @@ func main() { log.Fatal(http.ListenAndServe(":9090", nil)) }() - runPoll(mobulaClient, rpcClient, apiKey) + runPoll(mobulaClient, rpcClient, heliusClient, heliusKey, apiKey) ticker := time.NewTicker(5 * time.Minute) defer ticker.Stop() for range ticker.C { - runPoll(mobulaClient, rpcClient, apiKey) + runPoll(mobulaClient, rpcClient, heliusClient, heliusKey, apiKey) } } @@ -57,7 +77,7 @@ type platformStats struct { n int } -func runPoll(mobulaClient, rpcClient *http.Client, apiKey string) { +func runPoll(mobulaClient, rpcClient, heliusClient *http.Client, heliusKey, apiKey string) { tokens, err := fetchTopTokens(mobulaClient, 10) if err != nil { log.Printf("[pump.fun] %v", err) @@ -95,7 +115,7 @@ func runPoll(mobulaClient, rpcClient *http.Client, apiKey string) { byPlatform[p] = s } _, cached := txCache.Load(t.Hash) - if !cached && freshLookups >= 15 { + if !cached && freshLookups >= 20 { s.tradeValueSum += t.AmountUSD s.n++ continue @@ -103,7 +123,7 @@ func runPoll(mobulaClient, rpcClient *http.Client, apiKey string) { if !cached { freshLookups++ } - feeUSD := computeExplicitFees(rpcClient, t.Hash, t.Sender) + feeUSD := computeExplicitFees(rpcClient, heliusClient, heliusKey, t.Hash, t.Sender) s.totalFeeSum += feeUSD s.tradeValueSum += t.AmountUSD s.n++ diff --git a/harnesses/memecoin-platforms/cmd/monitor/mobula.go b/harnesses/memecoin-platforms/cmd/monitor/mobula.go index 3a65f19c..135b7aab 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/mobula.go +++ b/harnesses/memecoin-platforms/cmd/monitor/mobula.go @@ -20,7 +20,7 @@ type mobulaTradesResp struct { } func fetchTrades(client *http.Client, apiKey, mint string) ([]MobulaTrade, error) { - from := time.Now().Add(-10 * time.Minute).UnixMilli() + from := time.Now().Add(-2 * time.Hour).UnixMilli() url := fmt.Sprintf( "https://api.mobula.io/api/2/token/trades-enriched?address=%s&chainId=solana:solana&sortOrder=desc&limit=50&from=%d", mint, from, diff --git a/harnesses/memecoin-platforms/cmd/monitor/solana.go b/harnesses/memecoin-platforms/cmd/monitor/solana.go index 9d9091b8..252301d8 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/solana.go +++ b/harnesses/memecoin-platforms/cmd/monitor/solana.go @@ -13,10 +13,11 @@ import ( ) const ( - solanaRPC = "https://solana-rpc.publicnode.com" + rpcPublic = "https://api.mainnet-beta.solana.com" + rpcHelius = "https://mainnet.helius-rpc.com/?api-key=" usdcMint = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" wsolMint = "So11111111111111111111111111111111111111112" - rpcSleep = 1 * time.Second + rpcSleep = 200 * time.Millisecond ) // Known fee wallet owners confirmed via on-chain analysis of tagged Mobula trades. @@ -104,7 +105,7 @@ type tokBal struct { // gas + known platform fee wallet receipts + heuristic small SOL/USDC recipients. // AMM LP fees that stay inside pool accounts are not counted. // Returns 0 on RPC error (logs the failure). -func computeExplicitFees(rpcClient *http.Client, txHash, sender string) float64 { +func computeExplicitFees(proxyClient, heliusClient *http.Client, heliusKey, txHash, sender string) float64 { if txHash == "" { return 0 } @@ -115,7 +116,10 @@ func computeExplicitFees(rpcClient *http.Client, txHash, sender string) float64 txCache.Range(func(k, _ any) bool { txCache.Delete(k); return true }) txCacheSize.Store(0) } - fee, err := fetchOnChainFee(rpcClient, txHash, sender) + fee, err := fetchOnChainFee(proxyClient, rpcPublic, txHash, sender) + if err != nil && heliusKey != "" { + fee, err = fetchOnChainFee(heliusClient, rpcHelius+heliusKey, txHash, sender) + } if err != nil { if err.Error() != "not found" { log.Printf("[solana] %s: %v", txHash[:min(12, len(txHash))], err) @@ -130,7 +134,7 @@ func computeExplicitFees(rpcClient *http.Client, txHash, sender string) float64 return fee } -func fetchOnChainFee(rpcClient *http.Client, txHash, sender string) (float64, error) { +func fetchOnChainFee(rpcClient *http.Client, rpcURL, txHash, sender string) (float64, error) { body, _ := json.Marshal(map[string]interface{}{ "jsonrpc": "2.0", "id": 1, "method": "getTransaction", @@ -139,7 +143,7 @@ func fetchOnChainFee(rpcClient *http.Client, txHash, sender string) (float64, er "maxSupportedTransactionVersion": 0, }}, }) - req, _ := http.NewRequest("POST", solanaRPC, bytes.NewReader(body)) + req, _ := http.NewRequest("POST", rpcURL, bytes.NewReader(body)) req.Header.Set("Content-Type", "application/json") resp, err := rpcClient.Do(req) From aa89287954ef55f4642e0eca5fe2145a4f66e917 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 23:18:27 +0200 Subject: [PATCH 3/6] fix(apps): remove perps, keep bots only --- src/app/apps/page.tsx | 29 ++++----------------- src/components/trading-apps-leaderboard.tsx | 5 +--- src/lib/trading-apps-config.ts | 28 +++++++------------- 3 files changed, 16 insertions(+), 46 deletions(-) diff --git a/src/app/apps/page.tsx b/src/app/apps/page.tsx index 4f12a426..c849bc20 100644 --- a/src/app/apps/page.tsx +++ b/src/app/apps/page.tsx @@ -2,7 +2,6 @@ import type { Metadata } from "next"; import { pageMetadata } from "@/lib/page-metadata"; import { safeJsonLd, buildBreadcrumbJsonLd } from "@/lib/jsonld"; import { SITE } from "@/data/site"; -import { fetchAppsLeaderboard } from "@/lib/apps-leaderboard"; import { fetchEVMRevenue } from "@/lib/evm-exec"; import { fetchExecLeaderboard } from "@/lib/solana-exec"; import { fetchSolPrice } from "@/lib/sol-price"; @@ -11,19 +10,18 @@ import { TradingAppsLeaderboard, type UnifiedAppRow } from "@/components/trading import Link from "next/link"; const DESCRIPTION = - "Protocol fees collected by trading apps: meme bots, telegram bots, and perps. On-chain data, updated hourly."; + "Protocol fees collected by trading apps: meme bots and telegram bots. On-chain data, updated hourly."; export const metadata: Metadata = pageMetadata({ path: "/apps", - title: "Trading App Revenue — pump.fun, Axiom, GMGN, Hyperliquid | OpenChainBench", + title: "Trading App Revenue — pump.fun, Axiom, GMGN, BullX | OpenChainBench", description: DESCRIPTION, }); export const revalidate = 300; export default async function AppsHubPage() { - const [perpsData, evmData, solanaData, solPrice] = await Promise.all([ - fetchAppsLeaderboard(), + const [evmData, solanaData, solPrice] = await Promise.all([ fetchEVMRevenue(), fetchExecLeaderboard(), fetchSolPrice(), @@ -37,22 +35,7 @@ export default async function AppsHubPage() { (solanaData?.platforms ?? []).map((p) => [p.platform, p]) ); - const perpsBySlug = new Map( - (perpsData?.protocols ?? []).map((p) => [p.slug, p]) - ); - const rows: UnifiedAppRow[] = TRADING_APPS.map((meta) => { - if (meta.perpsSlug !== null) { - const perp = perpsBySlug.get(meta.perpsSlug); - const gross = perp?.windows["24h"]?.gross ?? 0; - return { - meta, - fees: { solana: null, ethereum: null, bsc: null, base: null }, - stableOnly: { ethereum: false, bsc: false, base: false }, - total24h: gross, - }; - } - const evmRow = meta.evmKey ? evmByPlatform.get(meta.evmKey) : undefined; const solRow = meta.solanaKey ? solanaByPlatform.get(meta.solanaKey) : undefined; @@ -87,8 +70,7 @@ export default async function AppsHubPage() { }; }); - const updatedAt = - evmData?.updatedAt ?? solanaData?.updatedAt ?? perpsData?.updatedAt ?? null; + const updatedAt = evmData?.updatedAt ?? solanaData?.updatedAt ?? null; const breadcrumb = { "@context": "https://schema.org", @@ -119,8 +101,7 @@ export default async function AppsHubPage() {

Solana fees = txCount × avgPlatformFeeLamports / 1e9 × SOL price. - EVM fees = stable (USDC/USDT) + native where traceable. - Perps = gross fees 24h from on-chain data.{" "} + EVM fees = stable (USDC/USDT) + native where traceable.{" "} Detailed execution metrics → diff --git a/src/components/trading-apps-leaderboard.tsx b/src/components/trading-apps-leaderboard.tsx index d77f55c8..ea80b9cf 100644 --- a/src/components/trading-apps-leaderboard.tsx +++ b/src/components/trading-apps-leaderboard.tsx @@ -17,25 +17,22 @@ export type UnifiedAppRow = { total24h: number; }; -type TabKey = "all" | "meme-bot" | "telegram-bot" | "perps"; +type TabKey = "all" | "meme-bot" | "telegram-bot"; const TABS: { key: TabKey; label: string }[] = [ { key: "all", label: "All" }, { key: "meme-bot", label: "Meme Bots" }, { key: "telegram-bot", label: "Telegram Bots" }, - { key: "perps", label: "Perps" }, ]; const CATEGORY_BADGE: Record = { "meme-bot": "bg-orange-500/10 text-orange-400 border border-orange-500/20", "telegram-bot": "bg-blue-500/10 text-blue-400 border border-blue-500/20", - perps: "bg-purple-500/10 text-purple-400 border border-purple-500/20", }; const CATEGORY_LABEL: Record = { "meme-bot": "Meme Bot", "telegram-bot": "Telegram Bot", - perps: "Perps", }; function fmtUSD(n: number | null): string { diff --git a/src/lib/trading-apps-config.ts b/src/lib/trading-apps-config.ts index f5116f8c..65d07c44 100644 --- a/src/lib/trading-apps-config.ts +++ b/src/lib/trading-apps-config.ts @@ -1,30 +1,22 @@ export type AppMeta = { id: string; name: string; - category: "meme-bot" | "telegram-bot" | "perps"; + category: "meme-bot" | "telegram-bot"; logoKey: string | null; productUrl: string; benchUrl: string | null; evmKey: string | null; solanaKey: string | null; - perpsSlug: string | null; }; export const TRADING_APPS: AppMeta[] = [ - { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: null, evmKey: "pumpfun", solanaKey: "pump.fun", perpsSlug: null }, - { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: null, evmKey: null, solanaKey: "fomo", perpsSlug: null }, - { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx", perpsSlug: null }, - { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon", perpsSlug: null }, - { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: null, evmKey: "gmgn", solanaKey: "gmgn", perpsSlug: null }, - { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: null, evmKey: "axiom", solanaKey: "axiom", perpsSlug: null }, - { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: null, evmKey: "maestro", solanaKey: null, perpsSlug: null }, - { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null, perpsSlug: null }, - { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: null, evmKey: null, solanaKey: "trojan", perpsSlug: null }, - { id: "hyperliquid", name: "Hyperliquid", category: "perps", logoKey: "hyperliquid", productUrl: "https://hyperliquid.xyz", benchUrl: "/hyperliquid", evmKey: null, solanaKey: null, perpsSlug: "hyperliquid" }, - { id: "jupiter-perps", name: "Jupiter Perps", category: "perps", logoKey: "jupiter", productUrl: "https://jup.ag/perps", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "jupiter-perps" }, - { id: "gmx", name: "GMX", category: "perps", logoKey: "gmx", productUrl: "https://gmx.io", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "gmx" }, - { id: "dydx", name: "dYdX", category: "perps", logoKey: "dydx", productUrl: "https://dydx.exchange", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "dydx" }, - { id: "gains-trade", name: "Gains.trade", category: "perps", logoKey: "gains", productUrl: "https://gains.trade", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "gains-trade" }, - { id: "drift", name: "Drift", category: "perps", logoKey: "drift", productUrl: "https://drift.trade", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "drift" }, - { id: "vertex", name: "Vertex", category: "perps", logoKey: "vertex", productUrl: "https://vertexprotocol.com", benchUrl: null, evmKey: null, solanaKey: null, perpsSlug: "vertex" }, + { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: null, evmKey: "pumpfun", solanaKey: "pump.fun" }, + { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: null, evmKey: null, solanaKey: "fomo" }, + { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx" }, + { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon" }, + { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: null, evmKey: "gmgn", solanaKey: "gmgn" }, + { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: null, evmKey: "axiom", solanaKey: "axiom" }, + { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: null, evmKey: "maestro", solanaKey: null }, + { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null }, + { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: null, evmKey: null, solanaKey: "trojan" }, ]; From ab170e86acd4d7bf094fb6963ea630b44a66025e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 23:26:10 +0200 Subject: [PATCH 4/6] feat(apps): 24h/7d/30d window selector, internal bench links, Solana header link --- src/app/apps/page.tsx | 33 ++++-- src/components/trading-apps-leaderboard.tsx | 124 ++++++++++++++------ src/lib/trading-apps-config.ts | 18 +-- 3 files changed, 122 insertions(+), 53 deletions(-) diff --git a/src/app/apps/page.tsx b/src/app/apps/page.tsx index c849bc20..7b9d9905 100644 --- a/src/app/apps/page.tsx +++ b/src/app/apps/page.tsx @@ -20,6 +20,8 @@ export const metadata: Metadata = pageMetadata({ export const revalidate = 300; +const WINDOWS = ["24h", "7d", "30d"] as const; + export default async function AppsHubPage() { const [evmData, solanaData, solPrice] = await Promise.all([ fetchEVMRevenue(), @@ -43,30 +45,39 @@ export default async function AppsHubPage() { const bscChain = evmRow?.chains["bsc"]; const baseChain = evmRow?.chains["base"]; + // EVM fees are always 24h — we don't have multi-window EVM data. const ethFees = ethChain ? ethChain.stable24h + (ethChain.native?.usd ?? 0) : null; const bscFees = bscChain ? bscChain.stable24h + (bscChain.native?.usd ?? 0) : null; const baseFees = baseChain ? baseChain.stable24h + (baseChain.native?.usd ?? 0) : null; + const evmTotal = (ethFees ?? 0) + (bscFees ?? 0) + (baseFees ?? 0); + + const windows: UnifiedAppRow["windows"] = {}; - let solanaFees: number | null = null; - if (solRow && solPrice !== null) { - const window24h = solRow.windows["24h"]; - if (window24h) { - solanaFees = (window24h.txCount * window24h.avgPlatformFeeLamports) / 1e9 * solPrice; + for (const w of WINDOWS) { + let solanaFees: number | null = null; + if (solRow && solPrice !== null) { + const wData = solRow.windows[w]; + if (wData) { + solanaFees = (wData.txCount * wData.avgPlatformFeeLamports) / 1e9 * solPrice; + } } + windows[w] = { + solana: solanaFees, + ethereum: ethFees, + bsc: bscFees, + base: baseFees, + total: (solanaFees ?? 0) + evmTotal, + }; } - const total24h = - (solanaFees ?? 0) + (ethFees ?? 0) + (bscFees ?? 0) + (baseFees ?? 0); - return { meta, - fees: { solana: solanaFees, ethereum: ethFees, bsc: bscFees, base: baseFees }, + windows, stableOnly: { ethereum: ethChain?.coverage === "stable-only", bsc: bscChain?.coverage === "stable-only", base: baseChain?.coverage === "stable-only", }, - total24h, }; }); @@ -101,7 +112,7 @@ export default async function AppsHubPage() {

Solana fees = txCount × avgPlatformFeeLamports / 1e9 × SOL price. - EVM fees = stable (USDC/USDT) + native where traceable.{" "} + EVM fees = stable (USDC/USDT) + native where traceable, always 24h.{" "} Detailed execution metrics → diff --git a/src/components/trading-apps-leaderboard.tsx b/src/components/trading-apps-leaderboard.tsx index ea80b9cf..d15ccc37 100644 --- a/src/components/trading-apps-leaderboard.tsx +++ b/src/components/trading-apps-leaderboard.tsx @@ -1,23 +1,27 @@ "use client"; import Image from "next/image"; +import Link from "next/link"; import { useState } from "react"; import { logoPath } from "@/lib/logo-manifest"; import type { AppMeta } from "@/lib/trading-apps-config"; +type FeeWindow = { + solana: number | null; + ethereum: number | null; + bsc: number | null; + base: number | null; + total: number; +}; + export type UnifiedAppRow = { meta: AppMeta; - fees: { - solana: number | null; - ethereum: number | null; - bsc: number | null; - base: number | null; - }; + windows: Record; stableOnly: { ethereum: boolean; bsc: boolean; base: boolean }; - total24h: number; }; type TabKey = "all" | "meme-bot" | "telegram-bot"; +type WindowKey = "24h" | "7d" | "30d"; const TABS: { key: TabKey; label: string }[] = [ { key: "all", label: "All" }, @@ -25,6 +29,12 @@ const TABS: { key: TabKey; label: string }[] = [ { key: "telegram-bot", label: "Telegram Bots" }, ]; +const WINDOWS: { key: WindowKey; label: string }[] = [ + { key: "24h", label: "24h" }, + { key: "7d", label: "7d" }, + { key: "30d", label: "30d" }, +]; + const CATEGORY_BADGE: Record = { "meme-bot": "bg-orange-500/10 text-orange-400 border border-orange-500/20", "telegram-bot": "bg-blue-500/10 text-blue-400 border border-blue-500/20", @@ -79,9 +89,12 @@ export function TradingAppsLeaderboard({ updatedAt: string | null; }) { const [tab, setTab] = useState("all"); + const [window, setWindow] = useState("24h"); const filtered = tab === "all" ? rows : rows.filter((r) => r.meta.category === tab); - const sorted = [...filtered].sort((a, b) => b.total24h - a.total24h); + const sorted = [...filtered].sort( + (a, b) => (b.windows[window]?.total ?? 0) - (a.windows[window]?.total ?? 0) + ); const hasStableOnly = sorted.some( (r) => r.stableOnly.ethereum || r.stableOnly.bsc || r.stableOnly.base @@ -106,11 +119,29 @@ export function TradingAppsLeaderboard({ ))} - {updatedAt && ( - - Updated {new Date(updatedAt).toLocaleString()} - - )} +

+
+ {WINDOWS.map((w) => ( + + ))} +
+ {updatedAt && ( + + {new Date(updatedAt).toLocaleString()} + + )} +
@@ -120,16 +151,23 @@ export function TradingAppsLeaderboard({ # App Category - Solana + + + Solana + + Ethereum BSC Base - Total 24h + + Total {window} + {sorted.map((row, i) => { - const { meta, fees, stableOnly } = row; + const { meta, stableOnly } = row; + const fees = row.windows[window] ?? { solana: null, ethereum: null, bsc: null, base: null, total: 0 }; const logo = meta.logoKey ? logoPath(meta.logoKey) : null; return ( @@ -141,23 +179,37 @@ export function TradingAppsLeaderboard({ {i + 1} - - {logo && ( - {meta.name} + @@ -169,7 +221,7 @@ export function TradingAppsLeaderboard({ - {row.total24h > 0 ? fmtUSD(row.total24h) : } + {fees.total > 0 ? fmtUSD(fees.total) : } ); @@ -181,6 +233,12 @@ export function TradingAppsLeaderboard({ {hasStableOnly && (

° USDC only (no native trace on Base). + {window !== "24h" && " EVM fees are always 24h — only Solana has multi-window data."} +

+ )} + {!hasStableOnly && window !== "24h" && ( +

+ EVM fees (ETH/BSC/Base) are always 24h — only Solana has multi-window data.

)}
diff --git a/src/lib/trading-apps-config.ts b/src/lib/trading-apps-config.ts index 65d07c44..8195d67e 100644 --- a/src/lib/trading-apps-config.ts +++ b/src/lib/trading-apps-config.ts @@ -10,13 +10,13 @@ export type AppMeta = { }; export const TRADING_APPS: AppMeta[] = [ - { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: null, evmKey: "pumpfun", solanaKey: "pump.fun" }, - { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: null, evmKey: null, solanaKey: "fomo" }, - { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx" }, - { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon" }, - { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: null, evmKey: "gmgn", solanaKey: "gmgn" }, - { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: null, evmKey: "axiom", solanaKey: "axiom" }, - { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: null, evmKey: "maestro", solanaKey: null }, - { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null }, - { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: null, evmKey: null, solanaKey: "trojan" }, + { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: "/apps/exec", evmKey: "pumpfun", solanaKey: "pump.fun" }, + { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: "/apps/exec", evmKey: null, solanaKey: "fomo" }, + { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: "/apps/exec", evmKey: null, solanaKey: "bullx" }, + { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: "/apps/exec", evmKey: null, solanaKey: "photon" }, + { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: "/apps/exec", evmKey: "gmgn", solanaKey: "gmgn" }, + { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: "/apps/exec", evmKey: "axiom", solanaKey: "axiom" }, + { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: "/apps/exec", evmKey: "maestro", solanaKey: null }, + { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: "/apps/exec", evmKey: "banana-gun", solanaKey: null }, + { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: "/apps/exec", evmKey: null, solanaKey: "trojan" }, ]; From 44dea1dc08a733eec33e1bd2ba38bb42a1ab6e55 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 23:33:21 +0200 Subject: [PATCH 5/6] feat(bench-202): swap to pure trading apps, add Coinbase/Bybit/Kraken/Binance.US, remove Phantom/DEX Screener --- benchmarks/app-store-ratings.yml | 131 +++++++++++------- .../app-store-ratings/cmd/script/main.go | 6 +- public/logos/binance-us.jpg | Bin 0 -> 41901 bytes public/logos/bybit.jpg | Bin 5652 -> 14475 bytes public/logos/coinbase.jpg | Bin 0 -> 19273 bytes public/logos/kraken.jpg | Bin 0 -> 16369 bytes src/lib/brand.ts | 6 +- src/lib/logo-manifest.ts | 3 +- 8 files changed, 88 insertions(+), 58 deletions(-) create mode 100644 public/logos/binance-us.jpg create mode 100644 public/logos/coinbase.jpg create mode 100644 public/logos/kraken.jpg diff --git a/benchmarks/app-store-ratings.yml b/benchmarks/app-store-ratings.yml index 387e884e..cc2de5a6 100644 --- a/benchmarks/app-store-ratings.yml +++ b/benchmarks/app-store-ratings.yml @@ -2,10 +2,10 @@ slug: app-store-ratings number: "202" -title: "Crypto trading app iOS ratings: PumpFun vs Fomo vs Phantom vs Moonshot, live" -seo_title: "Crypto trading app App Store ratings 2026: PumpFun, Fomo, Phantom, Moonshot" -seo_description: "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars. PumpFun vs Fomo vs Phantom vs Moonshot vs DEX Screener ranked live from iTunes ratings." -subtitle: Live Apple App Store ratings for the leading crypto trading and meme coin apps on iOS. Updated every 30 minutes from the iTunes lookup API. Rating is the current average across all user reviews. Review count shows how many users voted. +title: "Crypto trading app iOS ratings: Coinbase vs Bybit vs Fomo vs PumpFun, live" +seo_title: "Crypto trading app App Store ratings 2026: Coinbase, Bybit, Kraken, Fomo, PumpFun, GMGN, Moonshot" +seo_description: "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars. Coinbase vs Bybit vs Kraken vs Fomo vs PumpFun vs GMGN vs Moonshot ranked live from iTunes ratings." +subtitle: Live Apple App Store ratings for the leading crypto trading apps on iOS. Updated every 30 minutes from the iTunes lookup API. Rating is the current average across all user reviews. Review count shows how many users voted. category: Trading status: live @@ -17,17 +17,14 @@ disclaimer: | Ratings reflect the current all-time average user rating from the Apple App Store as returned by the iTunes lookup API. Apple does not expose star-distribution breakdowns or time-windowed averages via the public API. A high rating with few reviews carries more statistical uncertainty than the same rating with tens of thousands of reviews. The review count column shows how many users contributed to each rating. seo_intro: | - The PumpFun and Fomo battle for Solana meme coin traders has moved to the - App Store. Both launched iOS apps within months of each other in 2024 to - 2025, and user ratings are a live signal of trader satisfaction. Fomo - launched in April 2025 and has already accumulated over 7,000 ratings - despite being newer than PumpFun, suggesting a highly engaged user base. - Phantom, the dominant Solana wallet, leads on raw review volume with over - 64,000 ratings. Moonshot by DEX Screener targets fiat-onboarding with Apple - Pay integration and has 28,000 ratings. DEX Screener, the leading token - analytics app, rounds out the comparison. This benchmark is the only live - ranking of crypto trading app satisfaction on the App Store, updated every - 30 minutes. + This benchmark ranks the top crypto trading apps on the iOS App Store by + user rating, updated live every 30 minutes from the iTunes lookup API. It + spans both centralized exchange apps (Coinbase, Bybit, Kraken, Binance.US) + and on-chain trading terminals (Fomo, GMGN, PumpFun, Moonshot). Coinbase + leads on raw review volume with over 1.8 million ratings, making it the + most statistically reliable data point in the set. On-chain apps like Fomo + have accumulated over 7,000 ratings since launching in April 2025, signaling + strong early engagement from DeFi-native traders. abstract: | The harness polls the iTunes public lookup API @@ -36,25 +33,27 @@ abstract: | places by Apple) and userRatingCount (total all-time reviews). The harness exposes three gauges per app: app_store_rating, app_store_reviews_total, and app_store_health. No API key is required. Apple caches the endpoint - but updates it within hours of new reviews arriving. The benchmark YAML - selects five crypto trading apps with iOS presence. + but updates it within hours of new reviews arriving. methodology: - "Source: Apple iTunes public lookup API (itunes.apple.com/lookup?id=&country=us). No authentication required. Returns averageUserRating and userRatingCount." - "Poll cadence: harness fetches each app every 30 minutes. Ratings change slowly (daily to weekly) so 30-minute polling captures all meaningful changes while respecting Apple caching." - "Rating: Apple computes the average across all all-time user reviews. Apple does not expose time-windowed (e.g. current version only) averages via the public API endpoint used here." - "Review count: total number of ratings ever submitted on the US App Store. Higher = more statistically reliable average." - - "PumpFun (ID 6717572591): launched Oct 2024. Bonding-curve launchpad and trading app for Solana meme coins." + - "Coinbase (ID 886427730): the largest US crypto exchange. Over 1.8 million App Store ratings." + - "Bybit (ID 1488296980): major global exchange strong on derivatives and spot trading." + - "Kraken (ID 1481947260): veteran US exchange with strong security reputation." + - "Binance.US (ID 1492670702): US-regulated arm of Binance, available on the US App Store." - "Fomo (ID 6741115427): launched Apr 2025. Social copy-trading and meme coin terminal, backed by Index Ventures and USV." - - "Phantom (ID 1598432977): the dominant Solana wallet with integrated DEX swap functionality." + - "GMGN (ID 6745328711): AI-powered trading terminal focused on Solana meme coins." + - "PumpFun (ID 6717572591): launched Oct 2024. Bonding-curve launchpad and trading app for Solana meme coins." - "Moonshot (ID 6503993131): mobile-first meme coin launchpad with fiat onramp via Apple Pay, by DEX Screener." - - "DEX Screener (ID 1631840457): leading multi-chain token analytics and charting app." findings: - "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars." - - "Fomo has accumulated over 7,000 ratings since its April 2025 launch, roughly 3x more than PumpFun despite launching 6 months later, signalling strong mobile-native engagement." - - "Phantom leads on review volume with over 64,000 ratings, reflecting its position as the primary Solana wallet for retail users." - - "Moonshot targets the fiat-onboarding angle with Apple Pay support; its 28,000 ratings reflect strong traction among non-crypto-native users." + - "Coinbase dominates on review volume with over 1.8 million ratings, making it the most statistically robust data point in the set." + - "Fomo has accumulated over 7,000 ratings since its April 2025 launch despite being one of the newest entrants, signaling strong mobile-native engagement." + - "On-chain trading apps (Fomo, GMGN, PumpFun, Moonshot) compete directly with major CEX apps for the same mobile trader." source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/app-store-ratings @@ -69,7 +68,7 @@ metric_panels: metric: app_store_reviews_total unit: count higher_is_better: true - description: "Total number of user ratings submitted on the US App Store. More reviews = more statistically reliable average. Phantom leads with 64k+ ratings; Fomo has 7k+ despite launching only in April 2025." + description: "Total number of user ratings submitted on the US App Store. More reviews = more statistically reliable average. Coinbase leads with 1.8M+ ratings." ledger_columns: - { label: "Rating", slot: p50 } @@ -77,17 +76,58 @@ ledger_columns: faq: - q: "Why does the App Store rating matter for a trading app?" - a: "App Store ratings are the most visible public signal of user satisfaction for mobile products. For trading apps competing for the same Solana meme trader, a higher rating and more reviews signals a better-received product. Fomo's 4.77 rating with 7,000+ reviews compared to PumpFun's 4.70 with 2,200 reviews reflects a more engaged early adopter base." + a: "App Store ratings are the most visible public signal of user satisfaction for mobile products. For trading apps competing for the same users, a higher rating and more reviews signals a better-received product." - q: "How often do App Store ratings change?" a: "Slowly. Individual ratings accumulate continuously but the average moves over days to weeks. The harness polls every 30 minutes to capture any meaningful shift; in practice the number updates at most once or twice per day." - q: "Why is this the US App Store only?" a: "The iTunes public lookup API returns US store data by default. Review counts and ratings can differ by country. The US store is the largest single market and the standard reference for app comparisons." - q: "Does this include Google Play ratings?" - a: "No. Neither Fomo nor PumpFun has an Android app as of August 2026. All five apps in this bench are iOS-only." + a: "No. This benchmark covers the US App Store only. CEX apps like Coinbase and Bybit have Android versions but on-chain apps like Fomo and PumpFun are iOS-only as of 2026." - q: "What is Moonshot?" a: "Moonshot is a mobile-first meme coin launchpad built by DEX Screener, the leading token analytics platform. It differentiates via fiat onboarding through Apple Pay, targeting users who want to buy meme coins without setting up a crypto wallet first." + - q: "Why Binance.US and not Binance?" + a: "The global Binance app is not available on the US App Store due to regulatory restrictions. Binance.US is the separate US-licensed entity with its own app (ID 1492670702) available to American users." providers: + - slug: coinbase + name: Coinbase + tag: "US crypto exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 886427730, US store, all-time average). Review count from app_store_reviews_total{app=\"coinbase\"}." + queries: + p50: app_store_rating{app="coinbase"} + p90: app_store_rating{app="coinbase"} + p99: app_store_rating{app="coinbase"} + mean: app_store_rating{app="coinbase"} + success: app_store_health{app="coinbase"} + sample_size: app_store_reviews_total{app="coinbase"} + series: app_store_rating{app="coinbase"} + + - slug: bybit + name: Bybit + tag: "Global derivatives exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1488296980, US store, all-time average). Review count from app_store_reviews_total{app=\"bybit\"}." + queries: + p50: app_store_rating{app="bybit"} + p90: app_store_rating{app="bybit"} + p99: app_store_rating{app="bybit"} + mean: app_store_rating{app="bybit"} + success: app_store_health{app="bybit"} + sample_size: app_store_reviews_total{app="bybit"} + series: app_store_rating{app="bybit"} + + - slug: kraken + name: Kraken + tag: "US crypto exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1481947260, US store, all-time average). Review count from app_store_reviews_total{app=\"kraken\"}." + queries: + p50: app_store_rating{app="kraken"} + p90: app_store_rating{app="kraken"} + p99: app_store_rating{app="kraken"} + mean: app_store_rating{app="kraken"} + success: app_store_health{app="kraken"} + sample_size: app_store_reviews_total{app="kraken"} + series: app_store_rating{app="kraken"} + - slug: fomo name: Fomo tag: "Social trading app, Solana" @@ -101,32 +141,6 @@ providers: sample_size: app_store_reviews_total{app="fomo"} series: app_store_rating{app="fomo"} - - slug: phantom - name: Phantom - tag: "Solana wallet, DEX aggregator" - formula: "Apple App Store average rating (iTunes lookup API, app ID 1598432977, US store, all-time average). Review count from app_store_reviews_total{app=\"phantom\"}." - queries: - p50: app_store_rating{app="phantom"} - p90: app_store_rating{app="phantom"} - p99: app_store_rating{app="phantom"} - mean: app_store_rating{app="phantom"} - success: app_store_health{app="phantom"} - sample_size: app_store_reviews_total{app="phantom"} - series: app_store_rating{app="phantom"} - - - slug: dex-screener - name: DEX Screener - tag: "Multi-chain token analytics app" - formula: "Apple App Store average rating (iTunes lookup API, app ID 1631840457, US store, all-time average). Review count from app_store_reviews_total{app=\"dex-screener\"}." - queries: - p50: app_store_rating{app="dex-screener"} - p90: app_store_rating{app="dex-screener"} - p99: app_store_rating{app="dex-screener"} - mean: app_store_rating{app="dex-screener"} - success: app_store_health{app="dex-screener"} - sample_size: app_store_reviews_total{app="dex-screener"} - series: app_store_rating{app="dex-screener"} - - slug: gmgn name: GMGN tag: "AI trading terminal, Solana" @@ -165,3 +179,16 @@ providers: success: app_store_health{app="moonshot"} sample_size: app_store_reviews_total{app="moonshot"} series: app_store_rating{app="moonshot"} + + - slug: binance-us + name: Binance.US + tag: "US-regulated Binance exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1492670702, US store, all-time average). Review count from app_store_reviews_total{app=\"binance-us\"}." + queries: + p50: app_store_rating{app="binance-us"} + p90: app_store_rating{app="binance-us"} + p99: app_store_rating{app="binance-us"} + mean: app_store_rating{app="binance-us"} + success: app_store_health{app="binance-us"} + sample_size: app_store_reviews_total{app="binance-us"} + series: app_store_rating{app="binance-us"} diff --git a/harnesses/app-store-ratings/cmd/script/main.go b/harnesses/app-store-ratings/cmd/script/main.go index c910a648..fd54dba8 100644 --- a/harnesses/app-store-ratings/cmd/script/main.go +++ b/harnesses/app-store-ratings/cmd/script/main.go @@ -16,9 +16,11 @@ var apps = []struct { {"pumpfun", "6717572591"}, {"fomo", "6741115427"}, {"gmgn", "6745328711"}, - {"phantom", "1598432977"}, {"moonshot", "6503993131"}, - {"dex-screener", "1631840457"}, + {"coinbase", "886427730"}, + {"bybit", "1488296980"}, + {"kraken", "1481947260"}, + {"binance-us", "1492670702"}, } func main() { diff --git a/public/logos/binance-us.jpg b/public/logos/binance-us.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b24fa2bbd797c67ad59a76b031577ea956299c5 GIT binary patch literal 41901 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 literal 0 HcmV?d00001 diff --git a/public/logos/bybit.jpg b/public/logos/bybit.jpg index de2bba1d94b8b167cf3afbe341938ed11a605c5a..4ea8413e658f4f6e3f0f384f37b1b185724626a1 100644 GIT binary patch literal 14475 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 A^#A|> literal 5652 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 diff --git a/public/logos/coinbase.jpg b/public/logos/coinbase.jpg new file mode 100644 index 0000000000000000000000000000000000000000..287d5fb421486f7baee5523eec70006c47f49d39 GIT binary patch literal 19273 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

rWvI&)%z%(o6FYZQY;8` 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 cKiXaYzcdzm;|}?>Py}XZ~uwA@srj0~o{R)Bpeg literal 0 HcmV?d00001 diff --git a/public/logos/kraken.jpg b/public/logos/kraken.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f00da4ff6ecfa625e6a0fd69bb830e85fd79a9ba GIT binary patch literal 16369 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 NPe$_Ba}; = { // ─── Crypto trading apps (bench № 202) ─── pumpfun: { color: "#00C851" }, // pump.fun green - phantom: { color: "#AB9FF2" }, // phantom purple moonshot: { color: "#F97316" }, // moonshot orange - "dex-screener": { color: "#1C1C1C", dark: true }, // dex screener dark fomo: { color: "#7C3AED" }, // fomo violet + coinbase: { color: "#0052FF" }, // coinbase blue + bybit: { color: "#F7A600" }, // bybit yellow + kraken: { color: "#5741D9" }, // kraken purple + "binance-us": { color: "#F0B90B" }, // binance yellow // ─── Trading / perps ─── hyperliquid: { color: "#22D3EE" }, // cyan diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 4137b373..3f67360b 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -303,9 +303,8 @@ const RAW: Record = { // ─── App Store ratings (bench № 202) ─── pumpfun: "/logos/pumpfun.svg", - phantom: "/logos/phantom.svg", moonshot: "/logos/moonshot.svg", - "dex-screener": "/logos/dex-screener.png", + "binance-us": "/logos/binance-us.jpg", // ─── Hyperliquid frontends (bench № 030) ─── "phantom-perps": "/logos/phantom-perps.svg", axiom: "/logos/axiom.png", From 36101f75f2a0feb61fd4306e38904807ebcc17f2 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Tue, 11 Aug 2026 23:33:42 +0200 Subject: [PATCH 6/6] fix(memecoin): isolate mobulaClient from HTTPS_PROXY, bump rpc timeouts to 30s --- harnesses/memecoin-platforms/cmd/monitor/main.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/harnesses/memecoin-platforms/cmd/monitor/main.go b/harnesses/memecoin-platforms/cmd/monitor/main.go index b19ac938..39015314 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/main.go +++ b/harnesses/memecoin-platforms/cmd/monitor/main.go @@ -22,25 +22,28 @@ func main() { heliusKey := os.Getenv("HELIUS_API_KEY") - mobulaClient := &http.Client{Timeout: 30 * time.Second} + mobulaClient := &http.Client{ + Timeout: 30 * time.Second, + Transport: &http.Transport{Proxy: nil}, + } // rpcClient routes through rotating proxy to avoid per-IP rate limits var rpcClient *http.Client if proxyRaw := os.Getenv("HTTPS_PROXY"); proxyRaw != "" { if proxyURL, err := url.Parse(proxyRaw); err == nil { rpcClient = &http.Client{ - Timeout: 15 * time.Second, + Timeout: 30 * time.Second, Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}, } log.Printf("rpc: rotating proxy enabled") } } if rpcClient == nil { - rpcClient = &http.Client{Timeout: 15 * time.Second} + rpcClient = &http.Client{Timeout: 30 * time.Second} } // heliusClient used as fallback for older tx not in public RPC history - heliusClient := &http.Client{Timeout: 15 * time.Second} + heliusClient := &http.Client{Timeout: 30 * time.Second} setSolPrice(175.0) updateSolPrice(mobulaClient)