The same contestId param can be assigned for different contests, causing off-chain services to malfunction.
The contestId param is supposed to be globally unique, randomly generated off-chain (confirmed by the developer). However, when an owner executes the ProxyFactory::setContest() to register a contest, the function does not check the double spending of the given contestId param.
In other words, it is possible to use the same contestId for different contests under different organizers. Moreover, the same contestId can even be used for different contests under the same organizer if the Implementation contract is upgraded.
The setContest(): https://github.com/Cyfrin/2023-08-sparkn/blob/0f139b2dc53905700dd29a01451b330f829653e9/src/ProxyFactory.sol#L105-L117
The _calculateSalt(): https://github.com/Cyfrin/2023-08-sparkn/blob/0f139b2dc53905700dd29a01451b330f829653e9/src/ProxyFactory.sol#L260-L266
The double spending of the contestId param can cause off-chain services to malfunction.
Manual Review
Use the mapping variable to track and verify all spent contestId(s) in the setContest().
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.