In your upgrade, you removed or reordered state variables, specifically schoolFees
, reviewTime
, and some mappings. Because Solidity stores variables in fixed storage slots, this change means the new contract's variables will overwrite or misinterpret the existing storage, leading to unpredictable behavior, logic errors, or even loss of funds.
sessionEnd
will now read from the old schoolFees
slot — making session management break.
bursary
, cutOffScore
, and others may point to incorrect or uninitialized data.
Mappings (reviewCount
, lastReviewTime
) were removed — any logic depending on them is now broken.
Corrupt session management logic.
manual review
Never remove or reorder variables in upgradeable contracts.
Use Storage
base contracts to manage layout safely.
Optionally use OpenZeppelin’s Upgrades Plugins to detect layout incompatibility automatically.
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.