According to the protocol rules:
“Any student who doesn't meet the
cutOffScore
should not be upgraded.”
“Students must have gotten all reviews before system upgrade.”
However, in the current implementation, the graduateAndUpgrade()
function:
Does not check if each student met the cutOffScore
Simply upgrades the system, preserving the entire listOfStudents
without filtering
This violates the system's intended business logic and breaks the “graduation” invariant.
Current graduateAndUpgrade()
implementation:
There is:
❌ No check on reviewCount[_student]
❌ No check on studentScore[_student]
❌ No removal of students below cutoff
This allows:
Students who should have failed to be preserved in storage
LevelTwo
to inherit invalid state, making metrics meaningless
Potential economic or governance bugs in more complex versions
Breaks the expected graduation process
Invalid students persist in the upgraded contract
May misrepresent cohort data and future payout logic
Fails the system's core education + performance requirement
Manual source code audit
Logic reasoning
Implement a loop before the upgrade call that:
Checks each student has received 4 reviews
Compares their score with cutOffScore
Expels the student if conditions are not met
Example fix:
Place this loop just before calling _authorizeUpgrade
.
This guarantees that only valid, fully-reviewed, and passing students make it into LevelTwo.
All students are graduated when the graduation function is called as the cut-off criteria is not applied.
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.