The contract allows you to bypass the deposit() or receive() functions and still become a participant by using the changeParticipationStatus() function only.
The user can use the changeParticipationStatus() function to become a participant without having to deposit money using the deposit() or receive() function.
See function testParticipantWithoutDeposit() in the foundry test below:
There are two ways to solve this problem:
Prevent from changing status for non-participant users. Only participants can use changeParticipationStatus() function.
Before changing the status, check whether the user has already made a donation (by analyzing the balances and etherBalance variables)
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.