With the current implementation of the Distributor::distribute function, if one of the IERC20::safeTransfer calls within it fails, the whole transaction will revert. This can become a huge problem if one of the addresses the we call safeTransfer to becomes blacklisted.
As we know, most ERC20 tokens implement some sort of blacklisting functionality. With this in mind, if we consider the scenario where one of the addresses that we are going to try and make a transfer to in the distribute function becomes blacklisted, the whole transaction is going to revert. Taking this one step further, if the STADIUM_ADDRESS becomes blacklisted, all of the ERC20 assets of the given type will be locked forever. This is due to the fact, that the STADIUM_ADDRESS is immutable, and cannot be changed once the Distributor contract is deployed.
Funds will be stuck within the Distributor contract forever.
Manual review
Implement a pull mechanism for the withdraw functionality.
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.