The Escrow.resolveDispute
function transfers the arbiter fee to the arbiter address. If the arbiter address is prevented (e.g., blacklisted) from receiving tokens, disputes can not be resolved, and funds may be stuck forever in the contract.
If the arbiter address i_arbiter
is blocklisted for the given token i_tokenContract
(e.g., $USDC), and there's a fee configured (i.e., i_arbiterFee
is non-zero), the dispute can not be resolved, and funds may be stuck forever in the contract due to the token transfer in line 123 reverting.
Escrowed funds may be stuck forever in the contract due to the inability to transfer the arbiter fee to the arbiter address in case of a dispute.
Manual Review
Instead of sending the tokens directly to the arbiter while resolving a dispute, consider storing the collected fee in a separate accounting storage variable and have the arbiter claim the fee from the contract.
Moreover, this pattern can be universally applied to all token transfers in the contract to reduce the risk of funds getting stuck in the contract.
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.