Arbiter, a trusted role, could have a disagreement on the low arbiter fee being compensated to settle a dispute.
Given the trusted role as an arbiter, the arbiter may not agree with the arbiter fee given to settle a dispute. The arbiter could not do anything about it as the arbiter fee is set during contract creation and could not be changed. Here are the functions which affect the arbiterFee.
From all the functions above, we could not change the arbiter fee once the contract is being deployed.
Workflow:
Buyer creates an Escrow via EscrowFactory::newEscrow but the buyer could accidentally/intentionally put in the wrong value for the arbiter fee.
Either the buyer or seller initiates a dispute via Escrow::initiateDispute which changes the Escrow's state from Created to Disputed.
There are two cases on whether the arbiter resolves the dispute:
The arbiter (being a trusted role) confers with both parties offchain. Arbiter then calls Escrow::resolveDispute, reimbursing either side accordingly, emptying the Escrow. This also changes the state of the Escrow contract to Resolved. However, the arbiter is being forced to accept the undesirable low arbiter fee. For instance, it takes the arbiter one week to resolve the dispute between both the buyer and seller, however, due to the incorrect value of arbiter fee, let’s say 100 amount of tokens which is worth $1, the arbiter is being forced to accept this low fee to settle the dispute and was being underpaid due to the error being set by the buyer during contract creation.
The arbiter does not settle the dispute (unlikely given the trusted role). The contract is stuck in the Disputed state forever and the funds deposited could not be recovered.
The arbiter is underpaid after settling the dispute due to an error in contract creation by the buyer.
Discuss among three parties, buyer, seller, and arbiter before contract creation.
Implement a setter function for i_arbiterFee so that the buyer could correct the mistake he/she makes during contract creation.
Remove i_arbiterFee variable and add one more parameter, arbiterFee for resolveDispute function. Since the arbiter is a trusted role, the arbiter is reliable to provide the correct arbiterFee while calling Escrow::resolveDispute function. This method also provides flexibility for the arbiter if the arbiter is paid based on hourly rate/daily rate. For instance, the arbiter does not expect that he/she requires more time to handle the dispute and the arbiter could charge more on the arbiter fee.
Based on the methods above, they could also solve one of the known issues which is Large arbiter fee results in little/no seller payment - In this scenario, the seller can decide to not perform the audit. If this is the case, the only way the buyer can receive any of their funds back is by initiating the dispute process, in which the buyer loses a large portion of their deposited funds to the arbiter. Therefore, the buyer is disincentivized to deploy a new Escrow in such a way.
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.