KitKat Honeypot
What happened
KitKat (KitKat) is a BNB Chain token deployed on 4 April 2021 at 0x29e4c45a…2911ef by 0x4DFD3e93…197E81, which still owns it. Its owner can flag any address with setPanCakeSwapReciever, and every transfer to a flagged address reverts with "Error: Can not sell this token". Flagging the PancakeSwap pair would let holders buy but not sell.
The fee settings and the whitelist switch in the code are never used in transfers, and renounceWhitelist does not limit the sell block. De.Fi's REKT database lists KitKat as a honeypot, citing a Token Sniffer alert that is no longer available.
How it happened
- The
KitKatconstructor mints all 87,000 KitKat to the deployer, andOwnablemakes the deployer the owner. setPanCakeSwapReciever(address _recipient, bool _feeless)isonlyOwnerand setsPanCakeSwapReciever[_recipient]for any address. Unlike the feeless setters, it has nocanWhitelistcheck.- Every transfer calls
calculateFeesBeforeSend, which runsif(PanCakeSwapReciever[recipient]){ revert("Error: Can not sell this token"); }. The check is on the recipient, so once the pair is flagged, any transfer into it reverts, which blocks every sale; buys, where the pair is the sender, still go through. seTxFee,setFeeDistributorand the feeless whitelists look like tax controls, butcalculateFeesBeforeSendalways returns(amount, 0), so no fee is ever charged.renounceWhitelist()only setscanWhitelist = false, which the sell block never checks.renounceOwnership()exists, but the owner read on-chain is still the deployer, so the flag can still be set or cleared.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.