Stable Boystable boy
back
methodology

how the score works.

Every Stable Boy score is the same formula. No hand-tuning, no allow-listing, no leaderboard rigging. Here's the entire algorithm in one page.

architecture

Two layers, computed separately.

  • layer 1 · behavioral score (0–100). Weighted average of eight factors that describe how the wallet trades.
  • layer 2 · trust penalties (cap −60). Hard deductions for cluster, bundle, sniper, daisy-chain, and wash patterns.
  • final · clamp(layer1 + layer2, 0, 100)
wallets with <5 lifetime trades AND <3 lifetime tokens return insufficient_data instead of a faked score.
layer 1 · factors
signalweightsource
Hold duration22
GMGN wallet_stats.avg_holding_period
<2min → 0 · 2-10min → 20 · 10min-1h → 40 · 1-6h → 60 · 6-24h → 75 · 1-7d → 88 · >7d → 100
Paperhand ratio18
FIFO entry/exit pairing on wallet_activity
>80% → 0 · 60-80% → 15 · 40-60% → 35 · 20-40% → 60 · 5-20% → 85 · <5% → 100
Funding source13
GMGN fund_from_address + Helius CEX/protocol labels
direct CEX → 100 · 1 hop CEX → 85 · fund/protocol → 75 · 3+ hops → 60 · no funder → 50 · small (<0.5 SOL) → 35 · daisy-chain → 25 · flagged funder → 0
Wallet age12
GMGN common.created_at
<7d → 20 · 7-30d → 45 · 30-180d → 75 · >180d → 100
PnL behavior12
GMGN buy/sell count ratio
ratio>3 (dumpy) → 30 · >1.5 → 55 · >0.7 → 80 · ≤0.7 (hoarder) → 70
Token diversity10
GMGN pnl_stat.token_num / 30d
>20/day → 15 · 10-20 → 35 · 3-10 → 65 · 1-3 → 85 · <1 + held >24h → 100 · <1 + single token → 60
Win/loss distribution8
GMGN PnL buckets (5 ranges)
insider-shape (mostly moons, few losses) → 20 · pure chaser (≥85% losses) → 30 · healthy human → 100 · noisy → 60
SOL balance5
GMGN native_balance (snapshot)
>5 SOL idle → 90 · 1-5 → 70 · 0.1-1 → 50 · <0.1 → 25
total100
layer 2 · penalties
flagpenaltytrigger · source
Bundle co-buy-20
Wallet bought a pump.fun token in the same slot as ≥3 distinct signers buying the same mint
Bitquery same-slot multi-signer scan
Sniper window-5
Wallet bought a token within 3 blocks of its first pump.fun trade
Bitquery earliest-trade-per-mint aggregation
Cluster · 1 hop-15
Wallet's immediate funder appears in our bundler registry
Funder traversal × bundler_taglog (accumulated from token_top_traders)
Cluster · 2 hops-7
Wallet's funder's funder appears in the registry
Same as 1-hop, one level deeper
Funding daisy-chain-15
3+ intermediate wallets, each funded within 24h of its own creation
Funder chain age inspection
Wash trade-10
≥3 tokens with multiple opposite-side trades within 10 minutes of each other
Round-trip pattern detector on wallet_activity
Dormant-then-coordinated-10
Long inactivity then a burst of buys matching a known cluster's timing
v3 — not yet implemented
· bundle co-buy capped at −40 (max 2 bundles count)
· sniper window capped at −20 (max 4 sniped tokens count)
· total layer-2 capped at −60 so penalties can't exceed half the score
verdict bands
80–100Diamond handsreal user, holds, clean cluster
50–79Active traderlegit but rotates fast
20–49Degen / sniperhigh velocity, low conviction
0–19Bundler-adjacentclustered, suspicious funding, instant dumps
data sources
gmgn
wallet_stats (1d / 7d / 30d) · wallet_holdings · wallet_activity · token_top_traders
bitquery
pump.fun bundle co-buy detection · earliest-trade-per-mint aggregation for sniper-window flag
helius
entity labels for funder addresses (CEX, protocol, fund) · powers the +13 “direct from CEX” boost
limitations we're honest about
  • ·Score is based on the last 30 days of GMGN data — wallets dormant in that window may score insufficient-data even if historically active.
  • ·Cluster penalties depend on a self-grown bundler registry. Every wallet scored teaches the next one — early scores have weaker cluster signal than later scores.
  • ·Wash-trade detector catches a wallet self-churning a token. Cross-wallet wash (where the counterparty is another wallet of yours) needs deeper tx-level inspection — flagged as v3.
  • ·SOL balance uses a snapshot, not a time series. A wallet that just received SOL looks identical to one that's held SOL for months.
  • ·Stable Boy is pump.fun / memecoin focused. Wallets that primarily trade Jupiter or non-pump tokens will look small through this lens.
stability scores are a heuristic, not a verdict · cache TTL 24h