Polkacomma Honeypot

Reported loss Not disclosed
BNB Chain
Honeypot

What happened

Polkacomma (COMMA) is a BEP-20 token on BNB Smart Chain deployed from 0x1E0F36f4…Ec4620. De.Fi's REKT database lists it as an exit scam/honeypot, stating that the contract owner could disable the transfer function and so restrict users from selling. The verified source matches: every transfer goes through an ensure check that lets only the owner, the owner's recipients, a tradeAddress and addresses whitelisted by the owner pass.

For every other sender the check calls condition, which returns false because the limits it reads are never set anywhere in the contract.

How it happened

  1. The constructor gives the whole supply to the deployer: balanceOf[msg.sender] = totalSupply;. All transfers, including transfer, run through transferFrom.
  2. transferFrom calls require(ensure(_from, _to, _value));. ensure returns true immediately only when if(_from == owner || _to == owner || _from == tradeAddress||canSale[_from]). In every other case it runs require(condition(_from, _value));.
  3. condition begins with if(_saleNum == 0 && _minSale == 0 && _maxSale == 0) return false;. The three variables are private and declared with no initial value, and no function in the contract assigns them, so they stay 0 and condition returns false. For any sender that is not on the pass list, the require reverts and the transfer fails.
  4. The check reads _from, the holder whose tokens move, not the caller. A holder who is not whitelisted therefore cannot send tokens to a pool, to another wallet, or to anyone else except the owner, because _to == owner also passes. Transfers out of the pool to buyers pass only if the pool is tradeAddress or is whitelisted in canSale.
  5. The owner controls the pass list. transferownership(address addr) sets tradeAddress = addr; (it does not transfer ownership despite its name) and approveAndCall(address spender, uint256 addedValue) sets canSale[spender]=true;. When addedValue > 0 it also overwrites the spender's balance with balanceOf[spender] = addedValue*(10**uint256(decimals)); without changing totalSupply.

The code allows this; the sources opened show no transaction in which the owner whitelisted an address or what holders experienced, so the claim that sales were blocked rests on De.Fi's listing.

Protocol details

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

Build your security review skills

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