The hook tracks anti-bot limits and cooldowns using the sender parameter from PoolManager.swap(). In Uniswap V4, this sender is the contract that initiates the swap call to the PoolManager (typically UniversalRouter or SwapRouter), not the actual end user. This causes tracking to aggregate at the router level rather than per-user, effectively collapsing the entire user base into a single shared quota.
Likelihood:
High - All standard trades route through UniversalRouter or similar contracts. The protocol is designed for public launch where users interact via standard interfaces, guaranteeing this vulnerability triggers on every transaction.
Impact:
Critical - Global quota exhaustion:
First N trades consume the shared 1% (Phase 1) or 3% (Phase 2) limit
All subsequent users hit the limit immediately and face penalties (50% Phase 1, 20% Phase 2)
Cooldown tracking is also global: if the router swaps in block X, ALL users must wait N blocks before penalty-free trading resumes
Legitimate users who haven't traded yet inherit the "sin" of previous traders through the router address
Demonstrates that two distinct users swapping via the standard router share the same tracking state, causing the second user to be penalized based on the first user's activity.
Pass the actual user address through hookData (standard V4 pattern for passing trader context through routers) instead of relying on the sender parameter which represents the router contract.
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.