The nonReentrant modifier is not applied as the first modifier in some functions. While this does not currently impact the contract's security, it is considered best practice to place nonReentrant as the first modifier to reduce the risk of future vulnerabilities.
In the following functions:
The nonReentrant modifier is placed after other modifiers (gameNotEnded, onlyOwner). Although these modifiers currently do not introduce any external calls or reentrant risks, placing nonReentrant first is the recommended ordering.
This is because any logic or external interaction in earlier modifiers could potentially be exploited in the event of changes or future extensions to the contract.
There is no current impact in the contract, as the preceding modifiers are safe and do not make external calls. However, this is flagged as a best practice issue to promote consistency, clarity, and future safety in the codebase.
Reorder the nonReentrant modifier to be the first modifier in all functions where it's used.
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.