Gladiator Rug Pull
What happened
Gladiator (GLA) is an Ethereum token at 0xe9c28e4f…696d47, deployed on 11 August 2023 by 0xfD98A561…B2F5fE, which received all 14,666,000,000 GLA. Its Ownable constructor sets the owner to the zero address, so the token looks renounced from the first block, but a hidden control does not depend on the owner: a king_ address fixed at deployment can call a function named Approve (capital A) to give any address a threshold, and every transfer from that address must then be larger than the threshold. Set at or above a wallet's balance, the threshold blocks that wallet from selling; set on the pool, it blocks every buy.
The loss itself came from the liquidity: on 14 August 2023 the deployer withdrew its Uniswap V3 position, taking 132.92 WETH and about 5.21 billion GLA out of the pool in transaction 0x8cee548d…9eda87. De.Fi's Artem reported the deployer removed about 139.2 ETH ($257K) from a pool first supplied with 38 ETH, and the existing record lists 0xa88a470f…4a5032 as the funds holder as of that day.
How it happened
- The constructor mints the whole supply to the deployer and stores
_leonidas.push(Shield(king_, 300)), fixing a hidden privileged address.Ownable's constructor runs_setOwner(address(0)), soowner()returns zero from deployment. Approve(address account, uint256 amount)is public. When the caller is_leonidas[0].cross(theking_),_warriorsets_sparta[account].spear = totalwithtotalequal toamount; for any other caller it adds zero and changes nothing. It emits an ordinary-lookingApprovalevent.- Every transfer runs
require(amount - roman(sender) > 0, "roman"), whereromanreturns the sender'sspear. With Solidity 0.8 checked arithmetic, an amount below the threshold reverts on underflow, an equal amount fails the check, and only larger amounts pass. - A threshold at or above a holder's balance therefore blocks that holder's every transfer, including sales, since the pool pulls tokens from the seller. A threshold on the pool address makes the pool's transfers to buyers fail.
- What happened: in transaction 0x8cee548d…9eda87 (14 August 2023, 02:14:47 UTC) the deployer called
multicallon the Uniswap V3 Positions NFT contract and received 132.92 WETH, unwrapped to ETH, and about 5.21 billion GLA from the pool.
Protocol details
Evidence
- report @artemDeDotFi incident report twitter.com
- report Artem (De.Fi): ~$257,000 Rug Pull, $GLA twitter.com
- transaction Gladiator contract creation transaction etherscan.io
- transaction Etherscan transaction 0x8cee548d...da87 (Uniswap V3 liquidity removal) etherscan.io
- address Gladiator (GLA) verified contract code on Etherscan etherscan.io
- address etherscan.io address 0xa88a…5032 etherscan.io
- address etherscan.io address 0xfD98…F5fE etherscan.io
- analysis Sourcify exact match for 0xe9c28e4f233d3c64e2274e75701952ef35696d47 on Ethereum repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.