MOONSEASON Honeypot
What happened
MOONSEASON is a BNB Smart Chain token whose transfer functions refuse to send tokens to one stored address, newun. The first transferFrom call made while newun is unset saves its recipient there, and after that any transfer or transferFrom to that address reverts with "please wait". If that recipient is the liquidity pair, sells fail while buys do not.
De.Fi's REKT database lists the token as an exit scam/honeypot dated 2021-04-11 and says the contract owner could disable the transfer function, which restricted users in selling their tokens. The code has no on/off switch for transfers; the restriction is the newun check and the owner's transfernewun setter.
How it happened
- The source header advertises a 1% liquidity fee, a 1% holder reflection and a burn. The contract contains no fee, reflection or burn logic. The constructor mints the whole supply to the deployer,
balances[owner] = _totalSupply;, andnewunstarts as the zero address. transfercontainsrequire(to != newun, "please wait");, so no caller, the owner included, can send tokens to the storednewunaddress.transferFromstarts withif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The first call with a non-zerofromwhilenewunis unset skips the require, completes, and saves itstoasnewun. Every latertransferFromto that address reverts.- A router-based sell moves tokens with
transferFrom(holder, pair, amount). Ifnewunis the pair, that call reverts, while a pair-to-buyertransfergoes to the buyer and passes. The code alone does not show which address becamenewunfor this token. The seed blog describes the pattern asnewunbecoming the PancakeSwap pair during the first liquidity add, in other tokens. - The owner can call
transfernewun(address _newun) public onlyOwner, which assignsnewundirectly. Setting it to the zero address lets the nexttransferFromwith a non-zerofromcapture a new recipient, and pointing it at an address no one uses lifts the block. Ownership moves only bytransferOwnershipandacceptOwnership; there is no renounce function.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.