Kleros is proud to officially announce the coming of the Kleros Governor - the smart contract to decentralize Kleros governance.

Most projects in crypto who claim to be decentralized still have a few glaring points of centralization. It is usually not by want, but instead by a lack of options. There are some things that are difficult to fully decentralize with the tools currently available.

One of those hotbeds is the owner of the smart contract. Smart contracts need to be flexible and responsive to off chain events. Kleros has been using Aragon to hold votes in order make decisions for the smart contracts, however we are unable to use Aragon to make the updates in the smart contract. Therefore until now it has not been possible for the enforcements to be made in a decentralized manner.

Enter Kleros Governor, a smart contract that is responsible for enforcing decisions in the smart contracts.

How it works

Let's imagine a scenario where Kleros PNK holders vote to change the juror rewards for the General Court to 0.1 ETH per vote. The Kleros Court smart contract is no longer owned by Coopérative Kleros, but instead by the Kleros Governor smart contract. Therefore, this smart contract needs to make the call to Kleros Court to tell it to update the juror fees.

The first step is to tell the Governor smart contract that a vote has passed and what update needs to be made. Kleros team members, jurors, community members or anyone interested in having the ruling enforced can do this from the Kleros Governor interface. The smart contract will not allow duplicate lists of instructions to be submitted, so only one party can make the submission.

Creating a new list on the Governor interface

Kleros Governor will execute a list of instructions once a week. Assuming this was the only vote that happened this week, a person will create a new list that contains only this transaction. If there were other votes that needed governor execution, they would add them to this list as well. If it is the only list submitted for the week, it will be automatically accepted and enforced at the end of the session.

In some cases, a submitter might make a mistake while building the transaction, or there might be an attacker who submits a list that makes unauthorized changes to the Kleros smart contracts. In these cases, someone can submit a competing list that has the correct data. If there are more than two lists at the end of a session, a dispute is automatically created and Kleros jurors will make a ruling on which list is correct. Each submitter places a deposit down with their list. The deposits are returned to the winning party when a list is accepted. Deposits are also used to pay for a dispute in the event of multiple lists, and to reward the person who submits the correct list for the week.

Two lists have been submitted for the current session and will trigger a dispute

Creating a List

Lists are made up of one or more transactions. There should be the same number of transactions as decisions that need to be executed. There are four parts to every transaction.

  • The title of the transaction. This is used to make it easier for verifiers to understand what the transaction is meant to be doing. It can reference a vote number or otherwise just give a short description of the action being taken.
  • The address of the target smart contract. In the screenshots above, it is the address of the Kleros Liquid contract that runs Kleros Court.
  • Set an ETH amount that will be sent with the transaction. In this case changing the subcourt juror fee does not require any ETH, so we put 0 (zero). In a case when ETH is required, it can be entered in this field, but the submitter does not have to pay it. After a list has been accepted, another contract interaction is needed to execute the list and supply the payment needed execute the calls.
Note: the Kleros Cooperative will likely provide the fees needed by the governor transactions, but anyone can do it.
  • The raw hex data. This is inputted to tell the smart contract exactly what needs to be done. In this example, we have the function signature for changeSubcourtJurorFee followed by its values for the two parameters _subcourtID and _feeForJuror which are 0 and 100000000000000000 respectively.

Disputes

As we touched on before, if more than one List is submitted in a period, a dispute is automatically created and sent to Kleros Court. Jurors will look over all of the lists submitted and decide which one reflects the correct changes that were voted upon. The Governor will not allow new list submissions until a dispute has been resolved.

Once the jurors have made a ruling on the correct list, anyone who disagrees with the decision can pay appeal fees to send the dispute to another round. The appeal system is similar to other Kleros projects, such as the T2CR.

After a final ruling is accepted, the submitter of the correct list, as well as the crowdfunders who supported the correct list in the appeal process, are rewarded from the deposit and appeal fees of losing lists.

Decentralized Enforcement

The Governor interface will be released in the coming weeks for testing. The Governor smart contract is still in a period of review and bug bounties. Bounties pay out up to 50 ETH. You can participate here.

By using this enforcement process, it allows any interested party to enforce and police the updates to the Kleros smart contracts. Coopérative Kleros will still play a large role in submitting lists and enforcing decisions, but this update in contract ownership makes Kleros more decentralized. Now community members do not need to rely the goodwill of Coopérative Kleros after votes have taken place, and it paves the way for Kleros to continue to function and evolve in the event of a centralized failure (lost keys, dissolution of the coopérative etc.).

This marks a watershed moment for Kleros, where our justice system takes a bold step towards complete decentralization and allowing a more broad participation of the entire community in the life of our court. Join us on this endeavor, for the future of justice.

Where Can I Find Out More?

Join the community chat on Telegram.

Visit our website.

Follow us on Twitter.

Join our Slack for developer conversations.

Contribute on Github.

Download our Book