During phase changes, the hook attempts to “reset per-address tracking” but only writes to mapping slots for address(0). This does not affect any real user/router entries, so addressSwappedAmount[sender] and addressLastSwapBlock[sender] persist across phases. Consequently, phase 2 does not start fresh for existing participants; it inherits phase 1 accumulated usage and cooldown status.
Likelihood:
Phase transitions occur deterministically as blocks progress from launch start, so _resetPerAddressTracking() is executed on the first swap in the new phase.
Impact:
Phase 2 “relaxed limits” are not actually applied to existing participants; they may immediately trigger penalties or appear to have no remaining limit.
You can’t iterate mappings, so you need lazy reset keyed by phase.
One robust pattern: store the last phase seen by each sender and reset their counters when they first swap in a new phase.
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.