Each user should appear once per event/team and contribute their shares exactly once, ensuring fair reward and accurate participant tracking.
usersAddress.push(msg.sender) runs every time without uniqueness checks, creating duplicate entries.
userSharesToCountry[msg.sender][countryId] overwrites instead of accumulating, causing lost or inconsistent balances.
numberOfParticipants++ inflates the count even for the same user
Users can appear multiple times in usersAddress, causing double or multiple payouts if rewards or distributions iterate over this array.
numberOfParticipants and totalParticipantShares are inflated, leading to incorrect accounting, misleading metrics, or unfair distribution of funds.
userSharesToCountry overwrites previous entries, losing old data and creating inconsistent state between user balances and total shares.
Reason 1: Each call to the join function executes usersAddress.push(msg.sender) unconditionally. Any user calling this twice will have multiple entries in the array.
Reason 2: Each call increments numberOfParticipants and totalParticipantShares, causing inflated totals and inconsistent bookkeeping even without malicious intent.
Impact 1: Loops that distribute rewards based on usersAddress will process the same user multiple times → double or multiple payouts.
Impact 2: numberOfParticipants and totalParticipantShares will no longer reflect real values, breaking per-user reward ratios and misleading metrics
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.