SPEEDDAO Honeypot
What happened
De.Fi's REKT database lists SPEEDDAO (SPDAO) on BNB Smart Chain as an Exit Scam/Honeypot and says the contract owner could disable the transfer function, which restricted users in selling their tokens. In the verified source the restriction is a newun address: transfer and transferFrom both revert with "please wait" when the recipient equals newun, so no holder can send tokens to that address. newun is set by the first transferFrom call, to that call's recipient, and the owner can change it at any time with transfernewun.
The code does not name which address ends up in newun; if it is the liquidity pair, sales to it revert. The source shows what the owner can do; it does not show which values were set.
How it happened
TokenBEP20keeps a publicnewunaddress that starts asaddress(0). The owner can overwrite it withtransfernewun(address _newun), which isonlyOwner.transferbegins withrequire(to != newun, "please wait");, so a direct transfer tonewunalways reverts, and whilenewunis stilladdress(0)a transfer to the zero address reverts too.transferFromrunsif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The firsttransferFromwith a non-zerofromtherefore succeeds and records its recipient innewun, with no check on who the caller is. From then on everytransferFromwhose recipient is that address reverts.- The balance update happens after this check (
balances[from] = balances[from].sub(tokens);), so a blocked call changes no balances. A holder's tokens stay in their wallet; only transfers whose recipient isnewunfail, and the owner is not exempt from the check. - If
newunholds a liquidity pair address, a swap that sells the token ends in atransferFromto the pair and reverts with the message "please wait", while transfers from the pair to buyers are not covered by the check. The source does not show whethernewunwas ever the pair. - The owner can set
newunto an address nobody uses, which lifts the block, or toaddress(0), which makes the next non-zero-fromtransferFromstore its recipient innewunagain.clearCNDAO()also lets the owner send the contract's own BNB balance to the owner.
Protocol details
Evidence
- report De.Fi REKT database listing for SPDAO (as recorded in the campaign meta file) twitter.com
- address BscScan verified source for 0x3ce156d78a6e863ec1d2a8522f6cb2613d93de9e bscscan.com
- analysis Scam explained: BSC stealthy LP block cryptot3ddybear.gitlab.io
- analysis Sourcify repository copy of the SPEEDDAO contract repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.