NETVRK Honeypot
What happened
De.Fi's REKT database lists NETVRK on Ethereum as an exit scam / honeypot, stating that the contract owner could disable the transfer function, which restricted users in selling their tokens. The verified source at 0x651255b4…dd340e shows a transfer filter, the modifier burnTokenCheck, that lets the owner, a privileged _safeOwner address and whitelisted addresses move tokens freely while other senders can only send to the hard-coded Uniswap V2 router address or to the owner. A normal sell sends tokens from the holder to a pair rather than to the router address, so it reverts with a balance-style error message.
Every switch is gated on _owner, and the contract has no function to change or renounce _owner. The deployer was 0xbd5748B0…69cB59 (deployment transaction 0x40bed187…a0d656).
How it happened
- The constructor sets
_owner = owner;and_safeOwner = owner;and hard-codesaddress private _unirouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;._sellAmountstarts at 0. - Both
transferandtransferFromcall_approveCheck, which runs theburnTokenCheckmodifier before moving balances. The first branch isif (_owner == _safeOwner && sender == _owner){_safeOwner = recipient;_;}: while_safeOwnerstill equals the owner, the owner's first transfer passes and sets_safeOwnerto that transfer's recipient. - After that, transfers pass if
sender == _owner || sender == _safeOwner || recipient == _owner, so holders can always send tokens to the owner, and the_safeOwneraddress can send freely._whiteAddress[sender] == truealso passes. - Every other sender hits
require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance")unlessamount < _sellAmount. Because_sellAmountstarts at 0,amount < _sellAmountis false for every amount, so a non-privileged sender can only send to the router address. A sell through a router moves tokens from the holder to a pair, which is neither the router address nor the owner, so it reverts. Whether the buy side works depends on whether the pair is whitelisted or equals_safeOwner, which the code alone does not show. - The owner can reshape this with owner-only functions whose names suggest ERC-20 allowance helpers:
increaseAllowance(address[] receivers)whitelists addresses,addApprove(address[] receivers)blacklists them,decreaseAllowance(address safeOwner)replaces_safeOwner, andmultiTransfercan whitelist recipients and approve the router for them. A self-transfer by the owner (if (sender == _owner && sender == recipient){_sellAmount = amount;}) sets_sellAmount; after that, non-blacklisted senders may send amounts below it to any recipient, and a recipient equal to_safeOwnerflips the sender onto the blacklist (_blackAddress[sender] = true;). - Separately,
_mint(address account, uint256 amount)ispublicand checks onlymsg.sender == _owner, then credits_balances[_owner], so the owner can increase supply at any time. - What the code allows is separate from what happened: no transaction was opened showing the owner calling any of these functions or who was unable to sell, so the outcome rests on De.Fi's listing.
Protocol details
Evidence
- report De.Fi REKT database listing for NETVRK (proof link: Token Sniffer post, returned 404) twitter.com
- address Etherscan verified source for 0x651255b45249f474ea03b85acfff07375edd340e etherscan.io
- analysis Sourcify exact match for chain 1 contract 0x651255b45249f474ea03b85acfff07375edd340e repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.