MickeyMars Honeypot
What happened
MickeyMars (MICKEYMARS, BNB Smart Chain contract 0x6493c1d6…047508) rewrites the internal _approve function so that only one hard-coded address, 0xAC079ADE…cd52Fc (the deployer, which an on-chain read in 2026 also shows as owner), can create an allowance. For every other holder _approve stores an allowance of zero, so transferFrom reverts and a router-based sell cannot pull the holder's tokens. Direct transfer calls are not restricted.
cryptot3ddybear describes the same _approve pattern, with a different hard-coded address, in other BSC tokens. De.Fi's REKT database lists MickeyMars as an Exit Scam/Honeypot and states that the contract owner could disable the transfer function, which restricted users in selling their tokens.
How it happened
- The constructor gives the whole supply to the deployer:
_totalSupply = 100000000000000000000;and_balances[msg.sender] = _totalSupply;(8 decimals, so 1,000,000,000,000 MICKEYMARS). _approveis modified:if (owner == address(0xAC079ADE911E02aa32cE8fdaB4EBa67867cd52Fc)) { _allowances[owner][spender] = amount;and otherwise_allowances[owner][spender] = 0;withemit Approval(owner, spender, 0);. The hard-coded address equals the deployer address in the contract's deploy record.- A holder who approves a router calls
approve, which runs_approve(_msgSender(), spender, amount). The event shows the approval, but the stored allowance is 0. - When the router then calls
transferFrom(holder, pair, amount),_transferfirst moves the balance, then_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"))subtractsamountfrom the stored 0 and reverts for any non-zero amount, undoing the whole call. The holder keeps the tokens and cannot sell through the router. - The hard-coded address passes the
if, so its own approvals are stored and it can sell through a router. The check names an address, not theowner()value, sorenounceOwnershiportransferOwnershipwould not change it. mint(uint256 amount)isonlyOwnerand credits the caller (_mint(_msgSender(), amount)), so the owner can also add supply to itself.- The code shows what is possible; no transaction was opened showing liquidity withdrawal or sales. cryptot3ddybear's write-up of this pattern (other tokens) describes the creator removing the liquidity pool afterwards; that is not shown here for MickeyMars.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- address BscScan verified source, MickeyMars 0x6493c1d628eabb35f45a7fd27b28f137e4047508 bscscan.com
- analysis Sourcify match, chain 56, MickeyMars repo.sourcify.dev
- analysis Scam explained: BSC NoApproval (cryptot3ddybear) cryptot3ddybear.gitlab.io
- analysis De.Fi REKT database listing for MickeyMars (text as supplied in record metadata) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.