Phase determination should be derived deterministically from launchStartBlock and block number.
The contract stores currentPhase in state while also recomputing phase dynamically. This introduces the risk of phase drift if state updates fail or are skipped, increasing audit and reasoning complexity.
Likelihood:
Occurs during phase transitions
Becomes more likely as logic complexity increases
Impact:
Inconsistent phase reporting
Harder to reason about protocol behavior
Phase is recomputed via getCurrentPhase()
Stored currentPhase differs due to missed update
View functions and swap logic diverge
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.