resolveDispute
purpose is to distribute the respective amounts to buyer, seller and arbiter. When payment token used is USDC (or any other token that implement a blacklist like functionality) if any involved actor is added to blacklist, resolveDispute
will revert, obstructing the other parties from receiving their rewards.
For simplicity let's follow this example. Important note is that only arbiter is specified as trusted. The other 2 actors can misbehave on purpose or not and get blacklisted.
the buyer creates an Escrow
contract using USDC as payment token;
for any reason, the buyer or the seller initiate a dispute through Escrow::initiateDispute
.
seller gets blacklisted by USDC contract;
the arbiter confers with both parties off-chain. Arbiter then calls Escrow::resolveDispute
but this reverts with Blacklistable: account is blacklisted
error.
Codded PoC:
Add USDCMock.sol in test/mocks folder and import it in EscrowTest.t.sol
with import {USDCMock} from "../mocks/USDCMock.sol";
:
Add following test to Escrow.t.sol file:
Run test with : forge test --mt testResolveDisputeReverts_blackListedSeller
.
Funds gets locked in the escrow contract.
Manual review
Use a pull pattern and allow each actor to withdraw their pay.
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.