LevelOne::graduateAndUpgrade does not change the implementation address to LevelTwo contract, resulting in the school system remaining in LevelOne, causing students to be unable to graduate and breaking core protocol functionality
ERC1967 contains upgradeToAndCall and _setImplementation functions which helps to change the implementation address of the proxy. However, these functions are not called in LevelOne::graduateAndUpgrade, resulting in the proxy contract still pointing to the LevelOne implementation contract instead of LevelTwo implementation contract.
Place the following into LevelOne|AndGraduateTest.t.sol and run
forge test --mt testGraduateDoesNotGoToLevelTwo
Impact: High, students are unable to graduate, breaking core protocol functionality
Likelihood: High, principal will upgrade school system at the end of school session (after 4 weeks)
Severity: High
Manual review
Make the following modifications
LevelOne::graduateAndUpgrade
LevelTwo
The system doesn't implement UUPS properly.
The 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.