Skip to content

Commit 15ef0eb

Browse files
committed
Merge branch 'dev' into chore/node20
2 parents 3e87e90 + e70c36c commit 15ef0eb

File tree

94 files changed

+3808
-363
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+3808
-363
lines changed

.github/workflows/deploy-subgraph.yml

+12-1
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,16 @@ jobs:
8484
working-directory: subgraph
8585

8686
- name: Deploy the subgraph
87-
run: yarn deploy:${{ inputs.subgraph }}:${{ vars.NETWORK }}
87+
run: |
88+
# working around a graph bug which doesn't exit 1 on error: https://github.com/graphprotocol/graph-tooling/issues/1570
89+
error=$(yarn deploy:${{ inputs.subgraph }}:${{ vars.NETWORK }})
90+
echo "$error"
91+
if [[ $error == *"Error"* ]]
92+
then
93+
echo "exiting..."
94+
exit 1
95+
else
96+
echo "deployed successfully"
97+
exit 0
98+
fi
8899
working-directory: subgraph

contracts/.env.example

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1
2-
REPORT_GAS=true
2+
33
INFURA_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1
44

5+
# Testing
6+
REPORT_GAS=true
7+
58
# There seems to be a bug with hardhat-deploy's implementation of etherscan-verify
69
# If ETHERSCAN_API_KEY is set, it overrides any hardhat configuration.
710
ETHERSCAN_API_KEY_FIX=ABC123ABC123ABC123ABC123ABC123ABC1
811
ARBISCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1
912
GNOSISSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1
1013

14+
# For the bots
15+
LOG_LEVEL=debug
16+
SUBGRAPH_URL=https://api.studio.thegraph.com/query/61738/kleros-v2-core-devnet/version/latest
17+
LOGTAIL_TOKEN_KEEPER_BOT=cqPqBofVC8nmA8EZdZGqqvUV
18+
LOGTAIL_TOKEN_RELAYER_BOT=41h8q5Z4gnz5yDx215eqcQ4r
19+
LOGTAIL_TOKEN_DISPUTOR_BOT=mSryyvYubviaMqKDWfBKAGsi
20+
HEARTBEAT_URL_KEEPER_BOT=https://uptime.betterstack.com/api/v1/heartbeat/jc23S8ZZzpf8KbzwxL1hoBp9
21+
HEARTBEAT_URL_RELAYER_BOT=https://uptime.betterstack.com/api/v1/heartbeat/eT6Trk6CddJV6fFBbqZNzyqC
22+
DISPUTES_TO_SKIP=
23+
1124
# Optionally for debugging
1225
# TENDERLY_USERNAME=your_username
1326
# TENDERLY_PROJECT=your_project

