Copy // hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");
require("@nomiclabs/hardhat-etherscan");
require("hardhat-deploy");
require("hardhat-gas-reporter");
require("solidity-coverage");
require("dotenv").config();
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || "";
module.exports = {
solidity: {
version: "0.8.19",
settings: {
optimizer: {
enabled: true,
runs: 200
},
metadata: {
// Reduce bytecode size
bytecodeHash: "none"
}
}
},
networks: {
hardhat: {
chainId: 31337,
forking: {
url: process.env.ETHEREUM_RPC_URL,
blockNumber: 18500000 // Pin to specific block for consistency
}
},
// Mainnets
ethereum: {
url: process.env.ETHEREUM_RPC_URL,
chainId: 1,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
gasPrice: 20000000000, // 20 gwei
verify: {
etherscan: {
apiKey: process.env.ETHERSCAN_API_KEY
}
}
},
polygon: {
url: process.env.POLYGON_RPC_URL,
chainId: 137,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
gasPrice: 30000000000, // 30 gwei
verify: {
etherscan: {
apiKey: process.env.POLYGONSCAN_API_KEY,
apiUrl: "https://api.polygonscan.com"
}
}
},
bsc: {
url: process.env.BSC_RPC_URL,
chainId: 56,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
gasPrice: 5000000000, // 5 gwei
verify: {
etherscan: {
apiKey: process.env.BSCSCAN_API_KEY,
apiUrl: "https://api.bscscan.com"
}
}
},
arbitrum: {
url: process.env.ARBITRUM_RPC_URL,
chainId: 42161,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
verify: {
etherscan: {
apiKey: process.env.ARBISCAN_API_KEY,
apiUrl: "https://api.arbiscan.io"
}
}
},
optimism: {
url: process.env.OPTIMISM_RPC_URL,
chainId: 10,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
verify: {
etherscan: {
apiKey: process.env.OPTIMISTIC_API_KEY,
apiUrl: "https://api-optimistic.etherscan.io"
}
}
},
avalanche: {
url: process.env.AVALANCHE_RPC_URL,
chainId: 43114,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
verify: {
etherscan: {
apiKey: process.env.SNOWTRACE_API_KEY,
apiUrl: "https://api.snowtrace.io"
}
}
},
// Testnets
goerli: {
url: process.env.GOERLI_RPC_URL,
chainId: 5,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : []
},
mumbai: {
url: process.env.MUMBAI_RPC_URL,
chainId: 80001,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : []
},
bscTestnet: {
url: "https://data-seed-prebsc-1-s1.binance.org:8545",
chainId: 97,
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : []
}
},
etherscan: {
apiKey: {
mainnet: process.env.ETHERSCAN_API_KEY,
polygon: process.env.POLYGONSCAN_API_KEY,
bsc: process.env.BSCSCAN_API_KEY,
arbitrumOne: process.env.ARBISCAN_API_KEY,
optimisticEthereum: process.env.OPTIMISTIC_API_KEY,
avalanche: process.env.SNOWTRACE_API_KEY
}
},
gasReporter: {
enabled: process.env.REPORT_GAS !== undefined,
currency: "USD",
gasPrice: 20
},
namedAccounts: {
deployer: {
default: 0
},
owner: {
default: 1
}
},
paths: {
deploy: "scripts/deploy",
deployments: "deployments"
}
};