During the liquidation process different kind of fees in the form of tokens are being transferred by using the push pattern. This could make the liquidation transaction to revert and prevent keepers from liquidating critical positions.
Currently the USDC token on Arbitrum have a blacklisting and pause functionality (link).
In order to safely support this token we have to take into consideration the possibility of the USDC contract pausing all transfers or an address being blacklisted.
The blacklisted functionality is not a problem during liquidations because the token transfers that are happening are to recipients that are controlled by the protocol. If they get blacklisted for whatever reason the protocol can change the recipients of the fees.
However if the USDC contract pause all transfers this will make the liquidateAccounts() → tradingAccount.deductAccountMargin()
to revert when the code tries to make a fee transfer and the collateralType is USDC.
To be more specific inside the loop of deductAccountMargin()
the code is sending the fees by calling withdrawMarginUsd()
Reference to code: link
Accounts that have USDC as collateralType will not be able to get liquidated on time.
Manual Review
Instead of using a push pattern, use a pull pattern and add functionality for the fee recipients to withdraw their fees from the protocol. This way liquidations could not be interrupted if USDC pauses their token transfers.
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.