Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kleros/kleros-v2

Kleros version 2
https://github.com/kleros/kleros-v2

arbitrator backend blockchain dispute-resolution ethereum frontend kleros kleros-v2 layer2 middleware monorepo odr protocol smart-contracts solidity typescript under-construction

Last synced: about 2 months ago
JSON representation

Kleros version 2

Awesome Lists containing this project

README

        



Kleros


Kleros v2


OpenSSF Scorecard
Security Rating
Quality Gate Status
Bugs
Reliability Rating
Maintainability Rating

Unit testing
Conventional Commits
Commitizen Friendly
Styled with Prettier

GitPoap badge

---

## Deployments

##### โ›“๏ธ [Contracts addresses](contracts/README.md#deployments)

##### ๐Ÿ—ƒ๏ธ [Subgraph endpoints](subgraph/README.md#deployments)

##### โš–๏ธ [Web frontend](web/README.md#court-deployments)

## Content

| Package | Description |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[bots](/bots)** | Automation of the on-chain upkeep of the smart contracts. Anyone willing to spend some gas may run these bots and contribute to the upkeep operations. |
| **[bot-pinner](/bot-pinner)** | Replication and pinning of the IPFS content produced by the court, such as the pieces of evidence submitted in a case. |
| **[contracts](/contracts)** | Smart contracts of the arbitration protocol. |
| **[kleros-sdk](/kleros-sdk)** | SDK which facilitates the creation of arbitrable applications, the interactions with the arbitrator, the rendering of the dispute and evidence information. |
| **[subgraph](/subgraph)** | The indexing layer. |
| **[web](/web)** | The court frontend intended for the jurors and parties in a dispute. |

## Toolchain:

- Solidity 0.8
- Hardhat
- Ethers
- Waffle
- Typescript
- Node 16
- Yarn 3 without [PlugnPlay](https://yarnpkg.com/getting-started/migration/#switching-to-plugnplay)

## Contributing

### Prerequisites

- Install NodeJS 16:
- on Red Hat Linux: `sudo dnf module install nodejs:16`
- on Ubuntu Linux: `sudo snap install node --classic`
- on MacOS via [brew](https://brew.sh/): `brew install node`
- Install Yarn v1.22: `npm install -g yarn`
- Then [upgrade](https://yarnpkg.com/getting-started/install#updating-to-the-latest-versions) Yarn to v3: `yarn set version berry`
- Install Volta.sh: `curl https://get.volta.sh | bash`
- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) to run the local graph node.
- Shell utilities: [jq](https://stedolan.github.io/jq/), [yq](https://mikefarah.gitbook.io/yq/)
- on Red Hat Linux: `sudo dnf install jq yq`
- on Ubuntu Linux: `sudo snap install jq yq`
- on MacOS via [brew](https://brew.sh/): `brew install jq yq`

### Install the dependencies

```bash
$ yarn install

# Foundry libraries
$ git submodule update --init --recursive -j 4
```

### [Hardhat CLI auto-completion](https://hardhat.org/guides/shorthand.html) (optional)

```bash
$ npm i -g hardhat-shorthand

$ hardhat-completion install
โœ” Which Shell do you use ? ยท bash
โœ” We will install completion to ~/.bashrc, is it ok ? (y/N) ยท true

$ exec bash
```

### Full Stack Local Deployment

Run the commands below from the top-level folder. Alternatively, it is possible to `cd` into the relevant package first and then call yarn without `workspace @kleros/xxxx`.

#### Shortcut using tmux

If you have **[tmux](https://github.com/tmux/tmux/wiki)** installed, you can get started quickly with a single command.

```bash
$ yarn local-stack
```

![terminal](/docs/local-stack-2.png)

#### Shell 1 - Local RPC with Contracts Deployed

```bash
$ yarn workspace @kleros/kleros-v2-contracts start-local
...
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

```

โณ Wait until deployment is complete.

#### Shell 2 - Local Graph Node

```bash
$ yarn workspace @kleros/kleros-v2-subgraph start-local-indexer
...
graph-node-graph-node-1 | INFO Successfully connected to IPFS node at: http://ipfs:5001/
graph-node-graph-node-1 | INFO Pool successfully connected to Postgres, pool: main, shard: primary, component: Store
...
graph-node-graph-node-1 | INFO Connected to Ethereum, capabilities: archive, traces, network_version: 31337, provider: mainnet-rpc-0
```

โณ Wait until the graph service is ready.

#### Shell 3 - Subgraph Rebuild and Local Deploy

:warning: This step modifies `subgraph.yaml` and creates a backup file. See further down on how to restore it.

```bash
$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local
...
โœ” Upload subgraph to IPFS

Build completed: QmZVaZQ9qcXPia9YnFEKk7D1dEDHbfyDiJi1sqJ6E1NydB

Deployed to http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local/graphql

Subgraph endpoints:
Queries (HTTP): http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local
```

#### Shell 4 - Frontend Pointing to the Local Subgraph

```bash
yarn workspace @kleros/kleros-v2-web generate
โœ” Parse Configuration
โœ” Generate outputs
โœ” Validating plugins
โœ” Resolving contracts
โœ” Running plugins
โœ” Writing to src/hooks/contracts/generated.ts

$ yarn workspace @kleros/kleros-v2-web start-local
Server running at http://localhost:1234
โœจ Built in 2.35s
```

### Redeploying

```bash
# Contracts
$ yarn workspace @kleros/kleros-v2-contracts deploy-local

# Subgraph
$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local

```

### Simulating Arbitration Activity

```bash
$ yarn workspace @kleros/kleros-v2-contracts simulate-local

```

### Stopping

Just press `Ctrl + c` in each terminal.

#### Docker containers and data removal

`yarn workspace @kleros/kleros-v2-subgraph stop-local-indexer`

#### Restoring subgraph.yaml

##### From a backup file

Every versions were saved as `subgraph.yaml.bak.`.

##### Based on the ArbitrumGoerli deployment artifacts

`yarn workspace @kleros/kleros-v2-subgraph update`

##### Based on the last commit

`git restore subgraph.yaml`