PAPABEAR Rug Pull
What happened
PAPABEAR (PAPA) is a BEP20 token on BNB Chain whose verified contract 0x90F06678…2e76f8 stores no balances of its own. balanceOf and every transfer are delegated to a separate Accounting contract whose address the owner sets with setAccountingAddress, and that contract's code is not part of the verified source. De.Fi's REKT database lists the incident as a rug pull on 23 November 2023: the deployer 0x1B567913…A748c4 removed liquidity worth 235,249 USD from the PancakeSwap pool, for a listed loss of 120,648 USD (510.4 WBNB), which was moved to another EOA and then split across several addresses.
PeckShield's alert instead describes the deployer swapping an amount of PAPA far above the contract's 1,000,000-token supply for 995.21 WBNB (about $235K). Liquidity adding transaction: 0xd61ab6ca…930770; liquidity removal transaction: 0x741e51f9…1301d6.
How it happened
- The constructor sets the supply and stores no balances:
_totalSupply = 1000000 * 10 ** 9; emit Transfer(address(0), msg.sender, _totalSupply);. Balances are read from a separate contract:return Accounting(accounting).balanceOf(who);. - Every transfer is handed to that external contract, with the
Transferevent emitted first:emit Transfer(msg.sender, to, amount); return Accounting(accounting).doTransfer(msg.sender, msg.sender, to, amount);.transferFromdoes the same after reducing the allowance. - Only the owner chooses that contract:
function setAccountingAddress(address accountingAddress) public { require(msg.sender == owner); accounting = accountingAddress; }. Whoever controls the chosen contract controls what every holder and the pair sees as their balance and whether any transfer succeeds, and the verified source does not show that logic.renounceOwnershipexists, and a latest-block read on 2026-09-30 returned the zero address as owner; when it was renounced, and what the accounting contract does, is not established here. - What was reported: PeckShield's alert says the deployer address swapped 100,100,100,100,100,100,100.1001 PAPA for 995.21 WBNB (about $235K), a quantity far above the 1,000,000 PAPA the contract reports as total supply. De.Fi lists the loss as a liquidity removal with 510.4 WBNB (120,648 USD) sent to another EOA and then distributed. The two accounts of the mechanism differ, and no transaction was opened to settle it.
Protocol details
Evidence
- report PeckShield Alert post on PAPABEAR $PAPA twitter.com
- transaction bscscan.com transaction 0x741e…01d6 bscscan.com
- transaction bscscan.com transaction 0xd61a…0770 bscscan.com
- address BscScan verified source: PAPABEAR (0x90F06678589c5A5Ca2BC7424506A393baA2e76f8) bscscan.com
- address bscscan.com address 0x1B56…48c4 bscscan.com
- analysis Sourcify repository: PAPABEAR (chain 56) repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.