> Root cause:
The constructor does not verify that _eventEndDate is greater than _eventStartDate.
This allows the deployer to set an invalid event window.
Impact:
Because of the missing validation, all time-based checks (eventNotEnded, eventNotStarted) can permanently revert.
The vault can never reach the “ended” state, freezing all deposited funds.
The contract should enforce a logical timeline where the event starts at eventStartDate and ends at eventEndDate. This validation ensures that the event can progress through its intended phases — deposits, participation, and finalization — without getting stuck due to incorrect or reversed timestamps.
The constructor does not include a check to ensure that eventEndDate is greater than eventStartDate. As a result, the deployer can accidentally configure the event with invalid or equal timestamps, causing all time-based conditions to fail and preventing the event from ever reaching its end state, thereby freezing the vault and locking user funds indefinitely.
Likelihood:
High —
1. Deployer misconfiguration of start and end dates is plausible, especially when parameters are manually set during deployment.
2. The constructor contains no chronological safeguards, making invalid configurations silently accepted and immediately effective.
Impact --
High —
1. All user funds can become permanently locked in the vault because the event can never reach its end state, preventing setWinner() and withdrawals from executing.
2. Core event functions that rely on time progression (finalization, reward distribution, refunds) remain inaccessible, effectively freezing the entire protocol and breaking user trust.
This is owner action and the owner is assumed to be trusted and to provide correct input arguments.
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.