Bingo Inu Honeypot
What happened
Bingo Inu (BINGO) is an Ethereum token at 0xb1fb7478…9a6e70, deployed on 2021-05-14. Every transfer and transferFrom passes through a burnTokenCheck modifier. With _sellAmount at its initial value of 0, an ordinary holder's transfer succeeds only when the recipient is the hard-coded _unirouter address 0x7a250d56…F2488D or the recipient is the owner; any other transfer reverts with "ERC20: transfer amount exceeds balance".
The owner can whitelist or blacklist addresses, change the privileged _safeOwner address and mint more tokens. De.Fi's REKT database lists the token as an Exit Scam/Honeypot dated 2021-05-14 and says the owner could disable the transfer function, which restricted users in selling their tokens.
How it happened
- The constructor sets
_owner = owner; _safeOwner = owner;and calls_mint30 times._mintcredits_balances[_owner] = _balances[_owner].add(amount);whateveraccountis, whileemit Transfer(address(0), account, amount);namesaccount, so the supply sits with the owner._mintispublicand gated only byrequire(msg.sender == _owner, ...), so the owner can mint again later. The contract has no function that changes_owner. - In
burnTokenCheck,if (_owner == _safeOwner && sender == _owner){_safeOwner = recipient;_;}makes the recipient of the owner's first outgoing transfer the new_safeOwner. The code does not show which address that was. - After that,
if (sender == _owner || sender == _safeOwner || recipient == _owner){...}lets the owner and_safeOwnersend anything and lets anyone send to the owner. A sender with_whiteAddress[sender] == truealso passes unchecked. - For every other sender, the initial
_sellAmountof 0 meansamount < _sellAmountis false, so execution reachesrequire((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance");. Only a transfer to_uniroutergets through. Blacklisted senders (_blackAddress) face the samerequireand nothing else. The revert happens before the sender's_balancesentry is debited. - The owner steers the check with
addApprove(blacklist),increaseAllowance(whitelist),decreaseAllowance(address safeOwner)(reassign_safeOwner) andmultiTransfer, which whitelists the firstapprovecountreceivers and approves_unirouterfor the maximum amount on their behalf. A self-transfer by the owner outside the first branch sets_sellAmount; transfers below it then pass, andif(recipient == _safeOwner){_blackAddress[sender] = true; _whiteAddress[sender] = false;}blacklists a sender who sends to_safeOwner. - What happened: De.Fi's REKT database lists Bingo Inu as an Exit Scam/Honeypot. No opened transaction in this review shows the owner calling any of these functions or removing liquidity.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.