The scan
Five reads, in order. Each step streams to the page while it runs, so you watch the map being built instead of waiting on a spinner.
- 01Token
getAssetName, symbol, decimals, supply.
- 02Holders
getTokenAccountsEvery token account, summed per owner. Up to 12,000 accounts; the top 100 are mapped.
- 03Funding
funded-byThe first SOL each wallet ever received. Cached forever: it cannot change.
- 04First buy
token account historyThe oldest transactions of each holder's own token account: slot, payer, tip, size, source. Then the SOL that paid for it.
- 05Transfers
wallet transfers + mint historyEvery holder's last 100 transfers, and everyone who got the token in its first slots. Then the rules in src/lib/graph.ts.
- Funding sources100 × funded-by at 100 credits10,000
- First buys100 token accounts × getTransactionsForAddress at 101,000
- Reloads100 × the last SOL in before the buy at 101,000
- Transfers100 × last 100 transfers at 10010,000
- Names1 × batch-identity per 100 wallets100
- Token and holdersgetAsset, deployer and up to 12 holder pages at 10140
A rescan of a known token costs a fraction of this: funding and first buys are stored permanently, only new holders are read.
Links
A line between two bubbles has one of eight causes, and each carries the transaction signature that proves it. Linked wallets form a cluster. A cluster that contains the deployer, or a wallet the deployer funded, is marked as the deployer's.
Moved between holders
Any transfer between two top holders, of any token or SOL, at any time, from each holder's last 100 transfers. This is the link every bubble map is built on.
Middleman
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: those serve everyone.
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 or type. Exchanges, bridges and protocols are excluded: they fund unrelated people all day.
Token transfer
A holder's first tokens came out of another holder's wallet, not a pool, curve or other program, in the same transaction.
Fee paid by
Another top holder, the deployer, or one unnamed wallet paying for 2+ holders signed and paid the fee of a holder's first buy. Named relayers are excluded.
Loaded before buying
The last SOL a wallet received before its first buy, within 72h: from another holder, the deployer, or one unnamed wallet shared by 2+ holders. From an exchange it links only as a batch: 3+ withdrawals from the same hot wallet, at most 10 minutes apart, amounts within 10%. This is how aged wallets with clean histories get caught.
Cohorts
Bundlers spread SOL through fresh wallets so no transfer ever joins them. What they cannot hide is timing and habit. A cohort is 3 or more wallets whose first buys land within 2 slots of each other, or 2 or more that bought in the block the token was created in: those buys were placed together with the launch.
- 7 first buysin slots 312,004,117 and 118
- One fee payer9Wzk…k3Lq paid for 6 of the 7
- Same size1.98 to 2.04 SOL, a 3% spread
- Same Jito tip0.001 SOL on every buy
- Cohort, high confidenceno transfer joins them, the timing does
| Signal | Counts when |
|---|---|
| One fee payer | One wallet paid the fee for 2+ of the buys. On its own this makes a cohort 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 the token's creation. Counts as two signals. |
A shared fee payer, or two signals.
One signal.
Timing alone. Shown on the map, never scored.
Launch bundle
Separately, the token's own history is read from its creation slot: every wallet that received it in that block or the 2 after it, except the deployer. Those buys were placed with the launch. The panel shows how much of the supply they got and how much they still hold, and what they still hold is scored. A bundle that sold or moved its tokens still shows as bought.
Fresh wallets
A wallet is fresh when its first SOL arrived less than 6 hours before its first buy of the token. Real traders have history; a bundle's wallets are usually made for the launch.
Score
The score starts at 100 and loses points for each signal, measured as a share of total supply. The caps add up to 100. Move the inputs to see the exact arithmetic the scanner runs.
penalty = min(max, max(0, share − free) × weight). Free share: top 10 wallets 20%. Everything else counts from the first wallet.
| 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.
Labels
Names from Helius' identity data: exchanges, protocols, market makers. Exchange wallets never join a cluster.
Deployer, Burned, Program account. Derived from the chain, never typed by hand.
Shown with who set it. A label changes the name on a bubble, never the lines around it.
Limits
What Glass does not see yet, stated plainly so nobody reads more into a map than it holds.
- Only the top 100 holders are drawn and scored.
- Funding is the first SOL a wallet received. A wallet funded through an exchange and then used by a bundler does not link by funding; it can still land in a cohort.
- Two-hop funding (A funds B, B funds C) is not followed yet. Reloads through an exchange link only as a batch, so a bundler who withdraws at random times and amounts can still pass.
- A cohort 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.
Source
Glass is open source under the MIT license. The rules on this page live in src/lib/graph.ts, the thresholds in src/config/site.ts, every chain read in src/lib/helius.ts, and the tests that pin each rule in test/graph.test.ts.