Root Cause: The _resetPerAddressTracking function only resets the mapping value for address(0) instead of clearing data for all users.
Impact: Transaction volume accumulated by users in Phase 1 carries over into Phase 2, causing users to be close to or already exceed limits at the start of the new phase.
Expected behavior: When the protocol switches from Phase 1 to Phase 2, each user's transaction tracking data (cumulative traded volume, last transaction block) should be reset so users have fresh limits in the new phase.
Specific issue: The implementation of _resetPerAddressTracking is completely wrong — it only clears the data for address(0)
Likelihood:
This function is called on every phase transition
Triggered inevitably when switching Phase 1 → Phase 2 and Phase 2 → Phase 3
Impact:
A user's trading volume in Phase 1 is counted toward Phase 2's limit
Users may be flagged as over the limit at the start of Phase 2
This goes against the intended design of phased resets
Because Solidity cannot directly clear a mapping, it is recommended to use a phase/epoch flagging mechanism:
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.