MoonSafebank Honeypot
What happened
De.Fi's REKT database lists MoonSafebank, a BNB Smart Chain token at 0x6a61aba0…3bf752, as an Exit Scam/Honeypot dated 2021-04-22 and says the contract owner could disable the transfer function, which restricted users in selling their tokens. The verified source shows a single destination address, newun, that transfer and transferFrom refuse to send tokens to, with the revert message please wait. The first transferFrom call made while newun is empty sets newun to its recipient, and the owner can change it with transfernewun.
A sale that sends tokens to the address held in newun therefore reverts, and the holder's balance is not debited. The source alone does not show which address newun holds on-chain or what any holder lost, and De.Fi gives no loss figure.
How it happened
- The owner address receives the whole supply in the constructor, and the contract defines
address public newun;with no initial value. transferbegins withrequire(to != newun, "please wait");, so no holder can send tokens to the address stored innewun.transferFrombegins withif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. Whilenewunis the zero address, the firsttransferFromcall is allowed and stores its recipient asnewun, with no other check on who made the call. Every latertransferFromto that recipient reverts. The cryptot3ddybear article on this pattern describes that first call as the liquidity add, which stores the pool address; the article does not cover MoonSafebank and this record does not show whatnewunholds on-chain.- If
newunis the pool, a sell moves tokens to it and the call reverts, and because the revert undoes the balance change the holder keeps their tokens. Transfers between ordinary wallets still pass. - The owner can call
transfernewun(address _newun)(onlyOwner). Setting it back to the zero address lets the nexttransferFromcapture a new recipient, and pointing it at an address that is never used lifts the block. The code allows this; the source alone does not show that either call was made. clearCNDAO()lets the owner send the contract's own BNB balance to itself. This does not touch holders' token balances.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- report Sourcify copy of the MoonSafebank source repo.sourcify.dev
- report De.Fi REKT database listing for MoonSafebank (proof: Token Sniffer post, not retrievable) twitter.com
- address MoonSafebank verified source code on BscScan bscscan.com
- analysis Scam explained: BSC stealthy LP block (cryptot3ddybear) cryptot3ddybear.gitlab.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.