HAHAHA GO SAFE TOKENS Honeypot

Reported loss Not disclosed
BNB Chain
Honeypot

What happened

De.Fi's REKT database lists HAHAHA GO SAFE TOKENS (GST) 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 owner can flag any address with setPanCakeSwapReciever, and _transfer then calls calculateFeesBeforeSend, which reverts with "Error: Can not sell this token" for any transfer whose recipient is flagged. Because the revert undoes the whole transaction, a holder's balance is untouched, but the token cannot be sent to a flagged address, such as a liquidity pair.

The fee variable txFee is set by seTxFee yet never used in the fee math. The source shows what the owner can do; it does not show which address was flagged.

How it happened

  1. The constructor mints the whole supply to the deployer: _transferTO(msg.sender, 1000000000000e18);. The deployer is also the Ownable owner, and _transferTO calls setFeeDistributor(account), which is onlyOwner.
  2. The owner can call setPanCakeSwapReciever(address _recipient, bool _feeless), which has no cap and is not tied to canWhitelist, and writes PanCakeSwapReciever[_recipient] = _feeless;.
  3. Every transfer and transferFrom goes through _transfer, which requires amount > 1000, debits the sender (_balances[sender] = _balances[sender].sub(amount, ...)) and then calls calculateFeesBeforeSend(sender, recipient, amount).
  4. In calculateFeesBeforeSend, if(PanCakeSwapReciever[recipient]){ revert("Error: Can not sell this token"); } runs for a flagged recipient. The revert rolls back the debit, so the holder keeps the tokens, but the transfer fails.
  5. If the flagged address is the pair that receives tokens in a sale, every sale to it reverts while transfers to unflagged addresses and purchases from the pair are not affected by this check. The source does not show which address was flagged.
  6. Calling setPanCakeSwapReciever(addr, false) lifts the block for that address, and renounceOwnership() exists, so the owner can also give up these powers. calculateFeesBeforeSend returns (amount, 0) for unflagged recipients, so txFee and the 0% fee comment do not change the amount moved.

Protocol details

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

Build your security review skills

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