The UUPSUpgradeable contract does not include a reserved storage gap (__gap), which is critical for ensuring upgradeable contract safety. This omission can lead to storage collisions when new variables are added in future implementations, potentially overwriting existing storage and introducing unexpected behavior.
Without a reserved storage gap, any newly added state variables in upgraded implementations may overlap with storage slots used by the inherited contracts. This can corrupt contract state, break logic, or introduce vulnerabilities that are hard to detect.
Add a fixed-size storage gap at the end of the contract, as recommended by OpenZeppelin's UUPSUpgradeable pattern. For example:
This allows for future upgrades without risking storage conflicts.
Manual Review
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.