EverTiki Honeypot
What happened
De.Fi's REKT database lists EverTiki (EVERTIKI, BNB Chain, contract 0x99718428…319046) as an exit scam/honeypot dated 2021-06-24, stating that the contract owner could disable the transfer function and so restrict users from selling. In the verified source the restriction sits in the internal _approve function: it stores a real allowance only when the token owner is one hard-coded address, and for every other address it stores 0 while emitting an Approval event with the value 4. A DEX sell needs the router to pull tokens with transferFrom, which subtracts from that allowance, so it reverts for any holder other than the hard-coded address.
Plain transfer calls are unaffected, so tokens can still move out of a pool to buyers. The contract was deployed on 2021-06-19; no loss figure is listed.
How it happened
- The constructor mints the full supply to the deployer:
_balances[msg.sender] = _totalSupply;. The deployer, 0xB35e064b…567F50, is also the address hard-coded inside_approve, and the current on-chain owner reads as the same address. approve,increaseAllowanceandtransferFromall end in the internal_approve, which is rewritten:if (owner == address(0xB35e064b12E3B301bF57f5675335d66B62567F50)) { _allowances[owner][spender] = amount; ... } else { _allowances[owner][spender] = 0; emit Approval(owner, spender, 4); }.- A holder who approves a DEX router therefore ends up with an allowance of 0 while the logged
Approvalevent shows 4, so wallets and explorers that read events do not show the real allowance. - To sell, the router calls
transferFrom(holder, pool, amount). That function runs_allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"), and subtracting a positive amount from an allowance of 0 reverts the whole call, including the balance change made by_transfer. transfer(recipient, amount)calls_transferdirectly with no allowance, so a pool can still send tokens to a buyer. The code lets buys work while sells through an approval-based router fail for everyone except the hard-coded address.- The hard-coded exception is separate from ownership, so
renounceOwnership()would not remove it. The owner can also create supply withmint(uint256 amount) public onlyOwner; the source does not show whether it was used. - What happened, per the listing: De.Fi's REKT database lists the token as an exit scam/honeypot where the owner could disable transfers so users could not sell. No transaction was opened, so the number of affected holders and any amount lost are not established.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- address BscScan verified source, EverTiki (EVERTIKI) bscscan.com
- analysis PancakeSwap NoApproval scam, explained (CryptoT3ddyBear blog, 2021-04-08) cryptot3ddybear.gitlab.io
- analysis Sourcify match copy of 0x99718428360cbe4ba8a930847603569613319046 repo.sourcify.dev
- analysis De.Fi REKT database listing for EVERTIKI (Exit Scam/Honeypot, 2021-06-24, Binance) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.