dsa-connectors/hardhat.config.ts

145 lines
4.0 KiB
TypeScript
Raw Normal View History

2021-11-28 17:53:16 +00:00
import "@nomiclabs/hardhat-waffle";
import "@nomiclabs/hardhat-ethers";
import "@tenderly/hardhat-tenderly";
import "@nomiclabs/hardhat-etherscan";
import "@nomiclabs/hardhat-web3";
import "hardhat-deploy";
import "hardhat-deploy-ethers";
import "@typechain/hardhat";
import { resolve } from "path";
import { config as dotenvConfig } from "dotenv";
import { HardhatUserConfig } from "hardhat/config";
import { NetworkUserConfig } from "hardhat/types";
import { utils } from "ethers";
import Web3 from "web3";
2022-02-27 13:43:35 +00:00
import { network } from "hardhat";
2021-11-28 17:53:16 +00:00
dotenvConfig({ path: resolve(__dirname, "./.env") });
const chainIds = {
ganache: 1337,
hardhat: 31337,
mainnet: 1,
avalanche: 43114,
polygon: 137,
2021-12-05 17:21:55 +00:00
arbitrum: 42161,
2022-02-14 02:58:00 +00:00
optimism: 10,
2022-03-14 11:20:17 +00:00
fantom: 250
2021-11-28 17:53:16 +00:00
};
const alchemyApiKey = process.env.ALCHEMY_API_KEY;
if (!alchemyApiKey) {
2021-12-05 17:19:39 +00:00
throw new Error("Please set your ALCHEMY_API_KEY in a .env file");
2021-11-28 17:53:16 +00:00
}
2021-12-10 22:46:46 +00:00
const PRIVATE_KEY = process.env.PRIVATE_KEY;
2021-12-05 17:19:39 +00:00
const ETHERSCAN_API = process.env.ETHERSCAN_API_KEY;
const POLYGONSCAN_API = process.env.POLYGON_API_KEY;
const ARBISCAN_API = process.env.ARBISCAN_API_KEY;
const SNOWTRACE_API = process.env.SNOWTRACE_API_KEY;
2022-03-12 16:54:50 +00:00
const FANTOMSCAN_API = process.env.FANTOM_API_KEY;
2022-03-14 16:27:19 +00:00
const OPTIMISM_API = process.env.OPTIMISM_API_KEY;
2022-03-12 16:54:50 +00:00
const mnemonic = process.env.MNEMONIC ?? "test test test test test test test test test test test junk";
2021-12-10 22:12:05 +00:00
2021-12-21 12:35:49 +00:00
const networkGasPriceConfig: Record<string, string> = {
2022-03-12 16:54:50 +00:00
mainnet: "160",
polygon: "50",
avalanche: "50",
arbitrum: "2"
};
2021-12-21 12:35:49 +00:00
2021-12-10 22:59:04 +00:00
function createConfig(network: string) {
2021-12-10 22:55:13 +00:00
return {
url: getNetworkUrl(network),
2022-03-12 15:34:42 +00:00
accounts: !!PRIVATE_KEY ? [`0x${PRIVATE_KEY}`] : { mnemonic }
2022-01-14 18:34:47 +00:00
// gasPrice: 1000000, // 0.0001 GWEI
2021-12-10 22:55:13 +00:00
};
}
2021-11-28 17:53:16 +00:00
function getNetworkUrl(networkType: string) {
2022-03-12 16:54:50 +00:00
if (networkType === "avalanche") return "https://api.avax.network/ext/bc/C/rpc";
else if (networkType === "polygon") return `https://polygon-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
else if (networkType === "arbitrum") return `https://arb-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
else if (networkType === "optimism") return `https://opt-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
else if (networkType === "fantom") return `https://rpc.ftm.tools/`;
2021-11-28 17:53:16 +00:00
else return `https://eth-mainnet.alchemyapi.io/v2/${alchemyApiKey}`;
}
2021-12-05 17:19:39 +00:00
function getScanApiKey(networkType: string) {
if (networkType === "avalanche") return SNOWTRACE_API;
else if (networkType === "polygon") return POLYGONSCAN_API;
else if (networkType === "arbitrum") return ARBISCAN_API;
2022-03-12 16:54:50 +00:00
else if (networkType === "fantom") return FANTOMSCAN_API;
2022-03-14 16:27:19 +00:00
else if (networkType === "fantom") return FANTOMSCAN_API;
2022-02-27 13:43:35 +00:00
else if (networkType === "optimism") return OPTIMISM_API;
2021-12-05 17:19:39 +00:00
else return ETHERSCAN_API;
2021-11-28 17:53:16 +00:00
}
2021-12-05 17:19:39 +00:00
2021-11-28 17:53:16 +00:00
/**
* @type import('hardhat/config').HardhatUserConfig
*/
2021-12-05 17:19:39 +00:00
const config: HardhatUserConfig = {
2021-11-28 17:53:16 +00:00
solidity: {
compilers: [
{
version: "0.7.6",
settings: {
optimizer: {
enabled: true,
2022-03-12 16:54:50 +00:00
runs: 200
}
}
2021-11-28 17:53:16 +00:00
},
{
2022-03-12 16:54:50 +00:00
version: "0.6.0"
2021-11-28 17:53:16 +00:00
},
{
2022-03-12 16:54:50 +00:00
version: "0.6.2"
2021-11-28 17:53:16 +00:00
},
{
2022-03-12 16:54:50 +00:00
version: "0.6.5"
}
]
2021-11-28 17:53:16 +00:00
},
networks: {
hardhat: {
accounts: {
2022-03-12 16:54:50 +00:00
mnemonic
2021-11-28 17:53:16 +00:00
},
chainId: chainIds.hardhat,
forking: {
2022-03-12 16:54:50 +00:00
url: String(getNetworkUrl(String(process.env.networkType)))
}
2021-11-28 17:53:16 +00:00
},
2021-12-10 22:59:04 +00:00
mainnet: createConfig("mainnet"),
polygon: createConfig("polygon"),
avalanche: createConfig("avalanche"),
arbitrum: createConfig("arbitrum"),
2022-01-14 18:34:47 +00:00
optimism: createConfig("optimism"),
2022-03-14 11:20:17 +00:00
fantom: createConfig("fantom")
2021-11-28 17:53:16 +00:00
},
paths: {
artifacts: "./artifacts",
cache: "./cache",
sources: "./contracts",
2022-03-12 16:54:50 +00:00
tests: "./test"
2021-11-28 17:53:16 +00:00
},
2022-02-27 13:43:35 +00:00
etherscan: {
2022-03-12 16:54:50 +00:00
apiKey: getScanApiKey(String(process.env.networkType))
2021-11-28 17:53:16 +00:00
},
typechain: {
outDir: "typechain",
2022-03-12 16:54:50 +00:00
target: "ethers-v5"
2021-11-28 17:53:16 +00:00
},
mocha: {
2022-03-12 16:54:50 +00:00
timeout: 10000 * 1000 // 10,000 seconds
}
2021-12-05 17:19:39 +00:00
// tenderly: {
// project: process.env.TENDERLY_PROJECT,
// username: process.env.TENDERLY_USERNAME,
// },
2021-11-28 17:53:16 +00:00
};
export default config;