contracts/README.md.template

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
# @kleros/kleros-v2-contracts
2+
3+
Smart contracts for Kleros v2
4+
5+
## Deployments
6+
7+
Refresh the list of deployed contracts by running `./scripts/generateDeploymentsMarkdown.sh` or `./scripts/populateReadme.sh`.
8+
9+
$deployments
10+
11+
## Getting Started
12+
13+
### Install the Dependencies
14+
15+
```bash
16+
yarn install
17+
```
18+
19+
### Run Tests
20+
21+
```bash
22+
yarn test
23+
```
24+
25+
### Compile the Contracts
26+
27+
```bash
28+
yarn build
29+
```
30+
31+
### Run Linter on Files
32+
33+
```bash
34+
yarn lint
35+
```
36+
37+
### Fix Linter Issues on Files
38+
39+
```bash
40+
yarn fix
41+
```
42+
43+
### Deploy Instructions
44+
45+
**NOTICE:** the commands below work only if you are inside the `contracts/` directory.
46+
47+
#### 0. Set the Environment Variables
48+
49+
Copy `.env.example` file as `.env` and edit it accordingly.
50+
51+
```bash
52+
cp .env.example .env
53+
```
54+
55+
The following env vars are required:
56+
57+
- `PRIVATE_KEY`: the private key of the deployer account used for the testnets.
58+
- `MAINNET_PRIVATE_KEY`: the private key of the deployer account used for Mainnet.
59+
- `INFURA_API_KEY`: the API key for infura.
60+
61+
The ones below are optional:
62+
63+
- `ETHERSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Etherscan**.
64+
- `ARBISCAN_API_KEY`: to verify the source of the newly deployed contracts on **Arbitrum**.
65+
- `GNOSISSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Gnosis chain**.
66+
67+
#### 1. Update the Constructor Parameters (optional)
68+
69+
If some of the constructor parameters (such as the Meta Evidence) needs to change, you need to update the files in the `deploy/` directory.
70+
71+
#### 2. Deploy to a Local Network
72+
73+
The complete deployment is multi-chain, so a deployment to the local network can only simulate either the Home chain or the Foreign chain.
74+
75+
**Shell 1: the node**
76+
77+
```bash
78+
yarn hardhat node --tags nothing
79+
```
80+
81+
**Shell 2: the deploy script**
82+
83+
```bash
84+
yarn deploy --network localhost --tags <Arbitration|VeaMock|ForeignGatewayOnEthereum|HomeGateway>
85+
```
86+
87+
#### 3. Deploy to Public Testnets
88+
89+
```bash
90+
# ArbitrumSepolia to Chiado
91+
yarn deploy --network arbitrumSepolia --tags Arbitration
92+
yarn deploy --network arbitrumSepolia --tags HomeArbitrable
93+
yarn deploy --network chiado --tags ForeignGatewayOnGnosis
94+
yarn deploy --network chiado --tags KlerosLiquidOnGnosis
95+
yarn deploy --network chiado --tags ForeignArbitrable
96+
yarn deploy --network arbitrumSepolia --tags HomeGatewayToGnosis
97+
98+
# Sepolia
99+
yarn deploy --network sepolia --tags ForeignGatewayOnEthereum
100+
yarn deploy --network sepolia --tags ForeignArbitrable
101+
yarn deploy --network arbitrumSepolia --tags HomeGatewayToEthereum
102+
```
103+
104+
The deployed addresses should be displayed to the screen after the deployment is complete. If you missed them, you can always go to the `deployments/<network>` directory and look for the respective file.
105+
106+
#### 4. Deploy a Devnet on Public Testnets
107+
108+
Same steps as above but append `Devnet` to the `--network` parameter.
109+
110+
#### Running Test Fixtures
111+
112+
**Shell 1: the node**
113+
114+
```bash
115+
yarn hardhat node --tags Arbitration,VeaMock
116+
```
117+
118+
**Shell 2: the test scripts**
119+
120+
```bash
121+
yarn test --network localhost
122+
```
123+
124+
#### 4. Verify the Source Code
125+
126+
This must be done for each network separately.
127+
128+
```bash
129+
# explorer
130+
yarn etherscan-verify --network <arbitrumSepolia|arbitrum|chiado|gnosischain|sepolia|mainnet>
131+
yarn etherscan-verify-proxies
132+
133+
# sourcify
134+
yarn sourcify --network <arbitrumSepolia|arbitrum|chiado|gnosischain|sepolia|mainnet>
135+
136+
```
137+
138+
## Ad-hoc procedures
139+
140+
### Populating the policy registry and courts
141+
142+
The policy registry and courts configuration can be found in `config/policies.*.json` and `config/courts.*.json`.
143+
144+
#### 1/ Export the registry data from V1
145+
146+
```bash
147+
for network in mainnet gnosischain
148+
do
149+
yarn hardhat run scripts/getPoliciesV1.ts --network $network | tee config/policies.v1.$network.json
150+
yarn hardhat run scripts/getCourtsV1.ts --network $network | tee config/courts.v1.$network.json
151+
done
152+
```
153+
154+
#### 2/ Import the data to V2 - Local Network
155+
156+
Shell 1:
157+
158+
```bash
159+
yarn hardhat node --tags Arbitration
160+
```
161+
162+
Shell 2:
163+
164+
```bash
165+
yarn hardhat run scripts/populateCourts.ts --network localhost
166+
yarn hardhat run scripts/populatePolicyRegistry.ts --network localhost
167+
```
168+
169+
#### 3/ Import the data to V2 - Public Testnet
170+
171+
```bash
172+
yarn hardhat run scripts/populateCourts.ts --network arbitrumSepolia
173+
yarn hardhat run scripts/populatePolicyRegistry.ts --network arbitrumSepolia
174+
```
175+
176+
### Generate deployment artifacts for existing contracts
177+
178+
#### Usage
179+
180+
```bash
181+
scripts/generateDeploymentArtifact.sh <network> <address>
182+
```
183+
184+
#### Example: WETH on Gnosis chain
185+
186+
```bash
187+
scripts/generateDeploymentArtifact.sh gnosischain 0xf8d1677c8a0c961938bf2f9adc3f3cfda759a9d9 > deployments/gnosischain/WETH.json
188+
```
189+
190+
### Push the contracts to a Tenderly project
191+
192+
Ensure that your `$TENDERLY_PROJECT` and `$TENDERLY_USERNAME` is set correctly in `.env`.
193+
194+
```bash
195+
yarn tenderly-verify --network sepolia
196+
yarn tenderly-verify --network arbitrumSepolia
197+
```

