Bongo Cat Honeypot
What happened
Bongo Cat (BONGO) is a BNB Smart Chain token whose transferFrom requires allow[_from] == true, a per-address flag that only the deployer receives at construction and that only a hard-coded address can grant to others. Holders can still call approve, but a router cannot pull their tokens, which is what a DEX sell needs. De.Fi's REKT database lists the token as an exit scam/honeypot dated 2021-04-11 and says the contract owner could disable the transfer function, which restricted users in selling their tokens.
The code's restriction is the allow-list on transferFrom, not a transfer switch.
How it happened
- The constructor gives the deployer the whole supply and the only initial allow-list entry:
balances[msg.sender] = totalSupply;andallow[msg.sender] = true;. approveis unrestricted, so a holder can approve a router.transferFromadds an extra gate:require(allow[_from] == true);alongside the usual balance and allowance checks. For a holder whose flag is false, a router'stransferFrom(holder, pair, amount)reverts, so a sell through a router fails.transferhas no allow-list check (require(balances[msg.sender] >= _value);only), so direct transfers, including a pool sending tokens to a buyer, are not blocked by the code.- The flag can be changed only through
addAllow(address holder, bool allowApprove) external onlyOwner. The modifier ismodifier onlyOwner() {require(msg.sender == address(1080614020421183795110940285280029773222128095634));_;}, a literal address that equals 0xbd486897…439192. Theownerstorage variable is set to the deployer in the constructor but no access check reads it, and the deployment record shows a different deployer (0xAe7DF797…7C935B). - The same hard-coded address can also call
mint(address miner, uint256 _value), which executesbalances[miner] = _value;. That overwrites a balance without changingtotalSupply, so it can set any holder's balance, including to zero. The code allows this; no transaction was opened showing it being used. - The source header says "ownership renounced" and "LP locked forever". The contract has no renounce function and no liquidity-lock code, so those lines are comments, not enforced behavior.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.