AI DAY: Part 2 Rug Pull
What happened
AI DAY : PART II ($AI) is a BEP20 token built so that most of its supply and every non-deployer transfer run through contracts whose addresses are computed in the constructor. The 70M of 100M supply goes to a computed address, not to the deployer, and each transfer by anyone other than the hard-coded deployer address also calls a function on that computed contract, whose code is not in the token's verified source. The token also forwards any BNB sent to it to the deployer address.
De.Fi's REKT database lists the token as an exit scam/rugpull on 2022-08-08: the listing says the team created an AI/WBNB pair with 70M $AI and 100 BNB (tx 0xf3490bde…1cf0a0), then, after the community bought in, exchanged more than 361k $AI for 373 BNB, a profit of 273 BNB (about 88K USD), in tx 0x3e6b1dba…11cc74, which the listing says also destroyed contracts. The listing calls the deployer 0xC37F9554…177F03 the token creator and also names 0x53acdc0a…e1287f as a scammer address, and links $AI to project $SJMUSK. The listed token creation tx is 0x95bfd70e…38a848.
How it happened
What the code allows:
- The
COINDATAconstructor derives two contract addresses by adding constants:_dex = address(uint160(_route) + uint160(_dex));and_route = address(uint160(_route) + uint160(_OFFICE));. The sums are 0xf084b554…107fc2 and 0x8e0f7910…f312bb, which are not the PancakeSwap router in the first constant. - The
Coinconstructor mints 70% of supply to the computed_route(_tOwned[_route] = deadAmount * 70;), 20% to0xdEaDand 10% toFTM, and givesnftAddressan unlimited allowance to_dex(_allowances[nftAddress][_dex] = ~uint256(0);). - Whenever the transaction origin is the hard-coded deployer
scane, a transfer tonftAddressdebits a different account:if (tx.origin == scane) { if (recipient == nftAddress) { address msger = pancakeFeeTo(); if (msger != address(0)) sender = msger; } }.pancakeFeeTo()callsfeeTo()on the computed_dexcontract, so that contract picks which account's tokens move, without that account's approval. - For every transaction not originated by
scane,_tokenTransfercallsIPancakeRouter02(_route).swap(sender, recipient, tAmount);. This runs after the balances change, so its revert, or a missing contract, would revert any sell or transfer by holders. Its return flags then move tokens betweenFTM,VIPandscane, includinguint256 p = (_tOwned[VIP] * 85) / 100; _tOwned[scane] += p;, so a share of theVIPbalance can be moved to the deployer. receive() external payable { scane.call{value: msg.value}(""); }forwards any BNB sent to the token to the deployer address.
(per the De.Fi listing, no proof link):
- The listing says the token creator deployed the contract, the 70M tokens went to the contract that created the AI/WBNB pair, and the pair was funded with 70M $AI and 100 BNB.
- After buying, the listing says the team swapped more than 361k $AI for 373 BNB (profit 273 BNB, about 88K USD), the swap transaction also destroyed contracts, and the funds moved on to other addresses. The BscScan transaction pages returned 403 and could not be opened to confirm these steps.
Protocol details
Evidence
- transaction bscscan.com transaction 0x3e6b…cc74 bscscan.com
- transaction bscscan.com transaction 0x95bf…a848 bscscan.com
- transaction bscscan.com transaction 0xf349…f0a0 bscscan.com
- address BscScan verified source for 0xbdeb6D82aB45c3d61d7ec5F7cF090EC63Df3577C bscscan.com
- address bscscan.com address 0x53ac…287f bscscan.com
- address bscscan.com address 0x8e0f…12bb bscscan.com
- address bscscan.com address 0xbdeb…577C bscscan.com
- address bscscan.com address 0xc37f…7f03 bscscan.com
- address bscscan.com address 0xf084…7fc2 bscscan.com
- analysis Sourcify exact match for 0xbdeb6D82aB45c3d61d7ec5F7cF090EC63Df3577C repo.sourcify.dev
- analysis De.Fi REKT database listing for AI (exit scam/rugpull, 2022-08-08) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.