diff --git a/benchmarks/app-store-ratings.yml b/benchmarks/app-store-ratings.yml new file mode 100644 index 00000000..cc8e0afb --- /dev/null +++ b/benchmarks/app-store-ratings.yml @@ -0,0 +1,242 @@ +# OpenChainBench. Bench 202 + +slug: app-store-ratings +number: "202" +title: "Crypto trading app iOS ratings: Coinbase vs Robinhood vs Crypto.com vs Bybit, live" +seo_title: "Crypto trading app App Store ratings 2026: Coinbase, Robinhood, Crypto.com, Bybit, Kraken, Invo, Fomo, PumpFun, GMGN, Moonshot" +seo_description: "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars. Coinbase vs Robinhood vs Crypto.com vs Bybit vs Kraken vs Invo 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 +metric: App Store rating +unit: x +higher_is_better: true + +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: | + 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, Robinhood, Crypto.com, Bybit, + Kraken, Binance.US) and on-chain trading terminals (Fomo, GMGN, PumpFun, + Moonshot). Robinhood leads on raw review volume with nearly 5 million ratings, + making it the most statistically reliable data point in the set. Coinbase + follows with over 1.8 million ratings. 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 + (itunes.apple.com/lookup?id=&country=us) every 30 minutes for each + tracked app. The API returns averageUserRating (0-5, rounded to two decimal + 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. + +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." + - "Robinhood (ID 938003185): the most-reviewed financial app on the US App Store with nearly 5 million ratings. Commission-free investing with crypto added in 2018." + - "Coinbase (ID 886427730): the largest US-regulated crypto exchange. Over 1.8 million App Store ratings." + - "Crypto.com (ID 1262148500): Singapore-headquartered super app with 100M+ users globally, offering spot, derivatives, Visa card and DeFi wallet." + - "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." + - "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." + - "Invo (ID 1601301148): Hyperliquid-native social trading mobile app with 170+ perp pairs and copy trading via its registered builder code on Hyperliquid." + +findings: + - "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars." + - "Robinhood dominates on review volume with nearly 5 million ratings, making it the most statistically robust data point in the set." + - "Coinbase follows with over 1.8 million ratings and is the top pure-crypto exchange by review count." + - "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 + +prometheus: + window: 24h + freshness_metric: app_store_health + +metric_panels: + - id: reviews + label: Review count + label_key: app + 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. Robinhood leads with 4.8M+ ratings, Coinbase follows at 1.8M+." + +ledger_columns: + - { label: "Rating", slot: p50 } + - { label: "Reviews", panel: reviews } + +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 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. 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: "Why does Robinhood have so many more reviews than Coinbase?" + a: "Robinhood launched in 2013 as a stock trading app and had 13 million funded accounts before adding crypto in 2018. Its larger and older user base has had more time to leave App Store reviews. Its nearly 5 million ratings make it the most statistically reliable data point in this benchmark." + - q: "What is Crypto.com and why is it included?" + a: "Crypto.com is one of the largest crypto exchanges globally with 100M+ registered users. Its iOS app combines spot trading, a crypto Visa card, DeFi wallet and staking in a single super app, making it a major competitor to Coinbase for everyday crypto users." + - 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: robinhood + name: Robinhood + tag: "US investing app, 4.8M ratings" + formula: "Apple App Store average rating (iTunes lookup API, app ID 938003185, US store, all-time average). Review count from app_store_reviews_total{app=\"robinhood\"}." + queries: + p50: app_store_rating{app="robinhood"} + p90: app_store_rating{app="robinhood"} + p99: app_store_rating{app="robinhood"} + mean: app_store_rating{app="robinhood"} + success: app_store_health{app="robinhood"} + sample_size: app_store_reviews_total{app="robinhood"} + series: app_store_rating{app="robinhood"} + + - 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: cryptocom + name: Crypto.com + tag: "Global crypto super app" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1262148500, US store, all-time average). Review count from app_store_reviews_total{app=\"cryptocom\"}." + queries: + p50: app_store_rating{app="cryptocom"} + p90: app_store_rating{app="cryptocom"} + p99: app_store_rating{app="cryptocom"} + mean: app_store_rating{app="cryptocom"} + success: app_store_health{app="cryptocom"} + sample_size: app_store_reviews_total{app="cryptocom"} + series: app_store_rating{app="cryptocom"} + + - 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" + formula: "Apple App Store average rating (iTunes lookup API, app ID 6741115427, US store, all-time average). Review count from app_store_reviews_total{app=\"fomo\"}." + queries: + p50: app_store_rating{app="fomo"} + p90: app_store_rating{app="fomo"} + p99: app_store_rating{app="fomo"} + mean: app_store_rating{app="fomo"} + success: app_store_health{app="fomo"} + sample_size: app_store_reviews_total{app="fomo"} + series: app_store_rating{app="fomo"} + + - slug: gmgn + name: GMGN + tag: "AI trading terminal, Solana" + formula: "Apple App Store average rating (iTunes lookup API, app ID 6745328711, US store, all-time average). Review count from app_store_reviews_total{app=\"gmgn\"}." + queries: + p50: app_store_rating{app="gmgn"} + p90: app_store_rating{app="gmgn"} + p99: app_store_rating{app="gmgn"} + mean: app_store_rating{app="gmgn"} + success: app_store_health{app="gmgn"} + sample_size: app_store_reviews_total{app="gmgn"} + series: app_store_rating{app="gmgn"} + + - slug: pump-fun + name: PumpFun + tag: "Solana meme launchpad app" + formula: "Apple App Store average rating (iTunes lookup API, app ID 6717572591, US store, all-time average). Review count from app_store_reviews_total{app=\"pump-fun\"}." + queries: + p50: app_store_rating{app="pump-fun"} + p90: app_store_rating{app="pump-fun"} + p99: app_store_rating{app="pump-fun"} + mean: app_store_rating{app="pump-fun"} + success: app_store_health{app="pump-fun"} + sample_size: app_store_reviews_total{app="pump-fun"} + series: app_store_rating{app="pump-fun"} + + - slug: moonshot + name: Moonshot + tag: "Meme launchpad, Apple Pay" + formula: "Apple App Store average rating (iTunes lookup API, app ID 6503993131, US store, all-time average). Review count from app_store_reviews_total{app=\"moonshot\"}." + queries: + p50: app_store_rating{app="moonshot"} + p90: app_store_rating{app="moonshot"} + p99: app_store_rating{app="moonshot"} + mean: app_store_rating{app="moonshot"} + 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"} + + - slug: invo + name: Invo + tag: "Hyperliquid social trading app" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1601301148, US store, all-time average). Review count from app_store_reviews_total{app=\"invo\"}." + queries: + p50: app_store_rating{app="invo"} + p90: app_store_rating{app="invo"} + p99: app_store_rating{app="invo"} + mean: app_store_rating{app="invo"} + success: app_store_health{app="invo"} + sample_size: app_store_reviews_total{app="invo"} + series: app_store_rating{app="invo"} diff --git a/harnesses/app-store-ratings/Dockerfile b/harnesses/app-store-ratings/Dockerfile new file mode 100644 index 00000000..379e2f91 --- /dev/null +++ b/harnesses/app-store-ratings/Dockerfile @@ -0,0 +1,15 @@ +FROM golang:1.24-alpine AS builder + +WORKDIR /app +RUN apk add --no-cache git + +COPY go.mod ./ +COPY cmd ./cmd +RUN go mod tidy && CGO_ENABLED=0 GOOS=linux go build -o /app/harness ./cmd/script + +FROM debian:bookworm-slim +WORKDIR /app +RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* +COPY --from=builder /app/harness /app/harness +EXPOSE 2112 +CMD ["/app/harness"] diff --git a/harnesses/app-store-ratings/cmd/script/itunes.go b/harnesses/app-store-ratings/cmd/script/itunes.go new file mode 100644 index 00000000..b9e70f6a --- /dev/null +++ b/harnesses/app-store-ratings/cmd/script/itunes.go @@ -0,0 +1,51 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "time" +) + +type itunesEntry struct { + Rating float64 `json:"averageUserRating"` + ReviewCount int `json:"userRatingCount"` + TrackName string `json:"trackName"` +} + +type itunesResp struct { + ResultCount int `json:"resultCount"` + Results []itunesEntry `json:"results"` +} + +func fetchAppStoreData(appID string) (*itunesEntry, error) { + client := &http.Client{Timeout: 10 * time.Second} + url := fmt.Sprintf("https://itunes.apple.com/lookup?id=%s&country=us", appID) + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + req.Header.Set("User-Agent", "OpenChainBench/1.0") + + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("fetch: %w", err) + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + if resp.StatusCode != 200 { + return nil, fmt.Errorf("status_%d", resp.StatusCode) + } + + var data itunesResp + if err := json.Unmarshal(body, &data); err != nil { + return nil, fmt.Errorf("parse: %w", err) + } + if data.ResultCount == 0 || len(data.Results) == 0 { + return nil, fmt.Errorf("no_results") + } + return &data.Results[0], nil +} diff --git a/harnesses/app-store-ratings/cmd/script/main.go b/harnesses/app-store-ratings/cmd/script/main.go new file mode 100644 index 00000000..8cadd48a --- /dev/null +++ b/harnesses/app-store-ratings/cmd/script/main.go @@ -0,0 +1,68 @@ +package main + +import ( + "fmt" + "net/http" + "os" + "time" + + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +var apps = []struct { + slug string + id string +}{ + {"pump-fun", "6717572591"}, + {"fomo", "6741115427"}, + {"gmgn", "6745328711"}, + {"moonshot", "6503993131"}, + {"coinbase", "886427730"}, + {"bybit", "1488296980"}, + {"kraken", "1481947260"}, + {"binance-us", "1492670702"}, + {"robinhood", "938003185"}, + {"cryptocom", "1262148500"}, + {"invo", "1601301148"}, +} + +func main() { + initMetrics() + + if err := runOnce(); err != nil { + fmt.Fprintf(os.Stderr, "[app-store] first run: %v\n", err) + } + + go func() { + tick := time.NewTicker(30 * time.Minute) + for range tick.C { + if err := runOnce(); err != nil { + fmt.Fprintf(os.Stderr, "[app-store] poll: %v\n", err) + } + } + }() + + http.Handle("/metrics", promhttp.Handler()) + http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }) + fmt.Println("[app-store-ratings] metrics on :2112") + if err := http.ListenAndServe(":2112", nil); err != nil { + fmt.Fprintf(os.Stderr, "server: %v\n", err) + os.Exit(1) + } +} + +func runOnce() error { + for _, app := range apps { + data, err := fetchAppStoreData(app.id) + if err != nil { + fmt.Printf("[app-store] %s: %v\n", app.slug, err) + appStoreHealth.WithLabelValues(app.slug).Set(0) + continue + } + appStoreRating.WithLabelValues(app.slug).Set(data.Rating) + appStoreReviews.WithLabelValues(app.slug).Set(float64(data.ReviewCount)) + appStoreHealth.WithLabelValues(app.slug).Set(1) + fmt.Printf("[app-store] %s: rating=%.4f reviews=%d\n", app.slug, data.Rating, data.ReviewCount) + } + return nil +} diff --git a/harnesses/app-store-ratings/cmd/script/metrics.go b/harnesses/app-store-ratings/cmd/script/metrics.go new file mode 100644 index 00000000..4d1aa5e6 --- /dev/null +++ b/harnesses/app-store-ratings/cmd/script/metrics.go @@ -0,0 +1,25 @@ +package main + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var ( + appStoreRating = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "app_store_rating", + Help: "Apple App Store average user rating (0 to 5).", + }, []string{"app"}) + + appStoreReviews = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "app_store_reviews_total", + Help: "Total number of user ratings in the Apple App Store.", + }, []string{"app"}) + + appStoreHealth = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "app_store_health", + Help: "1 if the iTunes lookup succeeded in the last poll.", + }, []string{"app"}) +) + +func initMetrics() {} diff --git a/harnesses/app-store-ratings/go.mod b/harnesses/app-store-ratings/go.mod new file mode 100644 index 00000000..af2f9da2 --- /dev/null +++ b/harnesses/app-store-ratings/go.mod @@ -0,0 +1,5 @@ +module app-store-ratings + +go 1.24.0 + +require github.com/prometheus/client_golang v1.23.2 diff --git a/public/logos/binance-us.jpg b/public/logos/binance-us.jpg new file mode 100644 index 00000000..6b24fa2b Binary files /dev/null and b/public/logos/binance-us.jpg differ diff --git a/public/logos/binance-us.svg b/public/logos/binance-us.svg new file mode 100644 index 00000000..dfe4c478 --- /dev/null +++ b/public/logos/binance-us.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/public/logos/bybit.jpg b/public/logos/bybit.jpg index de2bba1d..4ea8413e 100644 Binary files a/public/logos/bybit.jpg and b/public/logos/bybit.jpg differ diff --git a/public/logos/coinbase.jpg b/public/logos/coinbase.jpg new file mode 100644 index 00000000..287d5fb4 Binary files /dev/null and b/public/logos/coinbase.jpg differ diff --git a/public/logos/cryptocom.jpg b/public/logos/cryptocom.jpg new file mode 100644 index 00000000..9212c9ff Binary files /dev/null and b/public/logos/cryptocom.jpg differ diff --git a/public/logos/cryptocom.svg b/public/logos/cryptocom.svg new file mode 100644 index 00000000..0d8d2454 --- /dev/null +++ b/public/logos/cryptocom.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/logos/kraken.jpg b/public/logos/kraken.jpg new file mode 100644 index 00000000..f00da4ff Binary files /dev/null and b/public/logos/kraken.jpg differ diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 47bde853..25da1ee9 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -1642,6 +1642,38 @@ export const PROVIDER_REGISTRY: Record = { twitter: "@BitgetWallet", }, + // ─── App store / CEX (bench № 202) ───────────────────────────────── + coinbase: { + url: "https://www.coinbase.com", + description: + "Coinbase is the largest US-regulated centralized exchange, publicly listed on Nasdaq (COIN). It offers spot trading, staking, and a self-custody wallet, primarily targeting retail investors in the United States.", + twitter: "@coinbase", + }, + kraken: { + url: "https://www.kraken.com", + description: + "Kraken is a US-registered centralized exchange founded in 2011, offering spot, margin and futures trading across 300+ assets with a strong reputation for security and regulatory compliance.", + twitter: "@krakenfx", + }, + "binance-us": { + url: "https://www.binance.us", + description: + "Binance.US is the US-regulated affiliate of Binance, operating under FinCEN MSB registration. It offers spot trading for US customers on a subset of the global Binance order book.", + twitter: "@BinanceUS", + }, + robinhood: { + url: "https://robinhood.com", + description: + "Robinhood is a US commission-free investing app with 25M+ funded accounts. It added crypto trading in 2018, launched its own L2 chain (Robinhood Chain) in 2025, and is the #1 most-reviewed financial app on the US App Store with nearly 5 million ratings.", + twitter: "@RobinhoodApp", + }, + cryptocom: { + url: "https://crypto.com", + description: + "Crypto.com is a Singapore-headquartered centralized exchange serving 100M+ users globally. The app offers spot and derivatives trading, a Visa card, DeFi wallet and staking, making it one of the most feature-complete crypto super apps on iOS.", + twitter: "@cryptocom", + }, + // ─── Perp funding venues (bench № 036) ───────────────────────────── bybit: { url: "https://www.bybit.com", diff --git a/src/lib/brand.ts b/src/lib/brand.ts index bcc2968a..736b0c2e 100644 --- a/src/lib/brand.ts +++ b/src/lib/brand.ts @@ -83,6 +83,15 @@ const BRANDS: Record = { gmx: { color: "#4F8BFF" }, // royal blue lighter: { color: "#FF2E63" }, // hot magenta gains: { color: "#10E2A4" }, // emerald + + // ─── App store / CEX ─── + invo: { color: "#7B5EA7" }, // invo purple + robinhood: { color: "#00C805" }, // robinhood green + cryptocom: { color: "#002D74", dark: true }, // crypto.com navy + coinbase: { color: "#0052FF" }, // coinbase blue + bybit: { color: "#F7A600" }, // bybit yellow + kraken: { color: "#5741D9" }, // kraken purple + "binance-us": { color: "#F0B90B" }, // binance yellow }; const REGION_VALUES = new Set(["us-east", "eu-west", "ap-southeast", "sgp", "global"]); diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 3b81c121..4c544992 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -317,6 +317,8 @@ const RAW: Record = { kraken: "/logos/kraken.png", kucoin: "/logos/kucoin.png", mexc: "/logos/mexc.png", + "binance-us": "/logos/binance-us.svg", + cryptocom: "/logos/cryptocom.svg", // ─── Hyperliquid HIP-3 deployers (bench № 035) ─── xyz: "/logos/xyz.png", diff --git a/src/lib/trading-apps-config.ts b/src/lib/trading-apps-config.ts new file mode 100644 index 00000000..f6356968 --- /dev/null +++ b/src/lib/trading-apps-config.ts @@ -0,0 +1,36 @@ +export type AppMeta = { + id: string; + name: string; + category: "trading-terminal" | "telegram-bot"; + formFactor: "web" | "mobile" | "telegram"; + logoKey: string | null; + productUrl: string; + benchUrl: string | null; + evmKey: string | null; + solanaKey: string | null; + robinhoodKey: string | null; + defillamaSlug: string | null; + /** "venue" = DL slug covers the whole protocol (bonding curve + creator fees), not a pure frontend */ + defillamaScope?: "venue"; + inactive?: boolean; + inactiveSince?: string; + /** When true, Solana fees are collected in USDC (6 dec raw units) not SOL lamports. + * Frontend uses sumPlatformFeeLamports / 1e6 directly instead of / 1e9 * solPrice. */ + solanaFeeIsUSDC?: boolean; +}; + +export const TRADING_APPS: AppMeta[] = [ + { id: "pump.fun", name: "pump.fun", category: "trading-terminal", formFactor: "web", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: "/benchmarks/trading-app-execution", evmKey: "pumpfun", solanaKey: "pump.fun", robinhoodKey: null, defillamaSlug: "pump.fun", defillamaScope: "venue" }, + { id: "fomo", name: "FOMO", category: "trading-terminal", formFactor: "web", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: "/benchmarks/trading-app-execution", evmKey: null, solanaKey: "fomo", robinhoodKey: null, defillamaSlug: "fomo", solanaFeeIsUSDC: true }, + { id: "phantom", name: "Phantom", category: "trading-terminal", formFactor: "mobile", logoKey: "phantom", productUrl: "https://phantom.com", benchUrl: null, evmKey: null, solanaKey: null, robinhoodKey: null, defillamaSlug: "phantom" }, + { id: "moonshot-money", name: "Moonshot", category: "trading-terminal", formFactor: "mobile", logoKey: null, productUrl: "https://moonshot.money", benchUrl: null, evmKey: null, solanaKey: null, robinhoodKey: null, defillamaSlug: "moonshot-money" }, + { id: "mevx", name: "MevX", category: "trading-terminal", formFactor: "web", logoKey: null, productUrl: "https://mevx.io", benchUrl: null, evmKey: null, solanaKey: null, robinhoodKey: null, defillamaSlug: "mevx" }, + { id: "bullx", name: "BullX", category: "trading-terminal", formFactor: "web", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: "/benchmarks/trading-app-execution", evmKey: null, solanaKey: "bullx", robinhoodKey: null, defillamaSlug: "bullx", inactive: true, inactiveSince: "2026-06-01" }, + { id: "photon", name: "Photon", category: "trading-terminal", formFactor: "web", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: "/benchmarks/trading-app-execution", evmKey: null, solanaKey: "photon", robinhoodKey: null, defillamaSlug: "photon" }, + { id: "gmgn", name: "GMGN", category: "telegram-bot", formFactor: "telegram", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: "/benchmarks/trading-app-execution", evmKey: "gmgn", solanaKey: "gmgn", robinhoodKey: "gmgn-robinhood", defillamaSlug: "gmgn" }, + { id: "axiom", name: "Axiom", category: "telegram-bot", formFactor: "telegram", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: "/benchmarks/trading-app-execution", evmKey: "axiom", solanaKey: "axiom", robinhoodKey: null, defillamaSlug: "axiom" }, + { id: "bloom", name: "Bloom", category: "telegram-bot", formFactor: "telegram", logoKey: null, productUrl: "https://bloom.bot", benchUrl: null, evmKey: null, solanaKey: null, robinhoodKey: null, defillamaSlug: "bloom" }, + { id: "maestro", name: "Maestro", category: "telegram-bot", formFactor: "telegram", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: "/benchmarks/trading-app-execution", evmKey: "maestro", solanaKey: "maestro", robinhoodKey: "maestro-robinhood",defillamaSlug: "maestro" }, + { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", formFactor: "telegram", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: "/benchmarks/trading-app-execution", evmKey: null, solanaKey: "banana-gun", robinhoodKey: null, defillamaSlug: "banana-gun" }, + { id: "trojan", name: "Trojan", category: "telegram-bot", formFactor: "telegram", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: "/benchmarks/trading-app-execution", evmKey: null, solanaKey: "trojan", robinhoodKey: null, defillamaSlug: "trojan" }, +];