import { config as dotenvConfig } from "dotenv"; import { resolve } from "path"; dotenvConfig({ path: resolve(__dirname, "./.env") }); import { HardhatUserConfig } from "hardhat/config"; import { NetworkUserConfig } from "hardhat/types"; import "./tasks/accounts"; import "./tasks/clean"; import "@nomiclabs/hardhat-waffle"; import "hardhat-typechain"; import "solidity-coverage"; const chainIds = { ganache: 1337, goerli: 5, hardhat: 31337, kovan: 42, mainnet: 1, rinkeby: 4, ropsten: 3, }; // Ensure that we have all the environment variables we need. let mnemonic: string; if (!process.env.MNEMONIC) { throw new Error("Please set your MNEMONIC in a .env file"); } else { mnemonic = process.env.MNEMONIC; } let infuraApiKey: string; if (!process.env.INFURA_API_KEY) { throw new Error("Please set your INFURA_API_KEY in a .env file"); } else { infuraApiKey = process.env.INFURA_API_KEY; } function createTestnetConfig(network: keyof typeof chainIds): NetworkUserConfig { const url: string = "https://" + network + ".infura.io/v3/" + infuraApiKey; return { accounts: { count: 10, initialIndex: 0, mnemonic, path: "m/44'/60'/0'/0", }, chainId: chainIds[network], url, }; } const config: HardhatUserConfig = { defaultNetwork: "hardhat", networks: { hardhat: { chainId: chainIds.hardhat, }, goerli: createTestnetConfig("goerli"), kovan: createTestnetConfig("kovan"), rinkeby: createTestnetConfig("rinkeby"), ropsten: createTestnetConfig("ropsten"), }, paths: { artifacts: "./artifacts", cache: "./cache", coverage: "./coverage", coverageJson: "./coverage.json", sources: "./contracts", tests: "./test", }, solidity: { version: "0.7.4", settings: { // https://hardhat.org/hardhat-network/#solidity-optimizer-support optimizer: { enabled: true, runs: 200, }, }, }, typechain: { outDir: "typechain", target: "ethers-v5", }, }; export default config;