Quick Answer
Honeypot detection · LP lock · Mint authority · Sell tax
| Signal | Risk | Description | Real Example |
|---|---|---|---|
| ERC-20 Honeypot | Critical | The token's _transfer() function includes conditional logic that allows buys but reverts or applies 100% tax on sells. Common pattern: require(from == owner || to == owner) in the sell path. | Squid Game Token (Nov 2021, $3.38M) — users could buy but contract reverted all sell transactions. Deployer drained the Uniswap pool when price peaked. |
| Uniswap LP Tokens Unlocked | Critical | LP tokens representing the Uniswap liquidity pool are held by the deployer address or project multisig, not locked in Unicrypt or Team Finance. The deployer can call removeLiquidity() at any time, crashing the price to near zero instantly. | AnubisDAO (Oct 2021, $60M) — deployer held all LP tokens from a $60M raise. Called removeLiquidity() 20 hours after launch, draining the entire pool. |
| Active Mint Authority | High | The token contract has a mint() function accessible to the contract owner. Post-deployment minting allows the team to create new tokens and dump them, diluting all holders. Check if owner is address(0) — if not, mint authority exists. | Deployer mints 10 billion tokens after launch, sells them through the Uniswap pool, crashes the price 99%. Existing holders' positions are worthless. |
| Hidden Fee Manipulation | High | The contract has setTax(), setFee(), or updateFees() functions accessible to the owner with no cap parameter. Initial fee is 3% (looks normal) but owner can raise it to 99% at any time, making the token unprofitable to sell. | A deployer sets a 5% launch tax, grows the community to $5M in TVL, then calls setFee(99) — all subsequent sells drain 99% to the dev wallet. Soft rug via fee escalation. |
| Blacklist / Freeze Functions | High | The contract has blacklist() or setBlacklist() functions that allow the owner to block specific addresses from transferring tokens. This enables a targeted rug: let buyers accumulate, blacklist them all, then drain liquidity. | Owner calls blacklist(address[]) on all non-dev wallet holders, then removes liquidity — only the dev wallet can sell, everyone else's tokens are frozen. |
| Ownership Not Renounced | Medium | The owner() address is still set to the deployer EOA or a team-controlled address. Ownership renounced means owner() returns address(0) or a burn address. Active ownership means all onlyOwner functions remain accessible indefinitely. | Legitimate projects renounce ownership after launch or transfer to a DAO/timelock. A non-renounced token with fee manipulation functions is one owner() call away from a rug. |