ROACH RACE Rug Pull
What happened
ROACH RACE (ROACH) is an Ethereum ERC-20 whose real control sits with a separate mst address fixed in the constructor, not with the owner. That address can blacklist or greylist wallets, whitelist wallets so they skip every check, and switch on an automatic greylist mode in which any wallet that receives tokens from a non-listed source can send them out only within a short block window. The contract also exposes unrestricted functions that emit fake Transfer, Swap and Approval events without changing balances. De.Fi's listing and a De.Fi tech lead's post report that the deployer removed 88.1 WETH (about 160,000 USD) from the Uniswap V2 pool about a day after launch, and the listing says the funds were spread across four wallets. The token code does not contain the liquidity withdrawal itself.
Contract Creator: 0x6007d8d7…531c2a
Liquidity Removal tx: 0x1aaf5bd1…07fac2
How it happened
What the code allows:
- Owner powers are minimal: the owner can only call
renounceOwnership. All admin functions useonlyMst(require(msg.sender == mst);), wheremst=_mst;is set once in the constructor and there is no function that changes or renounces it.ownerreads as the zero address in an eth_call on 2026-09-30, but that does not affect themstrole, and no source opened shows when it was renounced. - Every transfer first runs
beforTransfer:require(tokenBlacklist[_from] == false); require(tokenBlacklist[_to] == false); require(tokenBlacklist[msg.sender] == false);unless_fromor_tois whitelisted. Themstaddress can blacklist any wallet withBLAorBL. Becausemsg.senderis also checked, blacklisting a router address would block transfers made through that router. - The same function contains
require(tokenGreylist[_from] == false||block.number<death[_from]+blockN);. For a manually greylisted wallet (GLAorApprove(address[],bool)),deathis 0 andblockNdefaults to 1, so the condition is false and that wallet cannot send tokens. setAbswitches on automatic greylisting: intransferandtransferFrom,if(ab&&!tokenWhitelist[_to]&&_to!=LP){ tokenGreylist[_to] = true; ... death[_to]=block.number; }. Withabon, any non-whitelisted recipient other than theLPaddress is greylisted and can send only whileblock.number<death+blockN; with the defaultblockN=1that is the same block as receipt. OnceLPis set to the pair withsetLp, a buyer's tokens moved to the pair later are blocked, so buyers can receive but not sell.WLAwhitelists the deployer or any other wallet to skip all of these checks.- Fake activity:
execute(...)is public with no access check and emitsTransfer(LP, recipients[i], tokenAmounts[i])and aSwapevent naming the Uniswap V2 router address, then calls_Transfer, which is also public and only emitsTransfer(_from,_to,_value).Approve(address[], uint256)inTokenis likewise public and emitsApprovalevents. These change no balances; they can make an explorer or tracker show buys and holders that never traded.changeFkmakesafterTransferemit transfers as coming from theserviceaddress instead of the real sender. - The code has no mint and no fee setter. Liquidity removal is done on the Uniswap V2 pool, not through a token function.
, per De.Fi:
- De.Fi's tech lead posted on July 24, 2023 that the token's deployer had removed 88.1 WETH (about 160,000 USD) from the liquidity pool about one day after launch, and that the contract creator had already rugged multiple tokens.
- The listing gives the removal transaction 0x1aaf5bd1…07fac2 and says the funds were moved to four wallets.
- No opened source shows a transaction in which
mstcalledsetAb,BLA,GLAorWLA, so whether any holder was blocked is not established.
Protocol details
Evidence
- report @artemDeDotFi incident report twitter.com
- report ROACH RACE Token verified source (Sourcify) repo.sourcify.dev
- report De.Fi tech lead post on the ROACH rug pull twitter.com
- transaction etherscan.io transaction 0x1aaf…fac2 etherscan.io
- address ROACH RACE Token verified source (Etherscan) etherscan.io
- address etherscan.io address 0x6007…1c2a etherscan.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.