The LevelTwo
contract, intended as the system's new implementation via the UUPS pattern, does not inherit from UUPSUpgradeable
and therefore does not implement the mandatory _authorizeUpgrade(address)
function. This causes any call to _upgradeToAndCall()
to automatically revert when attempting to update the proxy.
The graduateAndUpgrade()
function in LevelOne
, responsible for performing the upgrade, will completely fail when trying to execute _authorizeUpgrade()
on an implementation that does not define it. The entire transaction reverts, and no state changes occur.
The upgrade cannot be completed while LevelTwo
is incompatible with the UUPS pattern.
The graduateAndUpgrade()
function completely reverts, and as a result:
Teachers
do not receive their share of the bursary
.
The principal
cannot collect their portion either.
The system remains stuck in LevelOne
, with no possibility of migration.
While there is no loss of funds, there is an economic denial of service for the contract's internal roles.
A new compatible implementation or modification of the upgrade process will be required.
The principal
attempts to update the contract's implementation to LevelTwo
via the graduateAndUpgrade()
function.
The transaction reverts:
Make LevelTwo
inherit from UUPSUpgradeable
and implement _authorizeUpgrade()
:
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.