Even if the option for disabling the arbitration mechanism was a design choice, without that mechanism enabled, the funds locked in an Escrow contract are at risk of permanently locking away (please refer to the Impact section for further explanation).
The Escrow contract was designed to have the arbitration mechanism optional. That means a buyer can create an Escrow contract by passing an arbiter address as address(0) to opt out of the arbitration option. In other words, neither a buyer nor a seller can raise a dispute by executing the initiateDispute() since the transaction will be reverted in line 103.
https://github.com/Cyfrin/2023-07-escrow/blob/65a60eb0773803fa0be4ba72defaec7d8567bccc/src/Escrow.sol#L103
Even if the option for disabling the arbitration mechanism was a design choice, without that mechanism enabled, the funds locked in an Escrow contract are at risk of permanently locking away.
Consider the following scenarios.
If a rogue seller refuses to deliver a service, the buyer's funds will be locked in the contract forever. The buyer will have no way to retrieve their funds.
If a rogue buyer receives a service but refuses to execute the confirmReceipt(), the locked funds will never be transferred to a seller. The seller will have no way of disputing, moreover.
Manual Review
I recommend explicitly applying the arbitration mechanism for every Escrow 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.