Do Right Rug Pull
What happened
DR (Do Right) is a BEP20 token on BNB Smart Chain (contract 0x920a7cbD…1cA9eE, deployed 2023-09-23) that traded on PancakeSwap. De.Fi's REKT database lists it as an exit scam / rug pull of 370,556 USD: the deployer removed liquidity from the pool within two days, selling tokens in 13 transactions totaling 290,547 USD and removing 80,009 USD in another transaction, and the stolen funds were moved to another EOA address where they remained as BSC-USD as of Dec 21, 2023. A CertiK Skynet alert on 2023-12-15 separately reported about 73% slippage on DR, caused by the deployer selling about 237k USD worth of tokens.
The verified code only lets addresses in an owner-controlled whitelist (wList) trade against the pair: any transfer to or from the pair by a non-whitelisted address reverts with "swap trade fail". The deployer is whitelisted in the constructor, so it can sell into the pool and remove liquidity while other holders depend on being whitelisted by the owner. The code does not show how many outside holders were or were not whitelisted.
per the De.Fi listing:
- Deployer address: 0x22f108A4…36DE84
- Liquidity removal transactions: 0x1edd8b41…fdb11c, 0xa9896be3…8e81fe, 0x043c90f8…d5dbaf
- Funds holder address as of Dec 21, 2023: 0x35b9f131…8c6bc0
How it happened
What the code allows:
- The constructor creates the pair and whitelists the recipient of the initial supply, the deployer and the burn address:
setWList(toAddress,true); setWList(msg.sender,true);. - In
_transfer, a non-whitelisted sender or receiver is blocked from touching the pair:require(from!=uniswapV2Pair&&to!=uniswapV2Pair,"swap trade fail");. Buys (from the pair) and sells (to the pair) by ordinary wallets therefore revert, while whitelisted addresses pass throughif(wList[from]||wList[to]){ _balances[to] += amount; }with no restriction and no fee. - Only the owner can add addresses to the list:
function setWList(address addr,bool flag)public onlyOwner. A whitelisted deployer can sell to and remove liquidity from the pool, and the owner decides who else can. - Transfers between ordinary wallets pay a 15% fee that is debited from the sender in full and sent to
tradeFeeAddr:uint256 tradeFee=amount*tradeFeeRatio/BaseUnit;withtradeFeeRatio=1500.setTradeFeeRatiohas no cap, and a ratio above 10000 makesamount=amount-tradeFeerevert for every non-whitelisted transfer. mint(address account,uint256 amount) public onlyManagerlets the owner ormanagerAddresscreate new supply.owner()reads as the zero address in a 2026-09-30 call, so ownership has been renounced at some point; the whitelist and fee settings are then frozen at their last values. The code does not show when it was renounced or whomanagerAddressis.
, per the De.Fi listing and CertiK alert:
- The deployer sold DR into the pool in 13 transactions totaling 290,547 USD and removed 80,009 USD of liquidity in another transaction, within two days (De.Fi). CertiK's alert reported about 73% slippage from deployer sales of about 237k USD.
- The proceeds were sent to another EOA and still sat there as BSC-USD on Dec 21, 2023 (De.Fi).
Protocol details
Evidence
- report CertiK Alert on DR token slippage twitter.com
- transaction bscscan.com transaction 0x043c…dbaf bscscan.com
- transaction bscscan.com transaction 0x1edd…b11c bscscan.com
- transaction bscscan.com transaction 0xa989…81fe bscscan.com
- address BscScan verified source, Dr 0x920a7cbD0b5aeD31827385783E7Af245331cA9eE bscscan.com
- address bscscan.com address 0x22f1…DE84 bscscan.com
- address bscscan.com address 0x35b9…6bc0 bscscan.com
- analysis Sourcify repository copy of the same contract repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.