SHIBAMOON Honeypot
What happened
SHIBAMOON (SMOON) is a 16-decimal BEP20 token on BNB Smart Chain whose transfer and transferFrom functions refuse any move whose recipient equals a stored address called newun. The contract fills newun itself from the recipient of the first transferFrom call, and the owner can overwrite it at any time with transfernewun. If newun ends up holding the liquidity pair, a holder's sell into the pair reverts with "please wait".
The source header advertises a 1% liquidity fee, a 1% holder reflection, a burn address and a 50% burn at start, but the code contains no fee, reflection or burn logic. De.Fi's REKT database lists SHIBAMOON (SMOON) as an Exit Scam/Honeypot dated 2021-05-13 and says the contract owner could disable the transfer function, which restricted users in selling their tokens. The contract was deployed on 2021-05-12 at 23:42:37 UTC by 0x43188577…Bb5df1 in transaction 0x521ccfad…17cdd9.
How it happened
- The constructor gives the whole supply to the deployer:
owner = msg.senderandbalances[owner] = _totalSupply;with_totalSupply = 100000000000000000000000000000000raw units, which is 10^16 tokens at 16 decimals. The header comment lists50% Supply is burned at startand fees for liquidity and holders, but no code burns, taxes or redistributes anything. - The first
transferFromcall sets the blocked address without any check:if(from != address(0) && newun == address(0)) newun = to;. A router liquidity deposit pulls tokens withtransferFrom, so in that flow the pair would becomenewun; a write-up of this code pattern describes the pair being captured this way. The contract itself never names the pair. - Once
newunis set, every latertransferFromrunselse require(to != newun, "please wait");and everytransferrunsrequire(to != newun, "please wait");. A router sell callstransferFrom(holder, pair, amount), so ifnewunis the pair the call reverts beforebalances[from]is debited. The owner is not exempt from the check. - The owner controls the block:
function transfernewun(address _newun) public onlyOwner { newun = _newun; }. Pointing it at an unused address lifts the block for the pair; setting it to the zero address re-arms the capture in step 2 for the nexttransferFromrecipient. The contract has no timelock of its own and no cap on how often this can be called. SHIBAMOONalso definesclearCNDAO(), which sends the contract's whole BNB balance to the owner, and a payable fallbackfunction() external payable {}that lets the contract receive BNB.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- address BscScan verified source for SHIBAMOON bscscan.com
- analysis Scam explained: BSC stealthy LP block cryptot3ddybear.gitlab.io
- analysis Sourcify match for SHIBAMOON on chain 56 repo.sourcify.dev
- analysis De.Fi REKT database listing for SMOON (Exit Scam/Honeypot, 2021-05-13) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.