Block Chain Games Rug Pull
What happened
Block Chain Games (BCGA) on BNB Chain is deployed behind a proxy whose owner can replace the logic contract at any time. The verified source holds only the proxy: all token logic, including balances and any mint function, lives in whichever contract implementation points to, and the owner alone controls that pointer with no delay or cap. This gives the owner unrestricted power over the token's behaviour.
Beosin Alert reported on 2023-03-13 that the owner 0x44f2526b…cf8acb called a privileged function with selector 0x25bbb5ae to mint a large amount of BCGA and then swapped it for 128.45 BNB (about 39,092 USD at the time). De.Fi's REKT database lists the loss as 39,686 USD and the minted amount as 10,000,000,000,000,000,000 BCGA; it says the proceeds were moved to another externally owned address and then distributed to several addresses. It lists the malicious transaction as 0x59367a10…04355c and the draining transaction as 0x13e1bc8b…ad3647.
How it happened
What the code allows:
- The deployed contract is a proxy.
address public implementation;stores the logic address, andfallback() external payable virtual { _fallback(); }forwards every call that is not defined in the proxy throughdelegatecall(gas(), implementation_, 0, calldatasize(), 0, 0). Balances, transfers and minting therefore run in the implementation, which is not part of the verified source. - The owner controls the logic:
function setImplementation(address __implementation) public onlyOwner { implementation = __implementation; }. There is no timelock, multisig or cap, so the owner can point the token at logic that includes a mint or any other privileged function. onlyOwnerchecksrequire(owner() == msg.sender, "Ownable: caller is not the owner"), andowner()on-chain is the deployer's address, so one key holds this power.renounceOwnership()exists but the on-chain read in meta.json shows an owner still set.
What was reported to have happened:
- Beosin Alert says the owner called a privileged function with selector 0x25bbb5ae to mint a large amount of BCGA.
- The same alert says the minted tokens were immediately swapped for 128.45 BNB (about 39,092 USD), and De.Fi lists the loss as 39,686 USD and the minted amount as 10,000,000,000,000,000,000 BCGA. The mint function's source is in the unseen implementation, so the code evidence shown here proves the owner's ability to supply such logic, not the exact mint code.
Protocol details
Evidence
- report @BeosinAlert incident report twitter.com
- report BlockChainGames proxy contract source on Sourcify repo.sourcify.dev
- report Beosin Alert post on BCGA rug pull, 2023-03-13 twitter.com
- transaction bscscan.com transaction 0x13e1…3647 bscscan.com
- transaction bscscan.com transaction 0x5936…355c bscscan.com
- address BlockChainGames proxy contract source on BscScan (verified code) bscscan.com
- address bscscan.com address 0x44f2…8acb bscscan.com
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.