The graduateAndUpgrade
function incorrectly attempts to authorize an upgrade by calling _authorizeUpgrade(_levelTwo)
manually. However, in the UUPSUpgradeable pattern, _authorizeUpgrade
is an internal function meant to be overridden to control access. It is automatically called by OpenZeppelin's internal _upgradeTo()
or _upgradeToAndCall()
functions, not intended to be called directly. As a result, the contract fails to perform the actual upgrade, and the new implementation is not activated.
_authorizeUpgrade(_levelTwo)
is called directly, which does nothing to change the proxy's implementation.
The actual upgrade to _levelTwo
does not occur.
Misleads users into thinking an upgrade has happened, while the logic remains on the old implementation.
fails to perform the actual upgrade, and the new implementation is not activated.
manual review
_authorizeUpgrade()
with a proper upgrade executionThe system doesn't implement UUPS properly.
The system doesn't implement UUPS properly.
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.