DHE Rug Pull
What happened
DHE is a BNB Smart Chain token paired with USDT on PancakeSwap whose entire supply is credited in the constructor to one hard-coded address. The code also lets the owner flag any address as a sniper so that all transfers sent from it revert, and it flags early buyers automatically for roughly the first 2,000 blocks after liquidity is added. De.Fi's listing records that the project promised to make content tradable as NFTs on its own platform, denominated in DHE, and that a wallet holding the supply dumped DHE against USDT on PancakeSwap on 20 June 2022 within about five minutes, a 92% price drop and about 142k USDT taken.
The listing gives the minted amount as 3,999,000 DHE; the verified constructor and the on-chain total supply show 3,990,000 DHE. No opened transaction shows any wallet being flagged as a sniper.
(from the De.Fi listing):
- Token holder structure: Token holders
- Wallet (A), listed as the recipient of the minted supply (deployment transaction): 0xa2779bbd…33f77a
- Transfer of over 100,000 DHE from wallet (A) to wallet (B): 0x08d1a07a…771e29
- Wallet (B), listed as the address that dumped DHE: 0x3ff95c56…3edb9e
How it happened
What the code allows:
- The constructor credits the whole supply to a hard-coded address that is neither the deployer nor the router:
address should = 0xa3427dD4909fA77780F5595512533734C971e7a6; _tOwned[should] = _tTotal;with_tTotal = 3990000 * 10 ** 18. The same address is put on the fee-exempt and liquidity-holder lists (addExcludedFromFee(should); ... _liquidityHolders[should] = true;), so its sales skip the 5% fee that other traders pay on pair trades. - The deployer is made owner (
_owner = msgSender) and can flag any address withremoveSniper(address account, bool success) external onlyOwner { _isSniper[account] = success; }. _transferstarts withif (_isSniper[from]) { revert("Sniper rejected."); }. The check reads the sender, so a flagged holder's sell through the router (transferFrom(holder, pair, ...)) reverts.- After the first liquidity transfer to the pair sets
launchedAt, the code flags buyers automatically:if ( launchedAt > 0 && from == uniswapV2Pair && !_liquidityHolders[from] && !_liquidityHolders[to]) { if (block.number - launchedAt < 2000) { _isSniper[to] = true; } }. Any non-whitelisted wallet that buys from the pair in that window becomes unable to move its tokens. The on-chain owner reads as the zero address as of 2026-09-30, soremoveSnipercan no longer be called now (the renounce time was not established).
What was reported:
- De.Fi's REKT database lists the token as an Exit Scam/Rugpull: a wallet holding the supply moved over 100,000 DHE to a second wallet, which dumped DHE against USDT on PancakeSwap on 20 June 2022, producing a 92% price drop and about 142k USDT gained. That source does not say whether any buyer was flagged by the sniper logic.
Protocol details
Evidence
- report Report dexscreener.com
- transaction bscscan.com transaction 0x08d1…1e29 bscscan.com
- transaction bscscan.com transaction 0xa277…f77a bscscan.com
- address BscScan verified source: DHE 0x11CBC781DadAAD13fc3a361772C80B1C027820AF bscscan.com
- analysis Web Archive web.archive.org
- analysis Sourcify match: DHE (DHE.sol) repo.sourcify.dev
- analysis bscscan.com page 0x11cb…nces bscscan.com
- analysis bscscan.com page 0x11cb…20af bscscan.com
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.