bubblecheck

method 1.6, generated from the scanner's own constants

How Bubble Check draws a map.

Every rule, and the exact number behind it. When a number on this page changes, the method version changes too, and maps made under different versions are never mixed.

The scan

Five reads, in this order. Each one streams to the page as it runs, so the map builds while you watch.

1
Token
getAsset
Name, symbol, decimals, supply.
2
Holders
getTokenAccounts
Every token account, summed per owner, up to 12,000 accounts. The top 100 are mapped, and the bubbles are on screen from here.
3
Wallet history
getTransactionsForAddress
The last 60 transactions of each holder, biggest first. For a young wallet that covers its whole life: first SOL, first buy, the reload and every transfer.
4
Older wallets
first SOL + token account
When a history runs longer, its first SOL and the oldest transactions of its token account are read as well. Both are cached for good, since they never change.
5
Links
launch window + rules
Everyone who got the token in its first slots, then the rules below. Links appear on the map while they are read.

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.

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.

Transfer
Any transfer between two top holders, of any token or SOL, found in either 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 that touch 40%+ of holders are skipped, because they serve everyone.
Funded
A top holder, or the deployer, sent another top holder its very first SOL.
Same funder
2+ top holders got their first SOL from one wallet that has no known name. Exchanges, bridges and protocols never count.
Token transfer
A holder's first tokens came straight from another holder's wallet, not from a pool, curve or program.
Fee paid by
Another top holder, the deployer, or one unnamed wallet paying for 2+ holders signed and paid for a holder's first buy. Named relayers are skipped.
Loaded before buying
The last SOL a wallet got before its first buy, within 72h, came from another holder, the deployer, or one unnamed wallet shared by 2+ holders. From an exchange it only counts as a batch: 3+ withdrawals from one hot wallet, at most 10 minutes apart, amounts within 10%.

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:

One fee payer
One wallet paid the fee for 2+ of the buys. That alone makes a group high confidence.
Same size
The SOL spent varies by less than 12% around the median.
Same Jito tip
Half or more paid the exact same tip to a Jito tip account.
Fresh wallets
Half or more were funded less than 6h before their first buy.
Reloaded
Half or more got SOL less than 6h before their first buy, however old the wallet is.
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 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.

InputFreeWeightMax
Top 10 wallets20%×0.510
Linked wallets0%×130
Bought together0%×125
Still held by the launch bundle0%×1.515
Deployer and its links0%×215
Fresh wallets0%×0.255
Clean80+Watch60+Concentrated40+Heavy0+

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.