hardhat.config.ts 2.84 KB
Newer Older
1 2
import { HardhatUserConfig, subtask } from 'hardhat/config'
import { TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS } from 'hardhat/builtin-tasks/task-names'
3 4 5
import { getenv } from '@eth-optimism/core-utils'
import * as dotenv from 'dotenv'

6 7
import { configSpec } from './src/config/deploy'

8 9 10 11
// Hardhat plugins
import '@nomiclabs/hardhat-ethers'
import '@nomiclabs/hardhat-waffle'
import '@nomiclabs/hardhat-etherscan'
12
import '@eth-optimism/hardhat-deploy-config'
13
import '@typechain/hardhat'
14
import 'solidity-coverage'
15 16
import 'hardhat-gas-reporter'
import 'hardhat-deploy'
17 18 19 20 21 22 23

// Hardhat tasks
import './tasks'

// Load environment variables from .env
dotenv.config()

24 25 26 27 28 29 30 31
subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS).setAction(
  async (_, __, runSuper) => {
    const paths = await runSuper()

    return paths.filter((p: string) => !p.endsWith('.t.sol'))
  }
)

32 33 34 35
const config: HardhatUserConfig = {
  networks: {
    optimism: {
      chainId: 10,
36 37 38 39 40 41
      url: 'https://mainnet.optimism.io',
      verify: {
        etherscan: {
          apiKey: getenv('OPTIMISTIC_ETHERSCAN_API_KEY'),
        },
      },
42
    },
43
    'optimism-kovan': {
44 45
      chainId: 69,
      url: 'https://kovan.optimism.io',
46 47 48 49 50
      verify: {
        etherscan: {
          apiKey: getenv('OPTIMISTIC_ETHERSCAN_API_KEY'),
        },
      },
51
    },
52
    ethereum: {
53
      chainId: 1,
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
      url: `https://mainnet.infura.io/v3/${getenv('INFURA_PROJECT_ID')}`,
      verify: {
        etherscan: {
          apiKey: getenv('ETHEREUM_ETHERSCAN_API_KEY'),
        },
      },
    },
    goerli: {
      chainId: 5,
      url: `https://goerli.infura.io/v3/${getenv('INFURA_PROJECT_ID')}`,
      verify: {
        etherscan: {
          apiKey: getenv('ETHEREUM_ETHERSCAN_API_KEY'),
        },
      },
    },
    ropsten: {
      chainId: 3,
      url: `https://ropsten.infura.io/v3/${getenv('INFURA_PROJECT_ID')}`,
      verify: {
        etherscan: {
          apiKey: getenv('ETHEREUM_ETHERSCAN_API_KEY'),
        },
      },
    },
    kovan: {
      chainId: 42,
      url: `https://kovan.infura.io/v3/${getenv('INFURA_PROJECT_ID')}`,
      verify: {
        etherscan: {
          apiKey: getenv('ETHEREUM_ETHERSCAN_API_KEY'),
        },
      },
87 88
    },
  },
89 90 91 92
  paths: {
    deployConfig: './config/deploy',
  },
  deployConfigSpec: configSpec,
93 94 95
  mocha: {
    timeout: 50000,
  },
96 97 98 99
  typechain: {
    outDir: 'dist/types',
    target: 'ethers-v5',
  },
100 101
  solidity: {
    compilers: [
102 103 104 105 106 107
      {
        version: '0.8.15',
        settings: {
          optimizer: { enabled: true, runs: 10_000 },
        },
      },
108 109 110 111 112 113 114 115 116 117 118 119
    ],
    settings: {
      metadata: {
        bytecodeHash: 'none',
      },
      outputSelection: {
        '*': {
          '*': ['metadata', 'storageLayout'],
        },
      },
    },
  },
120
  namedAccounts: {
121 122 123 124
    deployer: {
      default: `ledger://${getenv('LEDGER_ADDRESS')}`,
      hardhat: 0,
    },
125 126 127 128
  },
}

export default config