How to use Reality.eth + Kleros as an oracle

When you want your app to get data from a subjective oracle
In use cases where a subjective oracle is required to give an answer on-chain about the occurrence of an event (e.g.: Prediction Markets, DAO Governance, etc...), your application might want to use the combination of Reality.eth bond escalation mechanism with Kleros arbitration services to have a decentralized and fair source of truth.


High-level architecture overview of an app using Reality.eth + Kleros as an oracle
  • Your app requiring a subjective oracle
    This is your smart contract that will only interact directly with Reality.eth contract.
  • Reality.eth
    Bond escalation mechanism contract where anyone can submit a question with a required minimum bond to submit answers. It is possible to request arbitration by a 3rd party at any point after a first answer is submitted.
  • Reality.eth < > Kleros Arbitrator proxy
    Contract acting as a proxy between Reality.eth and Kleros Court contract. It acts as a Reality.eth arbitrator by creating corresponding disputes in Kleros Courts and submitting the final ruling as an answer in the proper format. This contract is configured with a number of initial votes required and a specific sub-court where the dispute will be raised (ex: 5 initial votes by jurors in Blockchain > Technical court). You can use one already used by other apps or ask the cooperative Kleros team to deploy a new one fit for your needs.
  • Kleros
    Kleros Court contract that will adjudicate on the dispute by drawing jurors and publishing a final ruling about the case.


To use this service, you just need to ensure that:
  • your smart contract is compatible with the Reality.eth contract interface (check their documentation and repo)
    • If your contract is in development, Cooperative Kleros team can support you in making it compatible.
    • If your contract is already live, Cooperative Kleros team can support you in building a connector for it.
  • you submit the address of the Reality.eth<>Kleros arbitrator proxy you want to use as arbitratorwhen you ask a question. The arbitrator proxy will be set up with an initaial number of votes to be requested and a specific subcourt in whichcases will be raised. The Cooperative Kleros team can help select the right arbitrator for your use case or deploy a new one for you.
function askQuestion ( uint256 template_id, string question, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce ) external payable returns ( bytes32 );
Reality.eth <> Kleros Arbitrator Proxy deployments
  • (Current version) Mainnet: General Court - 0x728cba71a3723caab33ea416cb46e2cc9215a596
  • (Current version) Mainnet: Technical Court - 0xf72cfd1b34a91a64f9a98537fe63fbab7530adca
  • (Current version) Polygon: General Court - 0x5afa42b30955f137e10f89dfb5ef1542a186f90e
  • (Current version) Mumbai: General Court - 0xead0c9a4baeaf9b5221358539173602fa12b4b7d
  • (Current version) Kovan: Non-technical Court - 0xDEd12537dA82C1019b3CA1714A5d58B7c5c19A04
  • (Old version without appeals) Mainnet
    • 500 votes in general Court
  • (Old version without appeals) Kovan

Sequence Diagram