Meta Pets Rug Pull
What happened
Meta Pets ($MP) is an Ethereum ERC-20 token whose source gives the deployer the entire fixed supply and a set of owner-only switches: uncapped fee setters, a wallet blacklist, transaction and cooldown limits, and functions that pull ETH and tokens out of the contract. Three payout wallets are hard-coded in the contract and are exempt from fees, the per-wallet cap and the cooldown. Etherscan transactions show the deployer added 15 ETH and 100 billion $MP of liquidity on 2021-11-18 at 18:01 UTC, and that the hard-coded marketing wallet (0x80F37688…F5cA0c) and development wallet (0x57C7CB16…A0f3C3) each sold about 19.89 billion $MP into the pool later that day, for about 38.86 ETH and about 6.27 ETH. De.Fi's REKT database lists the token as an exit scam/rugpull with 708,623 USD lost; the listing's wallet trail is kept below, and this research did not open every transaction in it.
De.Fi listing trail (as listed, not independently reopened except where noted above):
- Contract deployment: 0x77d8cbef…82f0ff.
- Large token distributions to EOAs: 0x80f in 0xf9822c73…c72dd0; 0x57c in 0x0b2a54b3…d70c3a; 0x6b2 in 0xc453b1e1…6104ae; 0x3a3 in 0xc71960c2…77d9d2.
- Distributions to contracts: the token sale contract in 0xc71960c2…77d9d2 and a vesting contract in 0x56bede5d…ae7292.
- Liquidity added by the deployer in 0xf6b2f700…f93b46.
- The token sale contract 0xc6695f10…33d6a6 passed the ETH it gathered to the 0xeaf EOA and to the deployer's address.
- Sales: 0x80f sold in 0x7dad2876…245db4; 0x57c sold in 0x71973719…5f2b96; 0x6b2 sent tokens to another EOA that sold in 0x7240a1ea…a005ae; 0x3a3 is listed as still holding tokens.
- Final recipient of the proceeds, per the listing: 0x839973ac…7056d7, which deposited into a Binance wallet in 0xcd09f05c…5a8ae8.
How it happened
- The constructor assigns the whole supply to the deployer:
_tTotal = 1000000 * 10**6 * 10**_decimals;and_tOwned[_msgSender()] = _tTotal;. The contract has no mint function, so insiders' tokens come from this one allocation. - Three payout wallets are hard-coded and exempted from the rules that bind other holders:
address payable public developmentAddress = payable(0x57C7CB16A480232CC479D85A3c962e826FA0f3C3);andaddress payable public marketingAddress = payable(0x80F37688dD7850ac3B5884066C03897d9fF5cA0c);, withisExcludedFromFee[marketingAddress] = true;,isExcludedFromAntiWhale[marketingAddress] = true;andisExcludedFromTransactionCoolDown[marketingAddress] = true;(and the same lines for the development wallet). - Ordinary holders pay a tax on every transfer:
_totalFee =liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee);is 120 of 1000 (12%), andif(recipient == uniSwapPair && sellExtraFee > 0) increaseFee();adds 2% on sells. The seller is debited the full amount (_tOwned[sender] = _tOwned[sender].sub(amount);) while the recipient receivestTransferAmount, so the fee is taken from the seller's tokens. - The owner can change the tax without any cap:
function setSellExtraFeePercent(uint256 Fee) external onlyOwner { sellExtraFee = Fee; }and the fourset...FeePercentsetters likewise accept any value. Once the combined rate reaches 1000 a seller receives nothing, and above 1000tAmount.sub(tFee)underflows and the transfer reverts. Fee-exempt wallets skip this throughremoveAllFee(). - The owner can block a specific holder or the pool:
require(!isBlacklisted[from], "You are Blacklisted");checks the token sender, so a blacklisted holder cannot send or sell, and a blacklisteduniSwapPairwould stop buys.blacklistMultipleWalletsaccepts up to 799 addresses per call. - The owner can also freeze trading for everyone else through the limits. With
antiBotEnabledon,require(amount <= maxTxnAmount, "Transfer amount exceeds the maxTxAmount.");applies to every transfer not touching the owner, andsetMaxTxnTokensorsetTransactionCooldownTimeaccept any value, so a limit of 0 or a very long cooldown makes non-excluded transfers revert. - Value can be withdrawn by the owner:
function recoverETH() external onlyOwnersends the contract's ETH balance to the caller,recoverTokenstransfers any token held by the contract, andswapAndLiquifymints LP tokens toowner()throughaddLiquidity(owner(), liquidityTokens, transferredBalance);.renounceOwnership()exists, but the on-chain owner read on 2026-09-30 is still the deployer 0x504aad03…4ddbb7. - What the opened transactions show: the deployer added 15 ETH and 100 billion $MP of liquidity at 2021-11-18 18:01 UTC (tx 0xf6b2f700…f93b46). At 23:24 UTC the marketing wallet swapped about 19.89 billion $MP for about 38.86 ETH (tx 0x7dad2876…245db4), and at 23:38 UTC the development wallet swapped about 19.89 billion $MP for about 6.27 ETH (tx 0x71973719…5f2b96). Each sale is far above the constructor default
maxTxnAmountof 1 billion tokens, so by the code the limit must have been raised orantiBotEnabledswitched off before those sales; no transaction showing that was opened.
Protocol details
Evidence
- report Sourcify exact-match copy of METAPETS source repo.sourcify.dev
- transaction Etherscan transaction 0x7dad2876... (marketing wallet swaps $MP for ETH) etherscan.io
- transaction Etherscan transaction 0x71973719... (development wallet swaps $MP for ETH) etherscan.io
- transaction Etherscan transaction 0xf6b2f700... (addLiquidityETH by deployer) etherscan.io
- transaction etherscan.io transaction 0x0b2a…0c3a etherscan.io
- transaction etherscan.io transaction 0x56be…7292 etherscan.io
- transaction etherscan.io transaction 0x7240…05ae etherscan.io
- transaction etherscan.io transaction 0x77d8…f0ff etherscan.io
- transaction etherscan.io transaction 0xc453…04ae etherscan.io
- transaction etherscan.io transaction 0xc719…d9d2 etherscan.io
- transaction etherscan.io transaction 0xcd09…8ae8 etherscan.io
- transaction etherscan.io transaction 0xf982…2dd0 etherscan.io
- address Etherscan verified source: Meta Pets ($MP) 0x17cd80aa8f4aed7c403e4c6b9c2cd3fabef09d99 etherscan.io
- address etherscan.io address 0x8399…56d7 etherscan.io
- address etherscan.io address 0xc669…altx etherscan.io
- analysis De.Fi REKT database listing for Meta Pets (MP), Exit Scam/Rugpull, 708,623 USD de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.