contracts/config/courts.v2.testnet.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{
33
"id": 1,
44
"parent": 0,
5-
"hiddenVotes": false,
5+
"hiddenVotes": true,
66
"minStake": "150000000000000000000",
77
"alpha": "5000",
88
"feeForJuror": "10000000000000",

contracts/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@
7878
"graphql-request": "^6.1.0",
7979
"hardhat": "2.15.0",
8080
"hardhat-contract-sizer": "^2.10.0",
81-
"hardhat-deploy": "^0.11.42",
82-
"hardhat-deploy-ethers": "^0.4.0-next.1",
81+
"hardhat-deploy": "0.11.42",
82+
"hardhat-deploy-ethers": "0.4.0-next.1",
8383
"hardhat-deploy-tenderly": "^0.2.0",
8484
"hardhat-docgen": "^1.3.0",
8585
"hardhat-gas-reporter": "^1.0.9",

contracts/scripts/disputeCreatorBot.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ export default async function main() {
3636
"000000000000000000000000000000000000000000000000000000000000000B" + // minJurors 11
3737
"0000000000000000000000000000000000000000000000000000000000000002"; // disputeKitId 2
3838
const templates = [
39-
`{"title":"A reality.eth question","description":"A reality.eth question has been raised to arbitration.","question":"**Kleros Moderate:** Did the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://ipfs.kleros.io/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://ipfs.kleros.io/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?","answers":[{"id":"0x01","title":"Yes","reserved":false},{"id":"0x02","title":"No","reserved":false},{"id":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","title":"Answered Too Soon","reserved":true}],"policyURI":"/ipfs/QmZ5XaV2RVgBADq5qMpbuEwgCuPZdRgCeu8rhGtJWLV6yz","frontendUrl":"https://reality.eth.limo/app/#!/question/0xe78996a233895be74a66f451f1019ca9734205cc-0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39","arbitrableChainID":"100","arbitrableAddress":"0x2e39b8f43d0870ba896f516f78f57cde773cf805","arbitratorChainID":"421614","arbitratorAddress":"0xD08Ab99480d02bf9C092828043f611BcDFEA917b","category":"Oracle","lang":"en_US","specification":"KIP99"}`,
40-
`{"title":"Add an entry to Ledger Contract Domain Name registry v2","description":"Someone requested to add an entry to Ledger Contract Domain Name registry v2","question":"Does the entry comply with the required criteria?","answers":[{"title":"Yes, Add It","description":"Select this if you think the entry complies with the required criteria and should be added."},{"title":"No, Don't Add It","description":"Select this if you think the entry does not comply with the required criteria and should not be added."}],"policyURI":"/ipfs/QmW3nQcMW2adyqe6TujRTYkyq26PiDqcmmTjdgKiz9ynPV","frontendUrl":"https://curate.kleros.io/tcr/100/0x957a53a994860be4750810131d9c876b2f52d6e1/0xc2c1aa705632f53051f22a9f65967c0944370020a7489aba608bd0d755ca1234","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curation","specification":"KIP0X","lang":"en_US"}`,
41-
`{"title":"Omen Question: News & Politics","description":"This reality dispute has been created by Omen, we advise you to read [the Omen Rules](https://cdn.kleros.link/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx) and consult the evidence provided in [the Market Comments](https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800).","question":"**Assuming that today is December 20th 2020, will Joe Biden win the 2020 United States presidential election?**","answers":[{"title":"Yes"},{"title":"No"}],"policyURI":"/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx","frontendUrl":"https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Oracle","specification":"KIP0X","lang":"en_US"}`,
42-
`{"title":"Proof of Humanity Registration Request","description":"A request to register the specified entry to a list of provable humans.","question":"Should the request to register be accepted?","answers":[{"title":"Yes","description":"Accept the request to register the entry."},{"title":"No","description":"Deny the request."}],"policyURI":"/ipfs/QmYPf2fdSyr9BiSy6pJFUmB1oTUPwg6dhEuFqL1n4ZosgH","frontendUrl":"https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3?network=mainnet","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curated List","specification":"KIP0X","lang":"en_US"}`,
39+
`{"title":"A reality.eth question","description":"A reality.eth question has been raised to arbitration.","question":"**Kleros Moderate:** Did the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://ipfs.kleros.io/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://ipfs.kleros.io/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?","answers":[{"id":"0x01","title":"Yes","reserved":false},{"id":"0x02","title":"No","reserved":false},{"id":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","title":"Answered Too Soon","reserved":true}],"policyURI":"/ipfs/QmZ5XaV2RVgBADq5qMpbuEwgCuPZdRgCeu8rhGtJWLV6yz","frontendUrl":"https://reality.eth.limo/app/#!/question/0xe78996a233895be74a66f451f1019ca9734205cc-0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39","arbitrableChainID":"100","arbitrableAddress":"0x2e39b8f43d0870ba896f516f78f57cde773cf805","arbitratorChainID":"421614","arbitratorAddress":"0xD08Ab99480d02bf9C092828043f611BcDFEA917b","category":"Oracle","lang":"en_US","specification":"KIP99","version": "1.0"}`,
40+
`{"title":"Add an entry to Ledger Contract Domain Name registry v2","description":"Someone requested to add an entry to Ledger Contract Domain Name registry v2","question":"Does the entry comply with the required criteria?","answers":[{"title":"Yes, Add It","description":"Select this if you think the entry complies with the required criteria and should be added."},{"title":"No, Don't Add It","description":"Select this if you think the entry does not comply with the required criteria and should not be added."}],"policyURI":"/ipfs/QmW3nQcMW2adyqe6TujRTYkyq26PiDqcmmTjdgKiz9ynPV","frontendUrl":"https://curate.kleros.io/tcr/100/0x957a53a994860be4750810131d9c876b2f52d6e1/0xc2c1aa705632f53051f22a9f65967c0944370020a7489aba608bd0d755ca1234","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curation","specification":"KIP0X","lang":"en_US","version": "1.0"}`,
41+
`{"title":"Omen Question: News & Politics","description":"This reality dispute has been created by Omen, we advise you to read [the Omen Rules](https://cdn.kleros.link/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx) and consult the evidence provided in [the Market Comments](https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800).","question":"**Assuming that today is December 20th 2020, will Joe Biden win the 2020 United States presidential election?**","answers":[{"title":"Yes"},{"title":"No"}],"policyURI":"/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx","frontendUrl":"https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Oracle","specification":"KIP0X","lang":"en_US","version": "1.0"}`,
42+
`{"title":"Proof of Humanity Registration Request","description":"A request to register the specified entry to a list of provable humans.","question":"Should the request to register be accepted?","answers":[{"title":"Yes","description":"Accept the request to register the entry."},{"title":"No","description":"Deny the request."}],"policyURI":"/ipfs/QmYPf2fdSyr9BiSy6pJFUmB1oTUPwg6dhEuFqL1n4ZosgH","frontendUrl":"https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3?network=mainnet","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curated List","specification":"KIP0X","lang":"en_US","version": "1.0"}`,
4343
];
4444
const randomTemplate = templates[Math.floor(Math.random() * templates.length)];
4545
const nbOfChoices = 2;

kleros-sdk/.env.example

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALCHEMY_API_KEY=

kleros-sdk/README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
_Archon's successor_
44

5-
\
5+
Make sure to set the environment variables first by copying the file `.env.example`, pasting it, renaming it to `.env`, and then setting the variables.
6+
To run the data mappings tests:
7+
8+
```bash
9+
yarn run test-data-mappings
10+
```
611

712
🚧 ⚖️ 🚧
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"subCategory": "General Service",
3+
"arbitrableAddress": "0x0d67440946949fe293b45c52efd8a9b3d51e2522",
4+
"title": "Liquidity Withdrawal Transfer Ownership Agreement ",
5+
"description": "PARTIES:\nParty 1 (hereinafter referred to as the \"Seller\"):\n* Ethereum Address: 0xc4c4e8144823000d97310756d3237B305E967a09\n\nParty 2 (hereinafter referred to as the \"Buyer\"):\n* Ethereum Address: 0x213fea050A0dA676E97B4dc40e37E985008EA1a0\n\nRECITALS\n\nA. The Seller is the owner of an ERC-20 token contract, whose liquidity is locked on the UNCX.network platform.\nB. The \"Rights'' herein refer to the ability to demand liquidity withdrawal of the aforementioned ERC-20 token through the UNCX.network service by having the designated rights-holder's address assigned to the Gudetama in the contract 0x257EeF05f232B566cD0aF298Ec0B45C2C18d16c7 on the Ethereum chain.\n\nAGREEMENT\n\nTransfer of Rights:\n1.1. The transfer shall be completed by 12:00, Wednesday 20, December 2023 EDT, to the Buyer at the ETH wallet address: 0x8e6f7b23Cdf06db96FD96F4aF8369c0131FAf0F6.\n\nPayment:\n2.1. Upon successful fulfillment of 1.1, the Buyer shall transfer the full amount of 1,4 ETH to the Seller.\n\nNo Partial Payment:\n3.1. There shall be no conditions under which partial payment can be demanded by the Seller, unless the Buyer chooses to do so voluntarily through the Escrow contract.\n\nKleros Escrow:\n4.1. Any disputes arising from this Agreement shall be automatically escalated to the Court of Kleros after both parties fund the dispute resolution deposit. Should one side fail to do so in full, the other party will automatically win the dispute.",
6+
"sender": "0x213fea050A0dA676E97B4dc40e37E985008EA1a0",
7+
"receiver": "0xc4c4e8144823000d97310756d3237B305E967a09",
8+
"amount": "1.4",
9+
"timeout": 8640000000000000,
10+
"token": {
11+
"name": "Ethereum",
12+
"ticker": "ETH",
13+
"symbolURI": "/static/media/eth.33901ab6.png",
14+
"address": null,
15+
"decimals": 18
16+
},
17+
"extraData": {
18+
"Contract Information": "PARTIES:\nParty 1 (hereinafter referred to as the \"Seller\"):\n* Ethereum Address: 0xc4c4e8144823000d97310756d3237B305E967a09\n\nParty 2 (hereinafter referred to as the \"Buyer\"):\n* Ethereum Address: 0x213fea050A0dA676E97B4dc40e37E985008EA1a0\n\nRECITALS\n\nA. The Seller is the owner of an ERC-20 token contract, whose liquidity is locked on the UNCX.network platform.\nB. The \"Rights'' herein refer to the ability to demand liquidity withdrawal of the aforementioned ERC-20 token through the UNCX.network service by having the designated rights-holder's address assigned to the Gudetama in the contract 0x257EeF05f232B566cD0aF298Ec0B45C2C18d16c7 on the Ethereum chain.\n\nAGREEMENT\n\nTransfer of Rights:\n1.1. The transfer shall be completed by 12:00, Wednesday 20, December 2023 EDT, to the Buyer at the ETH wallet address: 0x8e6f7b23Cdf06db96FD96F4aF8369c0131FAf0F6.\n\nPayment:\n2.1. Upon successful fulfillment of 1.1, the Buyer shall transfer the full amount of 1,4 ETH to the Seller.\n\nNo Partial Payment:\n3.1. There shall be no conditions under which partial payment can be demanded by the Seller, unless the Buyer chooses to do so voluntarily through the Escrow contract.\n\nKleros Escrow:\n4.1. Any disputes arising from this Agreement shall be automatically escalated to the Court of Kleros after both parties fund the dispute resolution deposit. Should one side fail to do so in full, the other party will automatically win the dispute."
19+
},
20+
"invoice": false,
21+
"category": "Escrow",
22+
"question": "Which party abided by terms of the contract?",
23+
"rulingOptions": {
24+
"type": "single-select",
25+
"titles": [
26+
"Refund Sender",
27+
"Pay Receiver"
28+
],
29+
"descriptions": [
30+
"Select to return funds to the Sender",
31+
"Select to release funds to the Receiver"
32+
]
33+
},
34+
"evidenceDisplayInterfaceURI": "/ipfs/QmfPnVdcCjApHdiCC8wAmyg5iR246JvVuQGQjQYgtF8gZU/index.html",
35+
"aliases": {
36+
"0x213fea050A0dA676E97B4dc40e37E985008EA1a0": "sender",
37+
"0xc4c4e8144823000d97310756d3237B305E967a09": "receiver"
38+
}
39+
}

0 commit comments

Comments
 (0)