Kimchi Inu Honeypot
What happened
Kimchi Inu (KIMU) is an ERC-20 token deployed on Ethereum on 21 May 2021 at 0xf1ff017f…94119a. Its transfer logic runs through a modifier named burnTokenCheck that, by default, reverts any transfer by an ordinary holder unless it goes to the Uniswap router address or comes from the owner's chosen _safeOwner address, and the revert reuses the standard message "ERC20: transfer amount exceeds balance" so a blocked sale looks like a balance error. The owner can whitelist chosen wallets, blacklist others, set a small amount below which a first sale is allowed (after which the seller is blacklisted), and mint new tokens, all through functions with misleading ERC-20 names such as increaseAllowance, decreaseAllowance and addApprove.
De.Fi's REKT database lists KIMU as an exit scam/honeypot on 22 May 2021, saying the owner could disable transfers so holders could not sell.
How it happened
- The constructor sets
_ownerand_safeOwnerto theownerargument and calls the public_mintfive times, 25,000,000,000,000 KIMU in total._mintcredits_balances[_owner]but emitsTransferevents naming other addresses as recipients, so explorers show tokens going to wallets that never received a balance. - The first outgoing transfer from
_ownersets_safeOwner = recipient. If that transfer seeds the Uniswap pool, the pool becomes_safeOwner, and transfers out of it (buys) pass thesender == _safeOwnercheck. The owner can also point_safeOwnerat any address withdecreaseAllowance. - For any other sender,
burnTokenCheckallows the transfer only if the sender is on_whiteAddress. Otherwise it requiressender == _safeOwnerorrecipient == _unirouter. A sale sends tokens to the pool, not to the router, so it reverts with a fake "transfer amount exceeds balance" error. - The owner can open a narrow exit with a self-transfer, which sets
_sellAmount. A non-listed holder may then move less than_sellAmountonce; if that transfer goes to_safeOwner, the holder is added to_blackAddressand every later sale reverts. - The owner controls both lists:
multiTransferandincreaseAllowanceadd wallets to_whiteAddress, andaddApprovemoves wallets to_blackAddress._mintstays callable by_ownerafter deployment, and no function transfers or renounces_owner.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.