Normal Behavior: The protocol implements a phased launch where swap limits and cooldowns are intended to be reset when transitioning to a new phase (e.g., Phase 1 to Phase 2). This ensures users can trade against the new, relaxed limits of the incoming phase.
Specific Issue: The _resetPerAddressTracking() function, which is called during a phase update, only clears the storage for address(0). Since EVM mappings are not iterable, data for all actual users remains in storage, meaning their Phase 1 activity persists into Phase 2.
Likelihood:
Logical Failure: The state management is fundamentally broken for any protocol attempting a multi-phased state transition while relying on non-iterable mappings.
Certainty: This occurs every time a launch moves from Phase 1 to Phase 2.
Impact:
Persistent Penalization: A user who traded up to their limit in Phase 1 will enter Phase 2 already "over the limit" because their Phase 1 usage was never cleared.
Broken Phase Logic: The "relaxed limits" (e.g., 5% in Phase 2 vs 1% in Phase 1) are undermined because the user starts Phase 2 with 1% already filled, rather than at zero.
This test confirms that the _resetPerAddressTracking function fails to clear state. We compare the user's recorded usage before and after a phase transition roll. The fact that usageP2 is greater than usageP1 after a "reset" proves the vulnerability.
Since it is impossible to iterate through and clear a mapping, the recommended pattern is to make the limit tracking phase-specific by adding the phase number to the mapping key.
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.