e-STD Rug Pull

Reported loss $49K
Rugpull

What happened

e-STD (e-STD, 18 decimals, 5,000,000 supply, BNB Smart Chain) is a fee-on-transfer token whose entire supply was credited to the deployer at deployment, and whose owner can change every fee ratio without a cap. CertiK's Skynet alert of 26 September 2022 reported an exit scam on e-STD (contract 0x7aA4B693…B64C1a): the price had dropped by more than 76% and about $49K appeared to have been taken. De.Fi's REKT database lists the deployer as sending e-STD to 2 EOA addresses, and three scammer addresses, 0xe5f616a5…f6b8d1, 0x7f37e061…ebce39 and 0x168ec864…832caa, selling a large amount of e-STD on PancakeSwap for a profit of 49,000 USD; its transfer transactions are 0xf963f5f9…f75dd2 and 0xf067769d…46888c.

The token code has no dedicated sell-block function and no mint function, but owner-set fee ratios or a zero market address can make every non-whitelisted sale revert. No source shows that any of these settings was changed, so the code explains how the supply was concentrated and what the owner could do to sellers, not why the sales succeeded.

How it happened

What the code allows:

  1. The constructor credits the entire supply to the deployer: _balances[msg.sender] = _totalSupply;. Supply is fixed (_totalSupply is only set there) and there is no mint function, so the deployer wallet holds every token until it sends them on.
  2. Any transfer whose sender is not the pair (addressLp) is treated as a sale, and non-whitelisted senders pay deductions: if (!listWhite.isexists(from)){ then, in the sale branch, _rebate_sell_inviter, _rebate_sell_market, a burn of _rebateValue(value,ratio_sell_burn), _rebate_all_fixed and _rebate_all_Lp. The sender is debited the full amount (each rebate calls _balances[from] = _balances[from].sub(valueRatio); and the remainder is valueM = valueM.sub(valueInviter).sub(valueMarket).sub(valueFixed).sub(valueLp);). With the default ratios the deductions total up to 7%.
  3. The owner controls the ratios and who is exempt. function SetListWhite(address _address) public onlyOwner makes a sender fee-free, function setAddressMarket(address _address) public onlyOwner redirects the market share, and every ratio setter takes a uint8 with no ceiling on the combined total. function setRatioMax(uint8 _ratioMax) public onlyOwner changes the divisor in return value.mul(ratio).div(ratio_max);, so lowering it inflates every deduction; once the deductions reach the full amount the seller receives nothing, and beyond that .sub reverts, so the owner can make every non-whitelisted sale fail. setAddressMarket has no zero-address check, while _rebate_sell_market and _rebate_buy_market both carry the checkAddress(addressMarket) modifier, which runs require(_address != address(0),"zero address ");, so setting the market address to zero would make every non-whitelisted transfer revert. There is no renounceOwnership, only transferOwnership to a non-zero address.

, as reported by CertiK and De.Fi's REKT database: 4. CertiK's alert reports an exit scam with the price down more than 76% and about $49K taken. De.Fi's REKT database lists the deployer sending tokens to 2 EOA addresses and three scammer addresses, including the deployer, selling a large amount of e-STD for a profit of 49,000 USD.

Neither source says that any fee ratio, whitelist entry or market address was changed.

Protocol details

Classification Token
Protocol Type Exit Scam/Rugpull
Affected asset / contract e-STD

Build your security review skills

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