The Aragon Court is a dispute resolution protocol that runs on Ethereum. It’s one of the core components of the Aragon Network.
The Aragon Court handles subjective disputes that cannot be solved by smart contracts. For this, it employs jurors that need to stake a token to the Court which allows them to get drafted to adjudicate disputes, that can earn them fees. The more tokens a juror has activated, the higher the chance to get drafted and earn more fees.
The Aragon Court attempts to find what the subjective truth is with a Schelling game. Jurors are asked to vote on the ruling that they think their fellow jurors are more likely to vote on. To incentivize consensus, jurors that don’t vote on the consensus ruling have some tokens slashed. Jurors that vote with the consensus ruling are rewarded with ruling fees and juror tokens from the jurors that voted for a minority ruling.
A design goal of the mechanism is to require very few jurors to adjudicate a dispute and produce a ruling. A small number of jurors is adjudicated by default to a dispute, and their ruling can be appealed in multiple rounds of appeals.
Even though the Aragon Court could theoretically resolve any type of binary dispute, in its first deployments it will be used to arbitrate Proposal Agreements. These agreements require entities creating a proposal in an organization to agree to its specific rules around proposal creation, putting some collateral at stake that could be lost if the Court finds the proposal invalid.
This first version of the Aragon Court has been heavily inspired by Kleros’ work. The code for the work-in-progress court has now been open sourced: github.com/aragon/aragon-court
This post is mostly a development update on the current state of the implementation and some aspects that we are still researching about and deciding on.
High-level flow
-
Jurors deposit ANT into a bonding curve to generate ANJ (likely using Aragon Black’s implementation)
-
Jurors stake ANJ to the Court contract and schedule their activation and deactivation for the time period in which they can be drafted to rule on disputes.
-
Court fees and configuration parameters are controlled by a governor (the Aragon Network), but can only be modified for future terms to ensure that the rules can’t change for ongoing disputes as much as possible.
-
The creator of a dispute must pay fees to cover the maintenance gas costs of the Court and the jurors that will adjudicate their dispute. The governor of the Court gets a share of all the fees paid out in the Court.
-
Jurors are randomly drafted to adjudicate disputes. Because the Court isn’t sybil resistant, jurors chance to be drafted is proportional to the amount of ANJ they have activated.
-
When drafted, jurors must commit and reveal to a ruling. Failure to vote or reveal, results in a penalty for the jurors.
-
After a ruling is decided, it can be appealed by anyone a certain number of times, after which all active jurors will vote on the last appeal, providing an unappealable ruling.
-
When the final ruling is decided, all the adjudication rounds for the dispute can be settled taking into account the final ruling for rewards and penalties.
Mechanism
Terms
-
Terms are the time unit within the Court.
-
Terms are pegged to actual real time (seconds). Choosing a term duration that is somehow round (like 1 hour) will help UX as it will make it easy for jurors and users of the Court to calculate when certain actions can happen. The term duration is set when the Court is created and cannot be changed.
-
Everything else in the Court that depends on time uses terms as its time unit.
-
A term transition can be triggered by anyone after the term duration has passed by calling the heartbeat function, whoever executes the heartbeat earns a fee (paid by disputes pegged to the term and jurors that activate and deactivate on the term).
-
More than one term can be transitioned in the same transaction. This could happen if no one executes the heartbeat for a term because no disputes depend on it or the economic incentive is too low.
-
Term start times are predictable even if terms aren’t transitioned on time. For example, if terms last 5s and no transitions occur until T=49s, it will jump directly to term 10 and term 11 will start in T=50s.
-
Each term has its own randomness seed (used by dispute rounds that draft on this term) provided by the block hash of the next block after the term was transitioned (because it is the earliest block for which the block hash is still unknown).
-
During term transitions, the sortition tree of jurors used for drafting is updated to reflect active jurors during the term. Jurors that decided to activate on the term get added to the tree (update queue), jurors whose stake was updated due to a gain or loss of juror tokens is updated in the tree (update queue) and jurors that deactivate on the term get removed from the tree (egress queue). Processing these queues is the most expensive part of the heartbeat execution and the reason why the caller is awarded with a fee.
-
Adjudication rounds that depend on a term must draft their jurors during the term, as the juror tree will change in the next term transition. Failure to draft during the term will require rescheduling the drafting to a future term.
Staking and activation
ERC900
-
A staking implementation is baked in the Court itself.
-
Until the juror decides to activate, they can stake and unstake without risk of losing tokens.
-
Once activated, a juror can’t unstake their initial tokens until they deactivate. Rewards aren’t activated by default, so they can be withdrawn from the contract or activated.
Activation
-
During all the terms that a juror is active, they will have an equal chance of being drafted to adjudicate disputes relative to their active ANJ stake.
-
A juror can schedule their activation and deactivation terms. The first term in which a juror can become active should be the last possible term in which disputes can be scheduled to start (avoid jurors becoming active to rule on a dispute that was just scheduled).
-
There is a minimum ANJ staking amount requirement in order to become an active juror, to avoid having jurors with too little at stake (even if their chance of being drafted is proportional to their active stake). If a juror’s stake falls down below the minimum stake threshold, they won’t be deactivated, although in order to avoid over leveraged jurors, if a juror can potentially be slashed more tokens than they have, they will be skipped when drafting.
-
If a juror is active during a term and they are drafted for a dispute, they are required to vote on the dispute (and are penalized if they fail to do so).
-
Jurors are charged an activation and deactivation fee to cover the added gas costs for executing the heartbeat in the term that they are activated/deactivated.
-
At the moment, ANJ earned by the juror is not automatically activated, so it can be withdrawn from the Court. The juror can decide when to to activate the ANJ that they have earned.
Deactivation
-
Even though a juror could have set their deactivation term when they activated, they can change it at any time before the deactivation happens and reschedule their deactivation. Scheduling the deactivation will only require paying a fee the first time the deactivation is scheduled, rescheduling is free.
-
Deactivation cannot happen immediately, as the juror can still be drafted for adjudication in the current term.
Disputes
Creation
-
When creating a dispute, the following parameters need to be chosen:
-
Address of the contract being arbitrated: the contract itself could end up being the only valid creator of the dispute (in order to avoid external entities creating disputes targeting a specific contract)
-
Number of jurors for the first adjudication round: which must be a minimum of three jurors and a maximum of X (number will depend on gas analysis).
-
Ruling options: the number of possible outcomes that jurors will be voting on. The minimum is 2 options and the maximum is 254 options. The arbitrable contract is responsible for letting the Court know what the meaning of each ruling option is (unless the possible ruling options are standard in the Court), and if jurors consider that the ruling options are not clear enough, they will vote to ‘Refuse Ruling’.
-
Draft term: term of the court in which the juror draft will occur, it can only be a future term and there may be a limit to how far into the future disputes can be created.
-
Dispute creation requires paying a fee (the creator of the dispute is responsible for collecting these funds):
-
For each juror: a ruling fee (for the juror) + a draft fee (for the account that executes the draft transaction) + a settlement fee (for the account that settles the penalties of the round)
-
Heartbeat fee for the account that executes the heartbeat of the term that the first voting round of the dispute is pegged to
-
Dismissal
-
Before the drafting term of the first voting round, the creator of the dispute can decide to dismiss the dispute.
-
Fees will be refunded to the creator of the dispute, except for the cut of the fees that the Court governor gets.
Juror drafting
-
One block after the heartbeat function has been executed for the drafting term of a dispute round, a function can be called to draft jurors for the round.
-
This function can be executed by anyone and the caller is rewarded with a fee.
-
The same jurors will be drafted regardless of when the draft transaction is sent, however if this transaction is not performed before the term ends, the dispute round needs to be rescheduled for another court term, as it isn’t possible to draft jurors for a past term.
-
In order to make token-weighted drafting efficient, a sortition tree (similar to Kleros’ idea) is maintained in the Court. All jurors in the tree have a certain interval of numbers (kind of like lottery tickets) proportional to their active token amount. A random number from 0 to the total number of active tokens is picked and the juror that ‘owns’ that interval is selected:
-
When a juror is drafted, the amount of tokens that they could get slashed in the round if they were penalized is frozen in their account. Even if a juror deactivates, these frozen tokens can’t be withdrawn until the dispute is resolved.
-
All jurors in a round can lose the same amount of tokens, as the maximum penalty is calculated multiplying a constant penalty ratio by the minimum amount of tokens needed to be an active juror.
-
If a juror is drafted but the amount of tokens that would need to be frozen would make the juror be over-leveraged (when they could lose more tokens than they have), the juror is skipped and another juror is drafted.
Commit
-
For a number of terms after the drafting term of a dispute round, jurors must review the evidence provided by the arbitrable contract (which should allow the parties involved in the dispute to submit links to evidence or provide the evidence itself) and commit to voting for a ruling option (hash of the ruling option and a number that they keep secret)
-
If during the commit period the juror sends their secret to someone else to prove that they are going to be voting in a certain way, their vote can be leaked by anyone that has the secret which results in the juror being slashed. A leaked vote will be considered invalid.
Reveal and vote counting
-
After the committing period ends, jurors must reveal their votes by submitting their ruling and secret within a certain number of terms.
-
Votes that aren’t revealed on time will be considered invalid and the juror will be slashed.
-
In the case that there is a tie among multiple options, the option with the lowest ID will be considered as the winning ruling for the round.
Appealing
-
After the reveal period ends, there is a number of terms during which anyone can appeal the winning ruling. If the maximum number of regular appeals (TBD) has already been reached, the final ruling will be decided with a token-weighted majority vote of all active jurors.
-
Appealing a ruling will require drafting
2J + 1
jurors (see alternatives in ‘Increasing economic security in appeals’ below), where J is the number of jurors of the previous adjudication round. The entity appealing will need to pay a fee with the same format as the dispute creation fee (which will have a higher cost as more jurors will be drafted) -
Once a ruling is appealed, the votes of the current adjudication round will no longer be taken into account for vote counting, as the final ruling will always be the consensus ruling of the last adjudication round.
-
If the appealing period expires without appeals, the dispute will be resolved and the Court will communicate the ruling to the arbitrable contract.
Round settlement
-
After a dispute is resolved and the final ruling has been decided, the ANJ at stake of the jurors involved in any of the adjudication rounds of the disputes is redistributed.
-
In each voting round, there is a maximum amount of ANJ that the jurors can lose which is the same for all jurors.
-
For each adjudication round, all the jurors that didn’t vote on the final winning ruling are penalized and their ANJ is distributed among the jurors in the round that voted on the winning ruling.
-
In order for penalties to be executed as soon as possible, there is a fee for the account that calls the function that settles the penalties in a round. After this settlement occurs, jurors can call another function to collect their rewards (both slashed ANJ and juror fees) and activate their tokens.
-
In case that none of the jurors in a given round voted for the winning ruling, the juror fees are refunded to the creator of the round (dispute creator or appealer) and the slashed ANJ is burned.
Final appeal
-
After the maximum number of appeals is reached, a token weighted vote is scheduled in which all active jurors will be required to vote.
-
The fee for the final appeal is still TBD as charging the regular fee amount would be too expensive. A proposal would be to make it double the fee of the previous round and distribute it proportionally to token holdings.
-
The final appeal will decide the final ruling for the dispute and it is unappealable.
-
The most voted option will be the winning ruling of the dispute, and all jurors that vote for the winning option will have their ANJ locked for a period of time. So in the case of a successful 51% attack of the court, all the tokens that participated in the attack will be locked for a period of time, giving the losing jurors the opportunity to sell their tokens to the curve.
Open design challenges
Appeal betting
A mechanism that @lkngtn has described to make it less likely for disputes to be repeatedly appealed would be to require appealers to put up collateral (on top of the juror fees), which grows with the number of the round, and they will lose if the Court doesn’t change the ruling.
Once someone appeals, a counterparty is needed to match the appealer’s deposit and take on the other side of the bet (supporting the current ruling of the Court). If no one is willing to do this, the ruling can be immediately flipped without another adjudication round, resulting in the jurors that had consensus for the appealed ruling to be slashed.
Allowing jurors to refuse to rule
At the moment, even if the Court has been designed for a binary schelling game, jurors can vote on an additional option, ‘Refuse to rule’ which can be used by jurors in case that the dispute type isn’t supported by the Court, there is not enough evidence on any side to rule or the contract being arbitrated doesn’t follow some subjective rules of the Court.
This can have implications specially with appeal betting, as the appealer would appeal for just one ruling, requiring the appeal counterparty that take on the other two possible rulings.
A potential solution to this could be to run two different types of rounds for a dispute, an initial round in which the only decision that is made is whether the Court will rule or refuse to rule. This sub-dispute would likely require a very small amount of jurors (maybe as small as 1) and could also be appealed, but once there is a final decision that the Court will rule, jurors in the next rounds will only be able to vote on a binary ruling.
Increasing economic security in appeals
At the moment, all jurors selected for adjudicating a dispute can have the same maximum penalty in case that they vote for a losing ruling. This results in the fact that the security of disputes grows linearly with the number of jurors that can be drafted in the multiple adjudication rounds. And in the current implementation there is a limit (due to gas) to how many jurors can be drafted for to rule in a round, which is in the 100-150 juror range.
Even though the potential final appeal in which all active jurors are required to vote increases the security (at the expense of inefficiency as potentially thousands of people will need to vote), during the regular appeals rounds the maximum amount of tokens at stake will be just two orders of magnitude more than the minimum token amount for juror activation (assuming a quite unlikely 100% penalization ratio), which will likely not be much.
It’d be positive to increase the juror stakes as the appeal rounds advance. A couple of options for doing this:
-
Increase the penalty ratio over time: because we would be using the same minimum activation tokens as the base for the penalty, this wouldn’t be a big change (maybe an order of magnitude compared to the early rounds).
-
Increase the minimum token amount required to be drafted on certain rounds: this would allow us to introduce a steeper increase in penalties, while at the same time allowing jurors with less tokens to participate in the earlier rounds. A way to implement this could be to split the sortition tree into multiple sub-trees that ensure that their nodes are within certain ranges, and when performing sortition it would only do it in a subset of sub-trees depending on the minimum individual node value required.