USDC token have a blacklist feature that allows the owner to block certain addresses from transferring tokens. If a teacher or the principal are blacklisted, they will not be able to receive their wages during the graduateAndUpgrade function. This can lead to a situation where teachers are not paid for their work and can also block the upgrade process.
The graduateAndUpgrade function does not check if the teachers or principal are blacklisted. Wages payment can be blocked and the upgrade process can be halted. The protocol will not be able to function properly and the funds will be stuck in the contract.
One of the teachers is blacklisted.
The principal calls the graduateAndUpgrade function.
The function will revert inside the loop at usdc.safeTransfer(listOfTeachers[n], payPerTeacher); because one of the teachers is blacklisted and cannot receive USDC tokens.
Every actors will be blocked from receiving their wages and the upgrade process will be halted.
Manual review and solodit checklist.
Create try-catch blocks around the usdc.safeTransfer function to handle the case where a teacher or principal is blacklisted. Consider creating an escape hatch to allow the principal (or proxy) to withdraw the funds in case of a blacklisted actor.
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.