What is an Arbitrable Contract?
An arbitrable contract is any smart contract that can create disputes and enforce rulings from Kleros. Your contract implements an arbitrable interface (IArbitrableV2 in Kleros V2, ERC-792 in V1), which defines two things:
- How disputes are created: your contract decides when conflicts arise
- How rulings are enforced: your contract executes the outcome
This section includes both V2 arbitrable contract guides (
IArbitrableV2) and the V1 protocol standards - ERC-792 and ERC-1497 - along with their integration references (V1 Arbitrable Apps, Centralized Arbitrator, Arbitrable Proxy).When to Use Kleros Arbitration
Good Fit
- Subjective disputes humans can judge
- High-value transactions worth the cost
- Cases where trust is impossible
- Multi-party disagreements
Poor Fit
- Fully objective, on-chain verifiable outcomes
- Micro-transactions (fees > value)
- Time-critical decisions (< 1 week)
- Disputes requiring real-world enforcement
Key Design Decisions
Before writing code, decide on these:1. Ruling Options
Define what jurors can decide. Common patterns:Choice
0 is reserved for “Refuse to Arbitrate” jurors select this when the dispute is invalid or unanswerable.2. Who Pays Fees?
Arbitration costs ETH. Your contract decides who pays:Most Kleros products use loser pays both parties deposit the arbitration fee upfront, and the winner is reimbursed. This is the pattern used by Escrow V2 and Curate V2.
3. Dispute Triggers
When does a dispute start? Common triggers:- Explicit request Party calls
raiseDispute() - Timeout No response within deadline
- Challenge Someone disputes a pending action
- Automatic Conflicting claims detected
4. Evidence Submission
Decide how evidence reaches jurors:- On-chain events Emit
Evidenceevents from your contract - Separate module Use the
EvidenceModulecontract - Cross-chain Evidence from foreign chain via gateway
Interface Requirements (V2)
To integrate with Kleros V2, your contract must implement:
Architecture Patterns
Pattern A: Direct Integration
Your contract is the arbitrable. Simplest approach.Pattern B: Proxy/Resolver
UseDisputeResolver as intermediary. Good for upgradability.
Pattern C: Cross-Chain
Arbitrable on mainnet, resolution on Arbitrum.Cost Considerations
Security Mindset
Your contract must handle:- Reentrancy
rule()is an external call - Ruling validation Check ruling is within expected range
- Duplicate rulings Prevent
rule()being called twice - Fee changes Arbitration cost can change between calls
- Arbitrator trust Only accept rulings from your arbitrator
Next Steps
Implementation Guide
Step-by-step walkthrough with complete code examples