The graduateAndUpgrade
function uses a loop to distribute teacher wages via USDC transfers. If any teacher’s address rejects USDC (e.g., a contract without IERC20
compatibility), the entire transaction reverts, permanently blocking protocol upgrades and wage distributions.
graduateAndUpgrade
Function:
Code Flaw: The function iterates over teachers and uses safeTransfer
to send wages. A single failed transfer (e.g., to a contract lacking USDC support) reverts the entire transaction.
Protocol Impact: Upgrades, principal payments, and remaining teacher wages are blocked until the failing teacher is removed or fixed.
Teachers: [TeacherA (valid), TeacherB (malicious/defective)]
.
Action: Principal calls graduateAndUpgrade()
.
Result: Transfer to TeacherB
reverts → entire transaction fails.
Critical Protocol Halting:
Upgrades Blocked: The system cannot progress to the next level.
Wage Theft: Teachers and the principal are unpaid until the issue is resolved.
Reputational Damage: Stakeholders lose trust in the protocol’s reliability.
Allow teachers to withdraw their wages instead of pushing funds:
Separate principal payment from teacher transfers to ensure principal is paid even if teacher transfers fail:
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.