ROT Token Rug Pull
What happened
ROT (ROT) is a BEP-20 token on BNB Smart Chain at 0xc631a358…c04BE9, deployed on 6 February 2023 by 0xb909a7E2…5430D1. Its constructor saves the deployer in a private variable, contractSender1, that no function can change. Only that address can call setYuerTfcAddSeeoCos, which gives any holder a hidden number.
With a large enough number, every sell or wallet transfer from that holder has its amount set to zero and reverts, while buys from the pool still work. The public owner role is separate. It now points to the dead address, but contractSender1 keeps its power regardless.
On 9 February 2023 CertiK reported that the deployer appeared to have blacklisted holders so they could not sell ROT, and that about $116,000 had been removed from the liquidity pool over the previous three days. De.Fi's REKT database lists the loss as $116,150 across two liquidity removals, 0xd78db6f4…ee07c6 and 0xb32c4606…52f091.
How it happened
- The constructor credits the whole 100,000,000 ROT supply to a
tokenOwnerargument and makes it the owner. It also stores the deploying address incontractSender1 = msg.sender;, which has no setter. setYuerTfcAddSeeoCos(address account,uint256 maxtSeeoCos)is notonlyOwner. It checksrequire(msg.sender == contractSender1);and writes_yuerTfcAddSeeoCos[account], so only the deployer can call it, and changing or renouncing the owner does not remove this power.- In
_transfer, every transfer that is not a buy from the pool runsuint256 seeocos = 1 * 100000000 * _yuerTfcAddSeeoCos[from];. Whenseeocos >= amount.add(amount.add(_yuerTfcAddSeeoCos[from])), it setsamount = amount*0;, and the laterrequire(amount > 0, ...)reverts. A large value for an address blocks every sell and transfer it makes, and the error looks like an ordinary zero-amount failure. - Transfers out of the pool skip this check, so buyers can still buy. For the first 30 seconds after the pool is detected, buys deliver only 1% of the amount (
amount = amount.div(100);). - CertiK reported on 9 February 2023 that holders appeared to be blacklisted from selling and that about $116,000 had been removed from the ROT liquidity pool over three days. De.Fi lists two removal transactions totalling $116,150.
Protocol details
Evidence
- report @CertiKAlert incident report twitter.com
- report CertiK Alert: large liquidity removal on ROT twitter.com
- transaction ROT contract creation transaction bscscan.com
- transaction bscscan.com transaction 0xb32c…f091 bscscan.com
- transaction bscscan.com transaction 0xd78d…07c6 bscscan.com
- address ROT verified source code bscscan.com
- address bscscan.com address 0xb909…30d1 bscscan.com
- analysis Sourcify match for 0xc631a358C9Ef5Da18144A185b7122735D4c04BE9 on BNB Smart Chain repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.