Sport Move Rug Pull
What happened
Sport Move (SPORT) is a BEP20 token on BNB Smart Chain whose owner can change the sell tax to as much as 99%, blacklist any sender, lengthen a per-wallet sell cooldown and redirect all tax revenue to any address. Ownership is not renounced: an eth_call on 2026-09-30 still returns the deployer 0x0d7fffe6…Fc4176 as owner. De.Fi's REKT database lists the project as an exit scam and says Sport Move confirmed it was running away, SPORT fell by more than 61%, the project froze and deleted its social accounts about 10 hours after launch, and 507 BNB was moved out of the marketing pool and laundered through Tornado Cash. The token code does not itself move BNB; the listed transfers were made from the marketing pool wallet.
Token contract: 0x25443319…AFd300
Marketing pool (contract constant): 0x2f422C25…517bd6 (the listing prints it as 0x2f422C25aA425ECE9f0e0E85baA149d586517bd)
From the marketing pool address a total of 507 BNB was transferred, per the listing:
- 0x7b31b900…52cb63
- 0x2cee84aa…6055b8
- 0xbd0d9408…01bd2c
- 0xa8dd9031…5c3269
- 0x91e9ef13…c90d00
- 0x17ea545e…62dbaa
The listing then traces the funds through Tornado Cash:
- 0xf4e796BB…18cae1, transaction 0xc8701ebb…4289c5 for 100 BNB
- 0xeC70A137…e6B867, transaction 0xcb2909c9…2b5dcf for 100 BNB
- 0x3d0bC563…BF0c15, transaction 0x533c6151…4f88b2 for 100 BNB
- 0x9B64930e…4C40bF, transactions 0xd97ee4af…cf7476 and 0xc49bc29c…0f436b for 100 BNB each
- 0xFD679488…eC5DfA, seven transactions for 1 BNB each: 0xb3a30166…a45d08, 0xdae7a2bb…d71dd5, 0x87cec42b…678ada, 0x35b7e293…9aae89, 0x9bd8dafe…3570c8, 0x173db020…c79af2 and 0x434fd339…9a76d4
How it happened
What the code allows:
- Taxes are set by the owner with almost no limit:
function setTaxes(uint8 _sellTax, uint8 _buyTax, uint8 _transferTax) external onlyOwner { require(_sellTax < 100); .... The constructor starts withsellTax = 3;but the setter accepts any value up to 99, with no delay. - The tax is taken out of the seller's amount and sent to the marketing pool. For a sell into a registered liquidity pool the code computes
taxAmount = (amount * sellTax) / 100;and then runssuper._transfer(sender, marketingPool, taxAmount);followed bysuper._transfer(sender, receiver, amount - taxAmount);. The seller's balance is debited the fullamount; at a 99% sell tax the pool receives 1% of it and the marketing pool receives 99%. - The recipient of that tax is also owner-controlled:
function setMarketingPool(address _marketingPool) external onlyOwner. The constructor hard-codesmarketingPool = 0x2f422C25aA425ECE9f0e0E85baA149d586517bd6;. - The owner can block any sender:
function setBlacklist(address _wallet, bool _status) external onlyOwnercombined withrequire(!isBlacklist[sender],"User blacklisted");at the top of_transfer. Heresenderis thefromaddress of the transfer, so blacklisting a holder blocks that holder's sells, and blacklisting the pair would block buys. - Sells are also rate-limited per wallet:
require(lastTrade[sender] < (block.timestamp - tradeCooldown), string("No consecutive sells allowed. Please wait."));. The constructor setstradeCooldown = 40;andsetCooldownForTrades(uint8 _tradeCooldown)lets the owner change it (up to 255 seconds because of theuint8type). setLiquidityPoolStatusdecides which addresses are treated as pools, so the buy and sell rules only apply to addresses the owner registers.- Ownership is not renounced:
renounceOwnershipexists, but an eth_call on 2026-09-30 still returns the deployer as owner. There is no mint after the constructor;_mintis only called once with50000000 * 10**uint256(decimals()).
, per De.Fi's listing:
- The project announced it was running away,
SPORTfell by more than 61%, and the social accounts were frozen and deleted about 10 hours after launch. - A total of 507 BNB was transferred from the marketing pool address in six transactions and laundered through Tornado Cash, in transfers of 100 BNB and 1 BNB sent from the intermediate addresses listed in the description.
- No opened source shows the owner calling
setTaxes,setBlacklist,setCooldownForTradesorsetMarketingPool, so whether any of these controls was used is not established, and the source of the 507 BNB in the marketing pool is not shown.
Protocol details
Evidence
- report Sport Move (@sportmove_) X profile twitter.com
- report Sport Move (SportMove) verified source (Sourcify) repo.sourcify.dev
- transaction bscscan.com transaction 0x173d…9af2 bscscan.com
- transaction bscscan.com transaction 0x17ea…dbaa bscscan.com
- transaction bscscan.com transaction 0x2cee…55b8 bscscan.com
- transaction bscscan.com transaction 0x35b7…ae89 bscscan.com
- transaction bscscan.com transaction 0x434f…76d4 bscscan.com
- transaction bscscan.com transaction 0x533c…88b2 bscscan.com
- transaction bscscan.com transaction 0x7b31…cb63 bscscan.com
- transaction bscscan.com transaction 0x87ce…8ada bscscan.com
- transaction bscscan.com transaction 0x91e9…0d00 bscscan.com
- transaction bscscan.com transaction 0x9bd8…70c8 bscscan.com
- transaction bscscan.com transaction 0xa8dd…3269 bscscan.com
- transaction bscscan.com transaction 0xb3a3…5d08 bscscan.com
- transaction bscscan.com transaction 0xbd0d…bd2c bscscan.com
- transaction bscscan.com transaction 0xc49b…436b bscscan.com
- transaction bscscan.com transaction 0xc870…89c5 bscscan.com
- transaction bscscan.com transaction 0xcb29…5dcf bscscan.com
- transaction bscscan.com transaction 0xd97e…7476 bscscan.com
- transaction bscscan.com transaction 0xdae7…1dd5 bscscan.com
- address Sport Move (SportMove) verified source (BscScan) bscscan.com
- address bscscan.com address 0x2544…d300 bscscan.com
- address bscscan.com address 0x2f42…17bd bscscan.com
- address bscscan.com address 0x3d0b…0c15 bscscan.com
- address bscscan.com address 0x9B64…40bF bscscan.com
- address bscscan.com address 0xFD67…5DfA bscscan.com
- address bscscan.com address 0xeC70…B867 bscscan.com
- address bscscan.com address 0xf4e7…cae1 bscscan.com
- analysis Web Archive web.archive.org
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.