Normal behavior: When the contract advances launch phases the hook should clear per-address swap tracking so each address starts fresh for the new phase (so limits and cooldowns are applied per-phase).
Specific issue: The reset helper writes to address(0) (or otherwise does not clear the intended address), so per-address counters are not cleared when the phase changes — existing swap history remains associated with user addresses and may cause incorrect penalties or limits to be applied.
Likelihood:
Phase rollovers during launch call _resetPerAddressTracking(); this occurs when the contract transitions between phase 1/2/3 during normal launch progression.
Any user who swapped prior to the phase change will still have recorded swap amounts / last-swap blocks after the rollover, so the incorrect state is observed on their next swap.
Impact:
Legitimate users receive incorrect penalties (dynamic fee overrides) or are blocked from swapping because historical amounts/cooldowns were not cleared.
Unexpected fee collection, UX breakage, or denial-of-service of trading for affected users during critical launch windows.
and update the caller site to pass the affected address:
Notes:
If the intent is to clear all addresses at once, replace per-address clearing with a versioning approach (increment a phaseVersion and treat address data with mismatched versions as cleared) to avoid iterating/zeroing mappings on-chain.
Validate that any callers pass the correct sender and that view helpers consult the same versioning or clearing logic so UX and on-chain checks remain consistent.
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.