The scan
Five reads, in this order. Each one streams to the page as it runs, so the map builds while you watch.
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
Each line between two bubbles has one of these causes, and each one carries the signature of the transaction that proves it. Linked wallets form a cluster; a cluster holding the deployer, or a wallet it funded, is marked as the deployer's. When one transaction fits several rules, it draws a single line and the strongest rule wins.
Bought together
Bundlers move SOL through fresh wallets so that no transfer ever connects them. Timing gives them away. 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:
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 for by another wallet, and what the launch wallets and the wallets they passed to 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 |
| Linked 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.
$CHECK itself is never graded: a score we give ourselves would be worth nothing either way. Its map still shows every holder, link, cluster and launch wallet with receipts, and every input above.
Labels
Known entities come from Helius identity data: exchanges, protocols, market makers. Exchange wallets never join a cluster. Rule labels (Deployer, Burned, Program) come from the chain itself. 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 Check 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.