Normal behavior:
Users should be able to cancel participation before the event starts, but the contract should deduct any participation fee already charged.
Specific issue:
In cancelParticipation():
The refund ignores the participation fee that was transferred to participationFeeAddress during deposit().
Users can effectively bypass fees, leading to fee loss for the event organizers.
No check prevents double cancel if called repeatedly, though _burn() partially mitigates this.
Likelihood:
This occurs whenever a user deposits and cancels before eventStartDate, since the refund ignores the fee.
This occurs if a user deposits and then immediately cancels, or exploits multiple deposit-cancel cycles.
Impact:
Loss of intended participation fee revenue.
Could incentivize users to deposit and immediately cancel multiple times to game rewards vs. fees.
Explanation:
The user receives full staked amount, even though a portion should have been charged as participation fee.
Repeating this process could circumvent fee collection entirely.
Brief explanation:
Deduct the participation fee from the refund in cancelParticipation().
Ensure refund is only the staked portion:
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.