kleros/kleros-v2

View on GitHub
contracts/hardhat.config.ts

Summary

Maintainability
A
0 mins
Test Coverage
/* eslint-disable node/no-missing-require */
import * as dotenv from "dotenv";
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-chai-matchers";
import "@nomiclabs/hardhat-solhint";
import "@typechain/hardhat";
import "hardhat-deploy-tenderly";
import "hardhat-gas-reporter";
import "solidity-coverage";
import "hardhat-deploy";
import "hardhat-deploy-ethers";
import "hardhat-watcher";
import "hardhat-docgen";
import "hardhat-contract-sizer";
import "hardhat-tracer";
require("./scripts/simulations/tasks");
require("./scripts/populatePolicyRegistry");
require("./scripts/populateCourts");

dotenv.config();

const config: HardhatUserConfig = {
  solidity: {
    version: "0.8.24",
    settings: {
      optimizer: {
        enabled: true,
        runs: 100,
      },
    },
  },
  paths: {
    sources: "./src",
    cache: "./cache_hardhat",
  },
  networks: {
    hardhat: {
      live: false,
      saveDeployments: true,
      allowUnlimitedContractSize: true,
      tags: ["test", "local"],
      companionNetworks: {
        home: "hardhat",
        foreign: "hardhat",
      },
    },
    localhost: {
      url: `http://127.0.0.1:8545`,
      chainId: 31337,
      saveDeployments: true,
      tags: ["test", "local"],
      companionNetworks: {
        home: "localhost",
        foreign: "localhost",
      },
    },
    dockerhost: {
      url: `http://host.docker.internal:8545`,
      chainId: 31337,
      saveDeployments: true,
      tags: ["test", "local"],
      companionNetworks: {
        foreign: "localhost",
      },
    },
    mainnetFork: {
      chainId: 1,
      url: `http://127.0.0.1:8545`,
      forking: {
        url: `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`,
      },
      accounts: process.env.MAINNET_PRIVATE_KEY !== undefined ? [process.env.MAINNET_PRIVATE_KEY] : [],
      live: false,
      saveDeployments: false,
      tags: ["test", "local"],
      companionNetworks: {
        home: "arbitrum",
      },
    },
    arbitrumSepoliaFork: {
      chainId: 421614,
      url: `http://127.0.0.1:8545`,
      forking: {
        url: process.env.ARBITRUM_SEPOLIA_RPC ?? "https://sepolia-rollup.arbitrum.io/rpc",
      },
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: false,
      saveDeployments: true,
      tags: ["test", "local"],
      companionNetworks: {
        foreign: "sepolia",
      },
    },

    // Home chain ---------------------------------------------------------------------------------
    arbitrumSepolia: {
      chainId: 421614,
      url: process.env.ARBITRUM_SEPOLIA_RPC ?? "https://sepolia-rollup.arbitrum.io/rpc",
      accounts:
        (process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_1 && [
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_1 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_2 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_3 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_4 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_5 as string,
        ]) ||
        (process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : []),
      live: true,
      saveDeployments: true,
      tags: ["staging", "home", "layer2"],
      companionNetworks: {
        foreignChiado: "chiado",
        foreignSepolia: "sepolia",
      },
      verify: {
        etherscan: {
          apiUrl: "https://api-sepolia.arbiscan.io",
          apiKey: process.env.ARBISCAN_API_KEY,
        },
      },
    },
    arbitrumSepoliaDevnet: {
      chainId: 421614,
      url: process.env.ARBITRUM_SEPOLIA_RPC ?? "https://sepolia-rollup.arbitrum.io/rpc",
      accounts:
        (process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_1 && [
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_1 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_2 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_3 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_4 as string,
          process.env.ARB_GOERLI_PRIVATE_KEY_WALLET_5 as string,
        ]) ||
        (process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : []),
      live: true,
      saveDeployments: true,
      tags: ["staging", "home", "layer2"],
      companionNetworks: {
        foreignChiado: "chiadoDevnet",
        foreignSepolia: "sepoliaDevnet",
      },
      verify: {
        etherscan: {
          apiUrl: "https://api-sepolia.arbiscan.io",
          apiKey: process.env.ARBISCAN_API_KEY,
        },
      },
    },
    arbitrum: {
      chainId: 42161,
      url: "https://arb1.arbitrum.io/rpc",
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["production", "home", "layer2"],
      companionNetworks: {
        foreign: "mainnet",
      },
      verify: {
        etherscan: {
          apiKey: process.env.ARBISCAN_API_KEY,
        },
      },
    },
    // Foreign chain ---------------------------------------------------------------------------------
    sepolia: {
      chainId: 11155111,
      url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`,
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["staging", "foreign", "layer1"],
      companionNetworks: {
        home: "arbitrumSepolia",
      },
    },
    sepoliaDevnet: {
      chainId: 11155111,
      url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`,
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["staging", "foreign", "layer1"],
      companionNetworks: {
        home: "arbitrumSepoliaDevnet",
      },
    },
    mainnet: {
      chainId: 1,
      url: `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`,
      accounts: process.env.MAINNET_PRIVATE_KEY !== undefined ? [process.env.MAINNET_PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["production", "foreign", "layer1"],
      companionNetworks: {
        home: "arbitrum",
      },
    },
    chiado: {
      chainId: 10200,
      url: "https://rpc.chiado.gnosis.gateway.fm",
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["staging", "foreign", "layer1"],
      companionNetworks: {
        home: "arbitrumSepolia",
      },
      verify: {
        etherscan: {
          apiUrl: "https://gnosis-chiado.blockscout.com",
          apiKey: "",
        },
      },
    },
    chiadoDevnet: {
      chainId: 10200,
      url: "https://rpc.chiado.gnosis.gateway.fm",
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["staging", "foreign", "layer1"],
      companionNetworks: {
        home: "arbitrumSepoliaDevnet",
      },
      verify: {
        etherscan: {
          apiUrl: "https://gnosis-chiado.blockscout.com",
          apiKey: "",
        },
      },
    },
    gnosischain: {
      chainId: 100,
      url: `https://rpc.gnosis.gateway.fm`,
      accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
      live: true,
      saveDeployments: true,
      tags: ["production", "foreign", "layer1"],
      verify: {
        etherscan: {
          apiKey: process.env.GNOSISSCAN_API_KEY,
        },
      },
    },
  },
  namedAccounts: {
    deployer: {
      default: 0,
    },
    relayer: {
      default: 1,
    },
    bridger: {
      default: 2,
    },
    challenger: {
      default: 3,
    },
    firstWallet: {
      default: "0x1cC9304B31F05d27470ccD855b05310543b70f17",
    },
    secondWallet: {
      default: "0x4D74a4FD4057a770da74b0C3e9fa8A02f7f09c94",
    },
    thirdWallet: {
      default: "0xBe7ee23877D530b8a17971CfDA7B5925b57e87B1",
    },
    fourthWallet: {
      default: "0x01ba2b3D0eceAD6358aEcD508221A70f6CA4f6ea",
    },
    fifthWallet: {
      default: "0xE64DC94D545C10b2364F4aBAf9F6F416dAcED13a",
    },
  },
  gasReporter: {
    enabled: process.env.REPORT_GAS !== undefined ? process.env.REPORT_GAS === "true" : false,
    currency: "USD",
  },
  verify: {
    etherscan: {
      apiKey: process.env.ETHERSCAN_API_KEY_FIX,
    },
  },
  watcher: {
    compilation: {
      tasks: ["compile"],
      files: ["./contracts"],
      verbose: true,
    },
    testArbitration: {
      tasks: [
        { command: "compile", params: { quiet: true } },
        {
          command: "test",
          params: {
            noCompile: true,
            testFiles: ["./test/arbitration/index.ts"],
          },
        },
      ],
      files: ["./test/**/*", "./src/**/*"],
    },
  },
  docgen: {
    path: "./docs",
    clear: true,
    runOnCompile: false,
  },
  mocha: {
    timeout: 20000,
  },
  tenderly: {
    project: process.env.TENDERLY_PROJECT !== undefined ? process.env.TENDERLY_PROJECT : "kleros-v2",
    username: process.env.TENDERLY_USERNAME !== undefined ? process.env.TENDERLY_USERNAME : "",
  },
  external: {
    // https://github.com/wighawag/hardhat-deploy#importing-deployment-from-other-projects-with-truffle-support
    deployments: {
      arbitrumSepolia: ["../node_modules/@kleros/vea-contracts/deployments/arbitrumSepolia"],
      arbitrumSepoliaDevnet: ["../node_modules/@kleros/vea-contracts/deployments/arbitrumSepolia"],
      arbitrum: ["../node_modules/@kleros/vea-contracts/deployments/arbitrum"],
      chiado: ["../node_modules/@kleros/vea-contracts/deployments/chiado"],
      chiadoDevnet: ["../node_modules/@kleros/vea-contracts/deployments/chiado"],
      gnosischain: ["../node_modules/@kleros/vea-contracts/deployments/gnosischain"],
      sepolia: ["../node_modules/@kleros/vea-contracts/deployments/sepolia"],
      sepoliaDevnet: ["../node_modules/@kleros/vea-contracts/deployments/sepolia"],
      mainnet: ["../node_modules/@kleros/vea-contracts/deployments/mainnet"],
    },
  },
};

export default config;