High
The protocol is designed to preserve 60% of bursary funds across the upgrade from LevelOne to LevelTwo. However, there is no mechanism to actually transfer or account for these funds during the upgrade process. This will result in:
Funds effectively being stranded in the proxy contract
Loss of financial accounting between versions
Inability to utilize the remaining 60% of funds as intended in LevelTwo
Breaking the core economic model of the school system
According to the project requirements:
Payment structure is as follows:
principal
gets 5% ofbursary
teachers
share of 35% of bursaryremaining 60% should reflect in the bursary after upgrade
While LevelOne's graduateAndUpgrade()
function correctly distributes the 40% of funds to teachers and principal, it has no mechanism to account for the remaining 60% when upgrading to LevelTwo:
Similarly, LevelTwo's graduate()
function is empty and doesn't attempt to handle the remaining funds:
This creates a critical disconnect between the protocol's stated requirements and its implementation. The actual USDC tokens will remain in the proxy contract's balance, but LevelTwo has no awareness of this bursary contribution, effectively "losing" 60% of the funds in the transition.
Manual code review
Implement a proper fund transfer mechanism between contracts:
In LevelOne's graduateAndUpgrade()
function, calculate the remaining funds and pass them to LevelTwo:
In LevelTwo, update the graduate()
function to handle the bursary amount:
This ensures the 60% of funds are properly accounted for in LevelTwo's state.
Funds are stuck in `LevelOne()` contract after upgrade.
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.