The method
This page is generated from the same constants the scanner runs on. If a number here changes, the method version changes with it, and old maps are not mixed with new ones.
What we read
For any Solana token, from the chain, through Helius:
- Every token account of the mint (
getTokenAccounts), summed per owner. Up to 12,000 accounts per scan; beyond that the holder count is marked as a lower bound. The top 100 owners are mapped. - Owners that are program-derived addresses (no private key, off the ed25519 curve) are bonding curves, pool vaults or lockers. They are drawn as dashed rings and never linked or scored.
- For each wallet: the first SOL it ever received (
/v1/wallet/:address/funded-by) and the first transaction in which it received this token (getTransactionsForAddress, oldest first, filtered to this mint). - The deployer: the fee payer of the mint's first transaction.
Links
A line between two bubbles has exactly one of three causes. Each carries the transaction signature that proves it.
| Link | Rule |
|---|---|
| Funded | A top holder (or the deployer) sent another top holder its first SOL. |
| Same funder | 2+ top holders share the wallet that sent their first SOL, and that wallet has no known name or type. Exchanges, bridges and protocols are excluded because 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. |
Linked wallets form a cluster. A cluster that contains the deployer, or a wallet the deployer funded, is marked as the deployer's.
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. It is then rated by what else they share:
| Signal | Threshold |
|---|---|
| One fee payer | One wallet paid the fee for 2+ of the buys. Alone 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. |
Confidence is high with a shared fee payer or two signals, medium with one, low with timing alone. Low cohorts are shown but never scored.
Labels
- Known entity: names from Helius' identity database (exchanges, protocols, market makers). Exchange wallets never join a cluster.
- Labeled by the project: only on $GLASS itself, where we label our own team, marketing and fee wallets. Shown with who set it.
- Rule: Deployer, Burned, Program account. Derived, never typed by hand.
Score
Starts at 100 and loses points for each signal below. Each signal is a share of total supply. The caps add up to 100.
| Signal | Free | Weight | Max |
|---|---|---|---|
| Top 10 wallets | 20% | ×0.5 | 15 |
| Linked by funding or transfers | 0% | ×1 | 35 |
| Bought together | 0% | ×1 | 30 |
| Deployer and its links | 0% | ×2 | 15 |
| Fresh wallets | 0% | ×0.25 | 5 |
| Band | From |
|---|---|
| Clear | 80 |
| Watch | 60 |
| Concentrated | 40 |
| Heavy | 0 |
The score describes the holder list. It does not say a token is good or bad, and it does not accuse anyone.
Limits
- Only the top 100 holders are drawn and scored.
- Funding is the first SOL a wallet received. A wallet funded through an exchange, 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.
- 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, and every chain read in src/lib/helius.ts. The tests that pin each rule are in test/graph.test.ts.