ThenaMoon Honeypot
What happened
ThenaMoon is a BNB Smart Chain token whose transfer and transferFrom revert when the recipient equals a stored address called newun. newun is empty at deployment, and the first transferFrom call stores its recipient there without any check; the owner can later overwrite it with transfernewun. A Gitlab write-up describes this pattern in other tokens: if the first transferFrom is the one that pays tokens into the liquidity pool, the pool becomes the blocked recipient, so purchases work and sales fail with "please wait".
De.Fi's REKT database lists ThenaMoon as an Exit Scam/Honeypot, stating that the owner could disable the transfer function and restrict users from selling.
How it happened
- The constructor assigns the entire supply to the deployer:
balances[owner] = _totalSupply;. The state variablenewunstarts as the zero address. - The first call to
transferFromtakes the capture branch:if(from != address(0) && newun == address(0)) newun = to;. The recipient of that call is stored innewunand the transfer then proceeds with no check. In a liquidity-adding call made by a router, that recipient would be the pool, which is how the Gitlab write-up describes the same code in other tokens; this contract's own transactions were not opened. - From then on both transfer paths refuse that recipient:
require(to != newun, "please wait");intransfer, andelse require(to != newun, "please wait");intransferFrom. Nothing restricts transfers out ofnewun, so tokens leaving it, as in a purchase, are not blocked by these lines. - If
newunis the pool, a holder's sale reachestransferFrom(holder, pool, amount), reverts at therequire, and the holder's balance is not debited because the whole call is undone. - The owner can change the block at any time:
function transfernewun(address _newun) public onlyOwner { newun = _newun; }. Pointing it at an unused address lifts the block for everyone. Setting it to the zero address lets the nexttransferFromcapture a new recipient. - The
ThenaMooncontract also has an owner-onlyclearCNDAOthat sends the contract's own BNB balance to the owner (_owner.transfer(address(this).balance);) and an empty payable fallback that lets the contract receive BNB. This is separate from the token balances held by holders. - The code shows what the owner can do; De.Fi's REKT database lists the token as an Exit Scam/Honeypot, and no transaction showing a sale failing, a
transfernewuncall or liquidity removal was opened here.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- report De.Fi REKT database listing for ThenaMoon, proof link Token Sniffer X post 1381346761566916614 (404 when fetched) twitter.com
- address ThenaMoon verified source on BscScan bscscan.com
- analysis Sourcify match for 0xc253fb899138930e499fd7fca2f2a576c9328010 (chain 56) repo.sourcify.dev
- analysis Scam explained: BSC stealthy LP block cryptot3ddybear.gitlab.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.