Do Right Rug Pull

Reported loss $371K
Rugpull

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:

How it happened

What the code allows:

  1. 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);.
  2. 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 through if(wList[from]||wList[to]){ _balances[to] += amount; } with no restriction and no fee.
  3. 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.
  4. 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; with tradeFeeRatio=1500. setTradeFeeRatio has no cap, and a ratio above 10000 makes amount=amount-tradeFee revert for every non-whitelisted transfer.
  5. mint(address account,uint256 amount) public onlyManager lets the owner or managerAddress create new supply.
  6. 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 who managerAddress is.

, per the De.Fi listing and CertiK alert:

  1. 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.
  2. The proceeds were sent to another EOA and still sat there as BSC-USD on Dec 21, 2023 (De.Fi).

Protocol details

Classification Token
Protocol Type Exit Scam/Rugpull
Affected asset / contract DR

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.