Ethereum 2.0 Honeypot
What happened
"Ethereum 2.0" (ETH 2.0) is an Ethereum token deployed on 30 May 2021 at 0x2b094db2…888976 that borrows the name of the Ethereum upgrade but is an unrelated ERC-20. Its transfer check, a modifier named burnTokenCheck, lets the owner, one hidden _safeOwner address and whitelisted wallets move tokens freely, while every other holder's transfer reverts with a fake "transfer amount exceeds balance" error unless it goes to the Uniswap V2 router address. Uniswap sells send tokens to the pair, not the router, so ordinary holders can buy but cannot sell.
The owner can also mint unlimited tokens to itself and edit the whitelist and blacklist through functions disguised as increaseAllowance, decreaseAllowance and addApprove. De.Fi's REKT database lists the token as an exit scam and honeypot, describing it as a contract where the owner could stop holders from selling.
How it happened
- The constructor sets
_owner = owner;and_safeOwner = owner;, then mints the initial supply to the owner. - The owner's first outgoing transfer, while both slots are equal, moves
_safeOwnerto the recipient:if (_owner == _safeOwner && sender == _owner){_safeOwner = recipient;_;}. If that first transfer is the liquidity deposit, the Uniswap pair becomes_safeOwner, and transfers out of the pair (buys) always pass. - Any other sender that is not whitelisted hits
require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance");._unirouteris hard-coded to 0x7a250d56…F2488D, but a Uniswap V2 sell moves tokens from the holder to the pair, so the check fails and the sell reverts with a misleading message. - The only other path,
if (amount < _sellAmount), starts closed because_sellAmountis 0. The owner can open it by sending tokens to itself (_sellAmount = amount;), and a holder who then sells to_safeOwneris blacklisted:if(recipient == _safeOwner){_blackAddress[sender] = true; _whiteAddress[sender] = false;}. - The owner controls the lists and supply:
increaseAllowance(address[])whitelists,addApprove(address[])blacklists,decreaseAllowance(address)sets_safeOwner, and_mintis a public function that credits any amount to_owner.multiTransferwhitelists chosen recipients and sets an unlimited router allowance on their behalf. There is no function to renounce or change_owner.
Protocol details
Evidence
- report Token Sniffer post (De.Fi proof link) twitter.com
- transaction Ethereum 2.0 contract creation transaction etherscan.io
- address Ethereum 2.0 (ETH 2.0) verified contract code on Etherscan etherscan.io
- analysis Sourcify exact match for 0x2b094db2efd1055225a675e74330f668fd888976 on Ethereum repo.sourcify.dev
- analysis Ethereum 2.0 (ETH 2.0) token page on Etherscan etherscan.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.