The contract partially follows OpenZeppelin
’s upgradeable pattern by inheriting from OwnableUpgradeable
and PausableUpgradeable
, but it does not adopt the UUPS or transparent proxy pattern.
Problem description
The contract mixes upgradeability patterns by inheriting from OwnableUpgradeable
and PausableUpgradeable
, which are designed for OpenZeppelin
’s upgradeable contracts, but the contract itself does not inherit the UUPS or transparent proxy pattern from OpenZeppelin
. This hybrid approach creates uncertainty about whether the contract is meant to be immutable or upgradeable.
If it is a proxy contract, then avoid using the upgradeable module. If it is an upgradeable proxy, it should inherit the UUPS or Transparent proxy module.
Manual Review
Use OpenZeppelin’s upgradeable proxy pattern if it is an upgradeable proxy contract
Remove the constructor and ensure initialization happens through initialize
.
Ensure the contract is deployed via an upgradeable proxy.
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.