All user‑facing actions around the event window should use a consistent boundary rule. If “the event starts at eventStartDate” means “no more deposits or joins at that exact timestamp,” then all functions should enforce the same block.timestamp >= eventStartDate check (or the chosen inclusive/exclusive convention), so users cannot join after deposits are closed.
The time check in joinEvent() uses a strict greater‑than (>) comparison, while deposit() and cancelParticipation() use greater‑than‑or‑equal (>=). As a result, joining is still allowed exactly at eventStartDate, but deposits and cancellations are blocked at the same boundary. This off‑by‑one inconsistency enables users to join right at the start (when they should be locked out), creating unfair edge cases and potentially breaking accounting if any last‑moment state changes happen.
Likelihood: Low
At the exact eventStartDate timestamp, UIs and users frequently submit final transactions. Because deposit() and cancelParticipation() revert, users may retry with joinEvent(), which succeeds due to the > check. This will happen naturally at the boundary.
Automation / bots can front‑run the boundary to slip in a joinEvent() at eventStartDate while deposits are blocked, taking advantage of the inconsistency.
Impact: Low
Policy violation / unfair participation: Participants can change or set their country at the start boundary when deposits and cancellations are already disallowed, violating the intended freeze of choices at event start.
Accounting skew: Late joins at the boundary can alter usersAddress, userSharesToCountry, and totals used for winner calculation, creating mismatches with deposit/cancel rules and potentially skewing payouts.
joinEvent() is allowed at eventStartDate, while deposit() and cancelParticipation() are rejected at the same boundary.
Adopt one consistent boundary convention. If “no actions at the start time” is desired, change joinEvent() to use >= and (optionally) centralize the rule in a modifier.
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.