Normal behavior:
Users should only be able to deposit before the tournament starts, and deposits made after the event starts should be rejected.
Specific issue:
The deposit() function checks the timestamp only against eventStartDate:
The timestamp comparison uses >= with eventStartDate.
However, there is no check against eventEndDate or any other mechanism to enforce strict deposit windows.
Coupled with a potential misconfiguration of eventStartDate or front-running, users could still deposit near the start time and manipulate participation.
Likelihood:
This occurs whenever a user deposits at or after the exact eventStartDate, due to inclusive >= check.
This occurs if eventStartDate is misconfigured (too close to deployment or current timestamp), allowing late deposits to bypass intended restrictions.
Impact:
Users depositing late may gain unfair advantage by joining with knowledge of early deposits.
Could distort totalParticipantShares and reward calculations.
Could allow fraudulent or accidental deposits after the event effectively started.
Explanation:
If the attack is timed correctly, the user deposits after the event effectively begins, which may give unfair allocation of shares relative to others.
Brief explanation:
Enforce a strict deposit window using both eventStartDate and eventEndDate.
Consider including a modifier or require statement:
Ensure front-end validations match the on-chain checks.
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.