The hook tracks the sender parameter which is the router contract address, not the actual end user. This means all users share the same limits and cooldowns.
Location: src/TokenLaunchHook.sol:125-172
In Uniswap V4's architecture:
User calls Router contract (e.g., PoolSwapTest.swap())
Router calls PoolManager.unlock()
In callback, Router calls PoolManager.swap()
sender in hook = Router address
Likelihood:
Every swap through the standard Uniswap V4 router triggers this behavior
100% of swaps will track the router address, not the actual user
This is the default and only code path for swap tracking
Impact:
All users share the same swap limit (whoever hits limit first blocks everyone)
All users share the same cooldown (one swap triggers cooldown for all)
Anti-bot protection is completely ineffective
Legitimate users penalized by other users' activity
A single bot can trigger penalties for all subsequent legitimate users
The test file confirms this behavior at line 300:
Test demonstrating shared limits:
Uniswap Recommended - Trusted Router with msgSender() interface:
Per Uniswap V4 documentation, the recommended approach is to maintain a list of trusted routers that implement a msgSender() view function.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.