A dispute can be initiated either by the seller or the buyer. Dispute can only be called in Created
state. But the state can be immediately changed to Confirmed
by the buyer, not allowing the seller to dispute anything.
Because there is no delay between creating the Escrow contract and being able to call confirmReceipt
, the buyer can immediately change the state to Confirmed
and transfer the tokens to the seller. What this means is that a dispute initiation by the seller can always be frontrunned by the buyer.
Seller calls initiateDispute
Buyer sees tx in the mempool and frontruns it with confirmReceipt
The initiateDispute
will fail because we're no longer in the Created
state.
The buyer can ALWAYS frontrun an initiateDispute
by the seller. This renders the capacity of the seller calling initiateDispute
useless, since it only succeeds if the buyer actually wants it (i.e. doesn't frontrun it).
Manual review.
There should be a time separation either between Escrow contract creation and confirmReceipt
, or some other thing that essentially provides power for the seller to actually dispute something even if the buyer doesn't want it.
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.