How to execute proposals to the Kleros Governor

This is a light guide on executing proposals that have been voted and accepted, through the Kleros Governor.

First, we visit the proposal that we plan to submit to the governor. In this example, it’s the KIP-59.

Technical Process

The proposal suggests new values for Humanity Court. Humanity Court is a subcourt that resides in Kleros Court, with id: 23. Let’s see the current parameters for Humanity Court:

[ courts(uint256) method Response ]
  parent   uint96 :  0
  hiddenVotes   bool :  false
  minStake   uint256 :  14000000000000000000000
  alpha   uint256 :  5000
  feeForJuror   uint256 :  11000000000000000
  jurorsForCourtJump   uint256 :  31

The proposed values were 0.025 ETH feeForJuror, 0.5 alpha, 16000 PNK minStake. In code terms, those are the same as:

  minStake      uint256 :  16000000000000000000000
  alpha         uint256 :                     5000
  feeForJuror   uint256 :        25000000000000000

This is because alpha is in basis points, and minStake and feeForJuror refer to PNK and ETH amounts, which have 18 decimals. There’s no need to change alpha, since we can arrive to the desired execution state by just changing minStake and feeForJuror.

By looking into the Kleros Court contract, “Kleros Liquid”, we observe a variety of write functions. In this case, we can change the minStake and feeForJuror by using changeSubcourtMinStake and changeSubcourtJurorFee.

We can go to the Kleros Governor frontend, and open Kleros. First, check if there’s a session in place. When there’s a session, only proposals that were added before the stated date are allowed. The session might be outdated and hold no proposals, in which case you can just click on Execute Submissions, and a new session will be created.

Now, you can submit a list. To do so, click on “Submit Tx”. Paste the address of the contract you wish to interact with, and the frontend will fetch the ABI so that you can choose the proper function. Take care in choosing the correct parameters.

Do this for every transaction you want to add.

In this case, I paste the address of Kleros Liquid, 0x988b3A538b618C7A603e1c11Ab82Cd16dbE28069, and the frontend helps me autofill the parameters for the functions that need execution.

  • changeSubcourtMinStake(_subcourtID : 23,_minStake : 16000000000000000000000)
  • changeSubcourtJurorFee(_subcourtID : 23,_feeForJuror : 25000000000000000)

Finally, you’ll be asked to submit a deposit. If this is the first list submitted on the governor, the clock will start ticking.


In case the court id is unknown, you can find the policies that correspond with the court id in this policy registry contract.

The court id can be corroborated with tools like Kleros Board — but don’t trust, verify. :white_check_mark:

1 Like

Thanks for posting this - it’s undeniably important documentation in Kleros’ path toward further decentralization.

Maybe some day we can have representatives be elected by (sub)court stakers; this person would be responsible for updating parameters when a KIP has passed.