SafeHubble Honeypot

Reported loss Not disclosed
BNB Chain
Honeypot

What happened

SafeHubble (SAFEHUBBLE) is a BNB Smart Chain token whose transfer and transferFrom both run through a burnTokenCheck modifier that lets only the owner, a stored _safeOwner, and whitelisted addresses move tokens freely. For every other holder, a transfer succeeds only if the recipient is a hard-coded _unirouter address or the owner, so a sale to a liquidity pair reverts with a misleading "transfer amount exceeds balance" message. The owner can also whitelist or blacklist addresses and change _safeOwner.

De.Fi's REKT database lists the token as an exit scam/honeypot, stating that the contract 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 mints the whole supply to the owner.
  2. Every transfer and transferFrom goes through _approveCheck(...), which carries the burnTokenCheck(sender,recipient,amount) modifier.
  3. If the sender is _owner while _owner == _safeOwner, the transfer passes and _safeOwner = recipient is set. Afterwards, transfers pass when the sender is _owner or _safeOwner, or when the recipient is _owner.
  4. Senders in _whiteAddress pass. For any other sender, the code only lets the transfer through if amount < _sellAmount (initially 0, so never) or require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance") holds. The revert text mentions balance although the balance is not what is checked.
  5. A sale moves tokens to the pair, so it succeeds only if that recipient is the hard-coded _unirouter (0x05fF2B0D…608C7F) or _owner; otherwise it reverts for a non-whitelisted holder.
  6. The owner can change who is exempt: increaseAllowance whitelists and un-blacklists addresses, addApprove blacklists them, decreaseAllowance replaces _safeOwner, and multiTransfer whitelists the first approvecount recipients. A self-transfer by the owner sets _sellAmount, after which a non-listed sender may move amounts below that value to any recipient, and one whose recipient is _safeOwner is blacklisted.
  7. No function in the file changes _owner, and _mint is callable by _owner at any time (it adds to _balances[_owner], whatever account is passed).

Protocol details

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

Build your security review skills

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