In some cases buyers won't be able to get their funds back without putting their trust on the sellers to voluntarily return them back.
Currently the contract allows deploying an escrow with address(0) as arbiter.
Not using an arbiter could be a result by either of the parties having trust issues towards a third person to allocate the right amount of tokens when dispute is resolved. Thats why there is an option to deploy an escrow contract with address(0) as arbiter, this indicates that arbiter won't be used and initiateDispute can't be made.
However there is a big downside of not using arbiter, which the current system doesn't predict:
Buyer and seller make an agreement for a private audit and deploys a new escrow contract with address(0), as for some reason either of the parties have a trust issue towards third party. The two parties schedule a week on which the private audit will be done.
The scheduled time comes and for some reason the seller doesn't want to do the private audit anymore. It could be that the auditor simply has something else to do or just a protocol with better offer showed up.
As there is no arbiter, a dispute can't be initiated to return back the tokens to the buyer.
The only available way to send the funds outside of the escrow, would be to call confirmReceipt and send the amount of tokens the contract has to the seller.
In the end there is no guarantee that the seller will voluntarily return the tokens back to the buyer.
In a case when an arbiter is not used in the escrow and the private audit is not performed. The only way for the buyer to receive his funds back from the escrow would be to put trust on the seller to voluntarily return them back.
Manual review.
The only recommended fix l could've think of is to not allow an escrow to be deployed without an arbiter.
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.