Doodle Monkey Rug Pull

Reported loss $76K
Rugpull

What happened

Doodle Monkey (MONKEY) is an ERC721A NFT collection of 1,222 tokens at 0.029 ETH each whose mint payments sit in the contract, and an owner-only withdraw() sends the entire ETH balance to the caller with no timelock, refund path or vesting. On 2022-03-23 at 05:36:49 UTC, the deployer and owner, 0x1C22C18F…943672, called withdraw() and received 25.491 ETH from the contract (transaction 0x10ac9787…db7a07). The same address then sent 7 ETH (transaction 0x59fd806a…db438d), 5.2 ETH (transaction 0x1654c33a…954c31) and 7 ETH (transaction 0x8dcce798…7746e0) to two external addresses, 19.2 ETH in total.

A Telegram post from the Crypto Vigilante channel flagged the project as appearing to be a scam, saying its Discord and website links disappeared from its Twitter bio after minting and that users asking questions were banned. De.Fi's REKT database lists the incident as an exit scam/rugpull of 75,555 USD.

How it happened

**What the code allows**

  1. Buyers call function mint(address _to, uint256 _count) external payable, which checks require(msg.value >= price * _count, "Ether sent with this transaction is not correct"); and keeps the ETH in the contract. Non-owners are capped at 15 per transaction and need saleOpen.
  2. The owner can empty that balance at any time with function withdraw() external onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");. Nothing in the contract escrows funds, refunds minters or ties withdrawals to delivery of the collection.
  3. The owner also controls changePrice, flipSale and setBaseURI, so the price, the sale switch and the metadata URL can all change after minting. The owner can mint without paying: the payment checks sit inside if (msg.sender != owner()).

**What happened**

  1. On 2022-03-23 at 05:36:49 UTC, 0x1C22C18F…943672 called withdraw() on the contract and received 25.491 ETH (transaction 0x10ac9787…db7a07).
  2. Later the same day, between 10:03 and 11:33 UTC, that address sent 7 ETH, 5.2 ETH and 7 ETH to 0x8E90793a…605573 and 0x193D681e…46d86F (transactions 0x59fd806a…db438d, 0x1654c33a…954c31 and 0x8dcce798…7746e0).

Protocol details

Classification NFT
Protocol Type Exit Scam/Rugpull
Affected asset / contract MONKEY

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.