The scan
Five reads, in order. Each streams to the page while it runs, so the map builds in front of you.
- 1Token
getAssetName, symbol, decimals, supply.
- 2Holders
getTokenAccountsEvery token account, summed per owner, up to 12,000 accounts. The top 100 are mapped. Bubbles are on screen now.
- 3Wallet history
getTransactionsForAddressEach holder's last 60 transactions, biggest holders first. For a young wallet that is its whole life: first SOL, first buy, the reload and every transfer.
- 4Older wallets
first SOL + token accountWhen the history is longer, the first SOL and the oldest token account transactions are read too. Both are cached forever.
- 5Links
launch window + rulesEveryone who got the token in its first slots, then the rules below. Links land on the map live.
A fresh scan costs roughly 1,500 to 3,500 Helius credits. Funding and first buys are stored permanently, so a rescan only reads new holders.
Links
A line between two bubbles has one of these causes, and each carries the transaction signature that proves it. Linked wallets form a cluster; a cluster that contains the deployer, or a wallet it funded, is marked as the deployer's. One transaction draws one line: when it fits several rules, the strongest wins.
- Transfer
- Any transfer between two top holders, of any token or SOL, from each holder's last 60 transactions.
- Intermediary
- An unnamed outside wallet that sent SOL (0.05+) or this token to 2+ holders, or collected this token from them. Exchanges, named services and wallets touching 40%+ of holders are excluded.
- Funded
- A top holder, or the deployer, sent another top holder its first SOL.
- Same funder
- 2+ top holders got their first SOL from one wallet with no known name. Exchanges, bridges and protocols never count.
- Token transfer
- A holder's first tokens came straight out of another holder's wallet, not a pool, curve or program.
- Fee paid by
- Another top holder, the deployer, or one unnamed wallet paying for 2+ holders signed and paid a holder's first buy. Named relayers are excluded.
- Loaded before buying
- The last SOL a wallet received before its first buy, within 72h, came from another holder, the deployer, or one unnamed wallet shared by 2+ holders. From an exchange it counts only as a batch: 3+ withdrawals from one hot wallet, at most 10 minutes apart, amounts within 10%.
Bought together
Bundlers spread SOL through fresh wallets so no transfer ever joins them. What they cannot hide is timing. A group is 3+ wallets whose first buys land within 2 slots, or 2+ that bought in the creation block. Each group is rated by these signals:
- One fee payer
- One wallet paid the fee for 2+ of the buys. On its own this makes a group high confidence.
- Same size
- SOL spent spreads less than 12% of the median.
- Same Jito tip
- Half or more paid an identical tip to a Jito tip account.
- Fresh wallets
- Half or more were funded less than 6h before their first buy.
- Reloaded
- Half or more received SOL less than 6h before their first buy, however old the wallet.
- Launch block
- The buys landed within 2 slots of creation. Counts as two signals.
High: a shared fee payer, or two signals. Medium: one signal. Low: timing alone, listed but never drawn or scored.
Launch window
Every transaction of the token from its creation slot through the 2 slots after it is read, all pages. Each balance change is a take (from the curve, a pool or the mint), a pass (wallet to wallet) or a sell back, so nothing counts twice. The Launch tab shows supply taken per slot, SOL spent, Jito tips, buys paid by another wallet, and what the launch wallets and their receivers still hold.
A wallet is fresh when its first SOL arrived less than 6 hours before its first buy.
Score
The holder score starts at 100 and loses points per signal, each measured as a share of supply: penalty = min(max, max(0, share − free) × weight). The caps add up to 100.
| Input | Free | Weight | Max |
|---|---|---|---|
| Top 10 wallets | 20% | ×0.5 | 10 |
| Clustered wallets | 0% | ×1 | 30 |
| Bought together | 0% | ×1 | 25 |
| Still held by the launch bundle | 0% | ×1.5 | 15 |
| Deployer and its links | 0% | ×2 | 15 |
| Fresh wallets | 0% | ×0.25 | 5 |
The score describes a holder list. It does not say a token is good or bad, and it does not accuse anyone.
Labels
Known entities come from Helius identity data: exchanges, protocols, market makers. Exchange wallets never join a cluster. Rule labels (Deployer, Burned, Program) are derived from the chain. A label changes the name on a bubble, never the lines around it.
Limits
- Only the top 100 holders are drawn and scored.
- Funding is the first SOL a wallet received. A wallet funded through an exchange does not link by funding; it can still land in a group.
- Two-hop funding is not followed yet. A bundler who withdraws from an exchange at random times and amounts can still pass.
- A group is evidence of coordinated timing, not proof of one owner. Bots chasing the same launch can look alike.
- Finished maps are cached for 90s. Rescan reads everything again.
Bubble Trap runs on the MIT licensed scan engine from the open source Glass project. Rules live in src/lib/graph.ts, thresholds in src/config/site.ts.