MoonDegenerates Honeypot
What happened
MoonDegenerates (MDegen) is a BNB Smart Chain token whose _transfer reverts for most senders while an owner-controlled flag, TIME, is true. The flag starts as true, and only the owner can switch it with setTIME. The revert text talks about one sale per 30 minutes, but the time comparison is commented out in the source, so no timer exists.
A holder who is not the owner and not the address stored in pancake is refused when sending to any recipient other than the owner, including a liquidity pair; sends to the owner are not blocked. De.Fi's REKT database lists the token as an exit scam/honeypot and says the owner could disable the transfer function.
How it happened
- The constructor mints the whole supply of 100,000,000,000 tokens (
_mint(msg.sender, 100000000000e18)) to the deployer, who is also theOwnableowner, andTIMEis declared asbool private TIME = true;. - Whenever the owner is the sender,
_transferstores the recipient inpancake(if(sender == owner()){ pancake = recipient; }). If the owner sends tokens into a liquidity pair, that pair becomes the one address allowed to send. The owner can also set it directly withaddPancake. - Other transfers hit
if(sender != owner() && recipient != owner() && sender != pancake && TIME == true){ revert("FOR VALUE PROTECTION, YOU CAN ONLY SELL 1 Sale PER 30 MIN"); }. A holder selling through a router sends from their own address to the pair, so the call reverts. Wallet-to-wallet transfers revert the same way. Transfers sent by the owner or by thepancakeaddress, which covers buys from a pair stored there, and transfers whose recipient is the owner are not caught by this check. - The message mentions a 30-minute limit, but the only time-based variable is a commented-out
uint256 timeNow = block.timestamp;. The revert fires onTIME == truealone. - The owner can switch the block with
setTIME(bool). Four more owner-only controls can also stop sells:firesets the capMAX,POOLmarks recipients that are checked againstMAX,GTYAflags a sender as a bot sorequire(amount <=0, "bots......")always reverts, andsetFeecan charge up to 10% (_newTxFee <= 100over a 1000 divisor). - What the code shows about ownership:
renounceOwnershipexists, and a read ofowner()on 2026-09-30 returned the zero address, sosetTIMEcan no longer be called. That read is the current state only. The supplied files do not show when ownership was renounced or whatTIMEheld at that moment, and no transaction was opened that shows sells failing.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.