DESTINY Protocol Rug Pull
What happened
CertiK's Skynet alert of 24 March 2023 reported that about $120.8K BUSD was removed from the DESTINY Protocol (DESTINY) pool on BNB Chain by the deployer. De.Fi's REKT database lists the incident as an exit scam/rug pull and describes the deployer removing liquidity from the pair contract and selling a large quantity of tokens, with the price falling by about 90%. The deployer address is 0xa580dd85…4669c6 and De.Fi's example liquidity-removal transaction is 0x244e9f71…467bcc.
The token contract 0x673246c7…c255b6 also gives its owner standing powers over holders: a per-address blacklist that blocks transfers out of an address, buy and sell fee setters with no cap, a sell-size limit that can be set to zero, and a switch that freezes transfers for every non-exempt address. The verified source shows these powers exist but does not show that any of them was used.
How it happened
- The constructor gives the whole supply to the deployer and exempts it from fees:
_rOwned[_msgSender()] = _rTotal;and_isExcludedFromFee[owner()] = true;. The marketing, development, charity and vault addresses are all hard-coded to the same deployer address, for exampleaddress payable public marketingAddress = payable(0xa580dD854E89CE6bF16d23C7858ddf0e7f4669C6);, andswapTokenssends the BNB from swapped fees to the charity, development and marketing addresses. - What the code allows against holders (no transaction shows these being called):
addToAirdropadds any address except the owner to a blacklist, and_transferstarts withrequire(!_isBlacklist[from], "BEP20: transfer from blacklisted address");. Because the check is onfrom, a blacklisted holder cannot sell through the router (the router moves their tokens withtransferFrom), and a blacklisted pair address would block every buy. setSellFee(uint256 sellTaxFee, uint256 sellVaultFee, uint256 sellLiquidityFee)andsetBuyFeehave no upper bound. The recipient receivestAmount.sub(tFee).sub(tLiquidity).sub(tVault), while the seller's balance is debited the fullrAmount, so a combined sell fee of 100% leaves the seller with nothing and a higher one makes the sale revert.setSellMaxTxAmount(uint256 sMaxTxAmount)can be set to 0, after whichrequire(amount <= _sMaxTxAmount, "Transfer amount exceeds the max sell amount.");fails for every non-exempt seller.setTradingOpen(false)is worse: the checkrequire( _isExcludedFromFee[to] || _isExcludedFromFee[from], "trading paused temporarily.");sits inside a branch that already requires both to be non-exempt, so it always reverts. The owner can give these powers up withrenounceOwnership, but a latest-block read of the contract on 2026-09-30 still returned the deployer as owner.- What was reported: CertiK's alert says about $120.8K BUSD was removed by the deployer on 24 March 2023, and De.Fi describes the deployer removing liquidity from the pair and selling a large quantity of tokens, dropping the price about 90%. Removing liquidity is not a function of the token contract; it needs the liquidity-pool tokens held by the deployer, and the verified source does not show who held them.
Protocol details
Evidence
- report @CertiKAlert incident report twitter.com
- report CertiK Alert post on DESTINY Protocol liquidity removal twitter.com
- transaction bscscan.com transaction 0x244e…7bcc bscscan.com
- address BscScan verified source: DESTINY Protocol (0x673246c704b6ba3982549230e9b05acf07c255b6) bscscan.com
- address bscscan.com address 0xa580…69c6 bscscan.com
- analysis Sourcify repository: DESTINY (chain 56, exact match) repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.