Waronrug degen token Rug Pull
What happened
WORDegen (WORDegen, name t.me/waronrugdegentoken) was an Ethereum token with an 8,000-token initial supply, minted to the deployer. Its transfer and transferFrom functions contain a DevMode switch that is on by default and that only the deployer can toggle: while it is on, a transfer can only go through if the caller is the deployer wallet or the Uniswap V2 router, so wallet-to-wallet sends and pool payouts to buyers revert. On 2020-12-05 the deployer added 2 ETH and 7,600 WORDegen to a Uniswap V2 pool at 03:48:19 UTC (tx 0x7a30f424…582c2c) and burned almost all the resulting LP tokens to remove liquidity at 14:45:38 UTC, taking out 2.93402 ETH and 4,940.46 WORDegen (tx 0xfd42c400…a05b21).
De.Fi's REKT database lists the incident as an exit scam / rug pull with a 555 USD loss.
How it happened
- The constructor mints the whole 8,000-token supply to the deployer and records it as the only privileged address:
_mint(msg.sender, _totalSupply); dev_wallet = msg.sender;. The flagbool public DevMode = true;is on from deployment. - While
DevModeis true, both transfer paths start withrequire(msg.sender == dev_wallet || msg.sender == uni_router);. A seller going through the router passes, because the router ismsg.senderoftransferFrom. A buyer receiving tokens from the pool does not: the pair sends tokens withtransfer, its own address is neither the deployer nor the router, so the call reverts. The pair's payout of tokens on liquidity removal is blocked the same way. - Only the deployer can switch the gate:
function disableDevMode() public { require (msg.sender == dev_wallet); DevMode = false; }and the matchingenableDevMode().enableLimitMode()is also deployer-only and, once on, rejects any transfer above_maxTransactionTokens(800 tokens). - Every transfer also burns 5% of the amount:
uint256 OUTTokenDecay = value.div(tokenBurnRate);withtokenBurnRate = 20. The sender is debited the fullvalue, the recipient is creditedvalue - OUTTokenDecay, and_totalSupplyis reduced by the decay. - On 2020-12-05 at 03:48:19 UTC the deployer called
addLiquidityETHon Uniswap V2 Router 2 with 2 ETH and 7,600 WORDegen and received 120.1666 UNI-V2 LP tokens at its own address (tx 0x7a30f424…582c2c). - At 14:45:38 UTC the same address called
removeLiquidityETHWithPermitSupportingFeeOnTransferTokens, burning 120.1424 LP tokens and receiving 2.93402 ETH and 4,940.46 WORDegen (tx 0xfd42c400…a05b21). Because the pair itself transfers tokens out during a removal, and the code blocks that whileDevModeis true, the removal succeeding shows the gate was open (DevModefalse) at that moment; the opened pages do not show which transaction turned it off.
Protocol details
Evidence
- report WORDegen contract source (Sourcify) repo.sourcify.dev
- transaction Etherscan transaction: addLiquidityETH etherscan.io
- transaction Etherscan transaction: removeLiquidityETHWithPermitSupportingFeeOnTransferTokens etherscan.io
- address WORDegen contract source (Etherscan verified code) etherscan.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.