Normal Behavior: When the protocol transitions between phases (Phase 1 → Phase 2), the _resetPerAddressTracking() function should reset ALL users' swap tracking, giving everyone fresh limits based on the new phase's relaxed parameters.
The Bug: The _resetPerAddressTracking() function only resets address(0), which is never used as a swap sender. Real users' tracking persists across phase transitions.
Likelihood: HIGH
This occurs on EVERY phase transition (Phase 1 → Phase 2 and Phase 2 → Phase 3)
Any user who swapped in Phase 1 will be affected when Phase 2 begins
The function is called automatically when newPhase != currentPhase (line 147)
Impact: HIGH
Users who hit their Phase 1 limit (1% of liquidity) remain penalized in Phase 2
Phase 2's "relaxed limits" (5% of liquidity) never take effect for returning users
Users pay penalty fees (up to 10%) when they shouldn't
The fair launch mechanism is completely broken
Direct financial loss for affected users
Implement an epoch-based tracking system:
This achieves O(1) reset by incrementing the epoch counter, automatically invalidating all prior tracking while maintaining gas efficiency.
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.