GHOSTP2E Rug Pull
What happened
GHOSTP2E (GHR) is a BEP20 token on BNB Smart Chain (contract 0x34CB0f01…FCcDdB, deployed 2022-03-11) whose project held a fundraising event on the PinkSale launchpad (0x9F4A2B74…b32E8F). De.Fi's REKT database lists it as an exit scam / rug pull of 346,253 USD: the deposited funds were withdrawn (transaction 0x68bae233…4403b7), and the funds were deposited into the Tornado Cash mixer (address 0x7fcf92dd…934f90). A PeckShield alert on 2022-04-01 says about 730 BNB went into Tornado Cash from the ghostP2E project and that the project had already deleted its social accounts and groups.
The loss as described is the withdrawal of presale funds, which is not performed by the token contract. The verified token code does give the owner sell-blocking controls: an owner-only blacklist, a trading switch that is off until openTrade, and fee setters with no cap. The sources do not show whether any of them was used.
How it happened
, per the De.Fi listing and PeckShield alert:
- The project ran a PinkSale presale for GHR (launchpad 0x9F4A2B74…b32E8F).
- The deposited funds were withdrawn (0x68bae233…4403b7).
- About 730 BNB was sent into Tornado Cash according to PeckShield, and the project deleted its social accounts and groups; De.Fi records the mixer deposit from 0x7fcf92dd…934f90.
What the token code allows the owner to do:
- Block all trading.
isTradingEnabledstarts asfalseand_transferrequiresrequire(isTradingEnabled || _to == owner() || _from == owner(), "Trading is disabled");, so only the owner can move tokens untilopenTrade()is called. - Freeze individual wallets.
blacklistAddress(address account, bool value) public onlyOwnersets_isBlacklisted, and_transferreverts if the sender or receiver is listed (require(!_isBlacklisted[_from] && !_isBlacklisted[_to], "Blacklisted address")). Because the check is on the sender and receiver of each transfer, a listed holder cannot sell, and listing the pair address as receiver would stop all sells. - Raise the fees without limit.
setSellFeeandsetBuyFeehave no cap. Fees are taken after the sender is debited in full (_balances[_from] = senderBalance - _amount;) and credited torewardAddress, so a sell fee of 100 sends the whole sale to the reward address and a value above 100 makes every sell revert on_amount.sub(fees). The constructor values areBuyFee = 1andSellFee = 2. - Ownership is not renounced in the 2026-09-30 on-chain read: the owner is still the deployer 0x7af89044…0c656b. The code has no mint function.
Protocol details
Evidence
- report PeckShield Alert rug pull alert on ghostP2E twitter.com
- transaction bscscan.com transaction 0x68ba…03b7 bscscan.com
- address BscScan verified source, GHOST 0x34CB0f01489ED5D0a55f0f6D5155efC137FCcDdB bscscan.com
- address bscscan.com address 0x7fcf…4f90 bscscan.com
- analysis www.pinksale.finance page 0x9F4A…2E8F pinksale.finance
- analysis Web Archive web.archive.org
- analysis Sourcify repository copy of the same contract repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.