White Moon Finance Rug Pull
What happened
Every transfer of the MOON token takes a hard-coded 12% fee. _transfer debits the full amount from the sender, credits the recipient with 88% and credits the other 12% to 0x0ECDC7f2…04A3E0, the address that deployed the contract. The fee has no setter or exemption list, so it applies to buys, sells and wallet-to-wallet transfers alike.
The owner can also call mint to create new tokens for itself with no cap. De.Fi's REKT database lists the token as an exit scam/rugpull dated 2021-09-07; the code shows the fee and the mint power, not whether the mint was used or liquidity was removed.
How it happened
_transfercomputes the fee:uint256 fee = amount.mul(12).div(100);and fixes the recipient:address feerecipient = 0x0ECDC7f21908Ec9f7E593D09Bc2B8DF3f504A3E0;. BothtransferandtransferFromcall_transfer, so no path avoids it.- The sender is debited the full amount (
_balances[sender] = _balances[sender].sub(amount);), the fee address is credited (_balances[feerecipient] += (fee);) and the recipient receivesamount.sub(fee). Sending 100 MOON credits 88 to the recipient and 12 to the fee address. A liquidity pair receiving a sale gets 88% of the amount sold. - The event log overstates the recipient's credit:
emit Transfer(sender, recipient, amount);logs the full amount even though the recipient was credited onlyamount.sub(fee), and the separateemit Transfer(sender, feerecipient, fee);is logged on top. function mint(uint256 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); }adds to the owner's balance and to_totalSupplywith no maximum. The owner can therefore create tokens and sell them into liquidity; the code allows this but no transaction was opened that shows it happening.transferOwnershipandrenounceOwnershipexist, so the mint power can be moved or given up, but nothing in the code forces that.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.