_resetPerAddressTracking() function only resets tracking data for address(0) instead of all user addresses. This renders the entire phase-based protection mechanism ineffective, as swap limits and cooldowns persist across phase boundaries.Likelihood: High
Reason 1: Phase transitions occur deterministically based on block height (phase1Duration + phase2Duration), guaranteeing this bug triggers during every token launch lifecycle.
Reason 2: The flawed reset logic executes automatically during every phase transition via _beforeSwap(), requiring no special conditions or attacker interaction.
Impact: Critical
Impact 1: Attackers can exhaust Phase 1 swap limits (e.g., 5% of liquidity), then immediately continue swapping at full capacity in Phase 2 without cooldown—completely bypassing the intended protection.
Impact 2: The hook provides a false sense of security to projects deploying it, as its core anti-bot functionality is fundamentally broken while appearing operational to users and monitoring tools.
The implementation mistakenly assumes resetting address(0) clears the entire mapping. In Solidity, mappings cannot be iterated or bulk-reset—each key must be reset individually. Since user addresses are unknown at phase transition time, this approach is fundamentally unworkable.
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.