Zodiac Credit Rug Pull

Reported loss $33K
Rugpull

What happened

Zodiac Credit (ZODC) was a BNB Smart Chain token whose transfer function lets the deployer decide who may sell. The contract flags wallets so their sells revert with a fake "Block is busy, please try again" error. Every buyer who paid a gas price above an owner-set threshold is flagged automatically, and the owner can flag any address or every recorded buyer at once.

A hidden _root address keeps admin rights even after ownership is handed to the dead address. On 2023-02-06, the day the token was deployed, CertiK detected the deployer removing about 101.7 WBNB of liquidity and sending it to another wallet. De.Fi lists the loss as about $33K.

How it happened

  1. The constructor mints the whole supply to the deployer and stores it as the contract's private _owner. Transfers to or from that address skip every check: if(_owner!=from && _owner!=to && from!=_airTokenAddr){.
  2. onlyOwner accepts a second hidden admin: require(owner() == _msgSender() || _root ==_msgSender(), ...). _root is set to the deployer and nothing can change it. owner() now returns 0x...dEaD, yet the deployer can still call every admin function.
  3. Any holder flagged in isStatus cannot sell to the pair: if(to==_swap){ if(isStatus[from]){require(false,"Block is busy, please try again");} }.
  4. Flags are set in three ways. Buys are flagged automatically when tx.gasprice.mul(100) exceeds the owner-set _defaultPrice (if(from==_swap &&_currprice>_defaultPrice){isStatus[to]=true;}). AirDropGift(user) flags a single address. Bonous() flags every buyer recorded in haveToken.
  5. DepositTransfer() sets tradeStatus=true, after which every non-owner transfer not coming from the pair reverts: if(tradeStatus && from!=_swap){require(false,"Block is busy, please try again");}. Wallet-to-wallet transfers by holders always revert, because the code flags the sender in airtokenlist and then reverts on that flag.
  6. The listed outcome: CertiK's Skynet alert reported that the deployer removed about 101.7 WBNB of liquidity and moved it to an EOA beginning 0xDc1. De.Fi links the removal transaction 0x0054d2be…4710a9 from deployer 0xb0b86e33…c19ec7, and says the deployer also sold a large amount of ZODC, dropping the price by about 90%.

Protocol details

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

Build your security review skills

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