SAFEMYANMAR Honeypot
What happened
De.Fi's REKT database lists SAFEMYANMAR (BNB Chain contract 0x77c94558…becedc) as an exit scam/honeypot dated 2021-03-28, saying the owner could disable the transfer function and so stop users selling. The verified source does not switch transfers off; it stores one address in newun that cannot receive tokens, and the first transferFrom fills that slot with whatever recipient it names. A blog post linked by the listing describes this same code pattern as a stealthy liquidity-pool block, where the stored address is the pool and sells therefore revert.
The owner can also overwrite newun through transfernewun. These are what the code allows; no transaction for this token was opened.
How it happened
- The constructor mints the full supply, 1,050,000,000,000 tokens with 18 decimals (
_totalSupply = 1050000000000000000000000000000), to the owner.newunstarts as the zero address. transferFromrunsif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The first call with a non-zerofromstores its recipient innewunand proceeds, with no check on who calls or who the recipient is.- After that,
transferFromtakes theelsebranch andtransferrunsrequire(to != newun, "please wait"), so any transfer whose recipient equalsnewunreverts. The holder's balance is not debited, because the subtractionbalances[from] = balances[from].sub(tokens)comes after the check. - If
newunis a trading pool, which is the case the linked blog post describes for this pattern, buyers can still receive tokens from the pool throughtransfer, but a sale sends tokens to the pool and reverts withplease wait. The code does not show which addressnewunholds for this token. - The check has no owner exemption, but the owner controls the slot:
transfernewun(address _newun)isonlyOwnerand writesnewun = _newun. Setting it to the zero address lets the nexttransferFromcapture a new recipient; setting it to an unused address lifts the block. - There is no
renounceOwnership; ownership moves only throughtransferOwnershipandacceptOwnership.clearCNDAOis alsoonlyOwnerand sends the token contract's own BNB balance to the owner.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- address BscScan verified source, SAFEMYANMAR 0x77c9455885437769a23f3c859fb743f1a9becedc bscscan.com
- analysis Scam explained: BSC stealthy LP block cryptot3ddybear.gitlab.io
- analysis Sourcify match for 0x77c9455885437769a23f3c859fb743f1a9becedc repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.