Bingo Inu Honeypot

Reported loss Not disclosed
Ethereum
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

  1. The constructor sets _owner = owner; _safeOwner = owner; and calls _mint 30 times. _mint credits _balances[_owner] = _balances[_owner].add(amount); whatever account is, while emit Transfer(address(0), account, amount); names account, so the supply sits with the owner. _mint is public and gated only by require(msg.sender == _owner, ...), so the owner can mint again later. The contract has no function that changes _owner.
  2. 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.
  3. After that, if (sender == _owner || sender == _safeOwner || recipient == _owner){...} lets the owner and _safeOwner send anything and lets anyone send to the owner. A sender with _whiteAddress[sender] == true also passes unchecked.
  4. For every other sender, the initial _sellAmount of 0 means amount < _sellAmount is false, so execution reaches require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance");. Only a transfer to _unirouter gets through. Blacklisted senders (_blackAddress) face the same require and nothing else. The revert happens before the sender's _balances entry is debited.
  5. The owner steers the check with addApprove (blacklist), increaseAllowance (whitelist), decreaseAllowance(address safeOwner) (reassign _safeOwner) and multiTransfer, which whitelists the first approvecount receivers and approves _unirouter for the maximum amount on their behalf. A self-transfer by the owner outside the first branch sets _sellAmount; transfers below it then pass, and if(recipient == _safeOwner){_blackAddress[sender] = true; _whiteAddress[sender] = false;} blacklists a sender who sends to _safeOwner.
  6. 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

Classification Token
Protocol Type Exit Scam/Honeypot
Affected asset / contract BINGO

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.