The contest may be set with a non-existing implementation contract.
The contests are created with a call to setContest(...) function with provided implementation address. From this address, and salt, Sponsors can compute the Proxy contract address (already deployed or not yet) and transfer ERC20 tokens to that address. However, the implementation argument is not checked if it is a deployed contract during the registration of a contest. The caller may mistakenly provide an incorrect implementation address. This may result in Sponsors sending tokens to the Proxy contract address from which the tokens could not be retrieved. Moreover, the delegated calls from Proxy to the incorrect implementation address would silently fail without returning an error, making the issue even harder to detect.
Funds may be unrecoverably lost due to registering a contest with an incorrect implementation address and sending tokens to an invalid Proxy address.
Manual review
Consider checking, in the function setContest(...), if under the implementation address there is a deployed code. Additionally consider checking code size during a delegated call in a Proxy contract, as a best practice.
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.