Rug & Honeypot Detection: The 90-Second Safety Check
The fastest way to grow a wallet is to stop feeding rugs. A concrete on-chain checklist for Solana tokens — mint/freeze authority, liquidity status, holder concentration, sellability, and dev history.
Everyone chases the next 100×. The traders who actually keep their gains obsess over the opposite skill: never holding the rug. Here is a concrete, on-chain checklist you can run in about 90 seconds — or automate into a pre-buy gate that never lets you fat-finger a honeypot.
1. Authority checks (10 seconds, non-negotiable)
Read the SPL mint account. Two fields decide whether the rules can be changed on you:
- Mint authority must be
null— otherwise the team can print unlimited new supply and dilute you to zero. - Freeze authority must be
null— otherwise they can freeze your token account so you can never sell (a classic honeypot).
import { getMint } from "@solana/spl-token";
const m = await getMint(conn, new PublicKey(mint));
const safe = m.mintAuthority === null && m.freezeAuthority === null;2. Liquidity (post-migration)
- Is there real liquidity in the pool, and is the LP burned or locked? Unlocked LP the dev can pull is the textbook rug.
- Check pool reserves vs. market cap — thin liquidity under a big “market cap” means the cap is a curve artifact you can’t actually exit at.
3. Holder concentration
| Check | Red flag |
|---|---|
| Top-10 holders % | > 40–50% of non-pool supply concentrated |
| Dev wallet % | Dev still holds a large, unlocked slice |
| Bundle % | First-block cluster owns heavy supply (see forensics lesson) |
| Fresh-wallet ratio | Most holders funded minutes before launch by one source |
4. Sellability / honeypot simulation
The definitive test: can the token actually be sold? Simulate a sell (a quote + a simulateTransaction) and look for reverts, absurd transfer taxes, or hooks that block the transfer. If a buy succeeds but a simulated sell fails, it’s a honeypot — walk away regardless of how the chart looks.
5. Dev history (the tell most people skip)
Read the creator off the bonding curve (see the on-chain reading lesson), then look at that wallet’s past deployments. A wallet with ten prior tokens that all went to zero within hours is a serial rugger — the pattern is public and permanent.
The gate, in one place
| # | Check | Pass condition |
|---|---|---|
| 1 | Mint authority | null |
| 2 | Freeze authority | null |
| 3 | Token-2022 extensions | no transfer fee / hook / blacklist |
| 4 | LP | burned or time-locked |
| 5 | Top-10 concentration | reasonable, dev slice locked |
| 6 | Bundle % | below your threshold |
| 7 | Sell simulation | succeeds |
| 8 | Dev history | no serial-rug pattern |