DecentraWorld Rug Pull
What happened
DecentraWorld ($DEWO) was a fixed-supply BEP20 token on BNB Smart Chain with a PancakeSwap pool, a buy/sell tax, and per-wallet buy and sell limits. The contract has no mint function, but it exempts the deployer from both the tax and the sell limit and routes the DAO/farming tax to the deployer by default, so one wallet could collect a large token balance and sell it in a single swap while ordinary holders were capped at small sells.
The token was created in transaction 0xb8ff69cf…36faf7, which minted 100 million $DEWO to the creator address 0x5055e1d9…a68833. On 2022-05-24 that address sold tokens for WBNB on PancakeSwap in transaction 0x94018528…816f66. CertiK's write-up reports a sale of 31,825,441 $DEWO for about 3,128 BNB (roughly 1 million USD), a price drop of more than 97%, and the proceeds moving to 0x3b9dcfe4…039991. CertiK classifies this as a rug pull by the deployer rather than an exploit. The existing record puts the loss above 1 million USD.
How it happened
- The constructor mints the whole supply to the deployer:
_balances[msg.sender] = _totalSupply;with_totalSupply = 100000000 * (10 ** decimals());. No later_mintexists, so the supply is fixed. - The constructor makes the deployer the DAO/farming tax receiver and exempts it from tax and limits:
daoandfarmingAddress = msg.sender;,excludeFromTax[msg.sender] = true;,exclueFromMaxTx[msg.sender] = true;. Tax tokens from every buy and sell therefore accumulate in the deployer wallet as well as the original supply. - Ordinary holders face a per-cooldown sell cap.
checkSellTxLimitrequiresexclueFromMaxTx[_sender] == true || txSettings.sells[_sender].add(_amount) < txSettings.sellMaxTx, and the default istxSettings.sellMaxTx = _totalSupply.div(800);(0.125% of supply, 125,000 $DEWO; the owner-onlysetTxSettingscannot set it below_totalSupply.div(400), 0.25%). The deployer passes the first condition, so the cap never applies to it. - On a sale,
_transferskips the tax whenif(excludeFromTax[to] || excludeFromTax[from]) { hasTaxes = false; }, so the deployer's sell is untaxed and unlimited in size. The owner also keepssetExcludeFromTaxandsetExclueFromMaxTx(bothonlyOwner) andrenounceOwnershipwas not called according to the currentowner()read, which still returns the deployer. - What happened, per CertiK: on 2022-05-24 the deployer sold 31,825,441 $DEWO from its initial holdings and accumulated fees for about 3,128 BNB in transaction 0x94018528…816f66, and the token price fell by more than 97%. The code alone does not show a liquidity-removal step; this was a sale into the pool.
Protocol details
Evidence
- report Report dappradar.com
- report @CertiKAlert incident report twitter.com
- report Report web3isgoinggreat.com
- report DecentraWorld verified source (Sourcify) repo.sourcify.dev
- transaction bscscan.com transaction 0x9401…6f66 bscscan.com
- transaction bscscan.com transaction 0xb8ff…faf7 bscscan.com
- address DecentraWorld verified source (BscScan) bscscan.com
- address bscscan.com address 0x5055…8833 bscscan.com
- analysis Revisiting DecentraWorld (CertiK) certik.com
- analysis Web Archive web.archive.org
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.