@kleros/kleros-v2-contracts
Smart contracts for Kleros v2
Deployments
Refresh the list of deployed contracts by running ./scripts/generateDeploymentsMarkdown.sh.
Official Testnet
Chiado
- ArbitrableExample
- DisputeResolver
- DisputeTemplateRegistry
- ForeignGatewayOnGnosis
- SortitionSumTreeFactory
- TokenBridge
- WETH
- WETHFaucet
- WPNKFaucet
- WrappedPinakionV2
- xKlerosLiquidV2
Goerli
Arbitrum Goerli
- PNK
- ArbitrableExample
- BlockHashRNG
- DAI
- DAIFaucet
- DisputeKitClassic
- DisputeResolver
- DisputeTemplateRegistry
- HomeGatewayToGnosis
- KlerosCore
- PNKFaucet
- PinakionV2
- PolicyRegistry
- RandomizerRNG
- SortitionModule
- WETH
- WETHFaucet
Devnet
Chiado
- ArbitrableExample
- DisputeResolver
- DisputeTemplateRegistry
- ForeignGatewayOnGnosis
- WETH
- WETHFaucet
- WPNKFaucet
- WrappedPinakionV2
Goerli
Arbitrum Goerli
- PNK
- ArbitrableExample
- DAI
- DAIFaucet
- DisputeKitClassic
- DisputeResolver
- DisputeTemplateRegistry
- HomeGatewayToGnosis
- KlerosCore
- PNKFaucet
- PinakionV2
- PolicyRegistry
- RandomizerRNG
- SortitionModule
- WETH
- WETHFaucet
Getting Started
Install the Dependencies
yarn install Run Tests
yarn test Compile the Contracts
yarn build Run Linter on Files
yarn lint Fix Linter Issues on Files
yarn fix Deploy Instructions
NOTICE: the commands below work only if you are inside the contracts/ directory.
0. Set the Environment Variables
Copy .env.example file as .env and edit it accordingly.
cp .env.example .env The following env vars are required:
PRIVATE_KEY: the private key of the deployer account used for the testnets.MAINNET_PRIVATE_KEY: the private key of the deployer account used for Mainnet.INFURA_API_KEY: the API key for infura.
The ones below are optional:
ETHERSCAN_API_KEY: to verify the source of the newly deployed contracts on Etherscan.ARBISCAN_API_KEY: to verify the source of the newly deployed contracts on Arbitrum.GNOSISSCAN_API_KEY: to verify the source of the newly deployed contracts on Gnosis chain.
1. Update the Constructor Parameters (optional)
If some of the constructor parameters (such as the Meta Evidence) needs to change, you need to update the files in the deploy/ directory.
2. Deploy to a Local Network
The complete deployment is multi-chain, so a deployment to the local network can only simulate either the Home chain or the Foreign chain.
Shell 1: the node
yarn hardhat node --tags nothing Shell 2: the deploy script
yarn deploy --network localhost --tags <Arbitration|VeaMock|ForeignGatewayOnEthereum|HomeGateway> 3. Deploy to Public Testnets
# ArbitrumGoerli to Chiado yarn deploy --network arbitrumGoerli --tags Arbitration yarn deploy --network arbitrumGoerli --tags HomeArbitrable yarn deploy --network chiado --tags ForeignGatewayOnGnosis yarn deploy --network chiado --tags KlerosLiquidOnGnosis yarn deploy --network chiado --tags ForeignArbitrable yarn deploy --network arbitrumGoerli --tags HomeGatewayToGnosis # Goerli yarn deploy --network goerli --tags ForeignGatewayOnEthereum yarn deploy --network goerli --tags ForeignArbitrable yarn deploy --network arbitrumGoerli --tags HomeGatewayToEthereum 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.
4. Deploy a Devnet on Public Testnets
Same steps as above but append Devnet to the --network parameter.
Running Test Fixtures
Shell 1: the node
yarn hardhat node --tags Arbitration,VeaMock Shell 2: the test scripts
yarn test --network localhost 4. Verify the Source Code
This must be done for each network separately.
# explorer yarn etherscan-verify --network <arbitrumGoerli|arbitrum|chiado|gnosischain|goerli|mainnet> # sourcify yarn sourcify --network <arbitrumGoerli|arbitrum|chiado|gnosischain|goerli|mainnet> Ad-hoc procedures
Populating the policy registry and courts
1/ Export the registry data from V1
for network in mainnet gnosischain do yarn hardhat run scripts/getPoliciesV1.ts --network $network | tee config/policies.v1.$network.json yarn hardhat run scripts/getCourtsV1.ts --network $network | tee config/courts.v1.$network.json done 2/ Import the data to V2 - Local Network
:warning: By default this script populates from *.mainnet.json. To populate from *.gnosischain.json, set the variable USE_GNOSIS to true inside scripts/populateCourts.ts.
:warning: It is possible to switch to testnet-friendly court parameters by setting the variable TESTING_PARAMETERS to true inside scripts/populateCourts.ts.
Shell 1:
yarn hardhat node --tags Arbitration Shell 2:
yarn hardhat run scripts/populateCourts.ts --network localhost yarn hardhat run scripts/populatePolicyRegistry.ts --network localhost 3/ Import the data to V2 - Public Testnet
yarn hardhat run scripts/populateCourts.ts --network arbitrumGoerli yarn hardhat run scripts/populatePolicyRegistry.ts --network arbitrumGoerli Generate deployment artifacts for existing contracts
Usage
scripts/generateDeploymentArtifact.sh <network> <address> Example: WETH on Gnosis chain
scripts/generateDeploymentArtifact.sh gnosischain 0xf8d1677c8a0c961938bf2f9adc3f3cfda759a9d9 > deployments/gnosischain/WETH.json Push the contracts to a Tenderly project
Ensure that your $TENDERLY_PROJECT and $TENDERLY_USERNAME is set correctly in .env.
yarn tenderly-verify --network goerli yarn tenderly-verify --network arbitrumGoerli