CrossPad Honeypot
What happened
CrossPad (CROSS) is an Ethereum token deployed on 1 May 2021 at 0xf200c3b8…8f85af. Every transfer and transferFrom passes through a burnTokenCheck modifier that lets through the owner, a second privileged address called _safeOwner, and owner-whitelisted wallets, but requires every other sender to be _safeOwner or to send to the Uniswap V2 router address. A sale moves tokens from the holder to the Uniswap pair, not to the router, so it reverts with a disguised "ERC20: transfer amount exceeds balance" error.
The owner controls the whitelist, a blacklist and _safeOwner through functions named after standard ERC-20 allowance calls, and _mint is public but owner-only, adding any amount to the owner's balance. De.Fi's REKT database lists CrossPad as an exit scam/honeypot, stating that the contract owner could disable the transfer function and so stop users from selling.
How it happened
- The constructor sets
_ownerand_safeOwnerto theownerargument and mints the initial supply to it. The contract has no function that changes_owner, so the owner role can never be renounced. burnTokenChecklets a transfer through if the sender is_owneror_safeOwner, if the recipient is_owner, or if the sender is on_whiteAddress. While_owner == _safeOwner, the owner's first outgoing transfer also moves_safeOwnerto that transfer's recipient.- Any other sender hits
require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance")unless the amount is below_sellAmount._sellAmountstarts at 0, so no amount qualifies, and a sale to the pair reverts. - The owner can raise
_sellAmountby transferring tokens to itself. Transfers below that amount then pass, but a transfer to_safeOwneralso puts the sender on_blackAddress, after which only the_safeOwner/router condition applies. - The owner can whitelist wallets with
increaseAllowance(address[]), blacklist them withaddApprove(address[]), reassign_safeOwnerwithdecreaseAllowance(address), and whitelist airdrop recipients while setting their router allowance to the maximum withmultiTransfer. _mint(account, amount)is public but owner-only; it always credits_balances[_owner]while theTransferevent namesaccountas the recipient.
Protocol details
Evidence
- report De.Fi REKT database listing for CROSS (proof link: Token Sniffer tweet 1374999601485291522) twitter.com
- transaction CrossPad contract creation transaction etherscan.io
- address CrossPad verified contract code on Etherscan etherscan.io
- analysis Sourcify match for 0xf200c3b82b4f5baaca8898549ec3f3d7aa8f85af on Ethereum repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.