Normal behavior:
Each user should join once per event, and their shares for a selected team should reflect their deposit.
Specific issue:
The joinEvent() function allows a user to call it multiple times, each time overwriting userToCountry and adding their shares again to userSharesToCountry and totalParticipantShares:
Likelihood:
This occurs whenever a user calls joinEvent() multiple times before the event starts.
This occurs because there is no check preventing duplicate entries in usersAddress or multiple selections for userSharesToCountry.
Impact:
Users can artificially inflate totalParticipantShares, reducing payouts to genuine winners.
Users could game the system to increase the denominator in _getWinnerShares() calculations, stealing or diluting rewards.
Explanation:
Repeated calls increase totalParticipantShares without increasing actual deposits, diluting rewards for honest participants.
Brief explanation:
Add a check to ensure a user can only join once per event.
Use a mapping to track participation status instead of pushing addresses blindly to usersAddress.
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.