Hardhat 配置文件有哪些核心配置项?
Hardhat 配置文件 hardhat.config.js(或 .ts)导出一个配置对象,核心配置项按使用频率排列:
1. solidity — 指定编译器版本和优化设置。简写 "0.8.19" 或对象形式开启 optimizer:
javascriptsolidity: { version: "0.8.19", settings: { optimizer: { enabled: true, runs: 200 } } }
runs 权衡部署 Gas 和执行 Gas:runs 越高,执行越省 Gas 但部署越贵。库合约建议设 999999,一次性合约设 1。支持多版本编译,用 overrides 按路径指定:
javascriptsolidity: { version: "0.8.19", overrides: { "contracts/legacy/": { version: "0.6.12" } } }
2. networks — 定义连接的区块链网络。hardhat 是内置本地网络,其他网络需配 RPC 和账户:
javascriptnetworks: { hardhat: { chainId: 31337 }, sepolia: { url: process.env.SEPOLIA_RPC_URL, accounts: [process.env.PRIVATE_KEY] } }
accounts 支持私钥数组或助记词对象。敏感信息必须走环境变量,不要硬编码私钥。
3. defaultNetwork — 不带 --network 参数时的默认网络,默认值 "hardhat"。
4. paths — 自定义目录结构(sources、tests、cache、artifacts),默认值够用,多仓库 monorepo 才需要改。
5. etherscan — 配置 API Key,部署后自动在 Etherscan 验证合约源码,省得手动提交。
6. gasReporter — 测试时输出 Gas 消耗报告,currency: "USD" 显示费用估算,上线前评估成本用。
7. mocha — 覆盖测试框架配置,常用 timeout 调整超时(合约测试默认 40000ms,复杂场景可能不够)。
插件通过 require() 引入,写在配置文件顶部,不算配置项但必须在这里加载。
追问
optimizer runs 设成多少合适?
看合约调用频次。高频调用设 200-999,让编译器多优化执行路径;一次性部署设 1 省部署费。Uniswap V3 的池子合约 runs 设了几千,因为每笔交易都要执行。
hardhat 网络和 localhost 有什么区别?
hardhat 是内存临时网络,每次 npx hardhat test 都重启,数据不持久。localhost 需要先 npx hardhat node 启动独立进程,数据跨命令保持,适合调试前端交互和合约状态持久化场景。
配置文件用 JS 还是 TS?
TS 更好——有类型提示,拼写错误编译期就能发现。Hardhat 3 已默认推荐 TS 配置。安装 ts-node 和 @types/node,文件改名为 hardhat.config.ts 即可,语法不变。
怎么让配置文件不暴露私钥?
用 dotenv 包从 .env 文件读取环境变量,.env 加入 .gitignore。生产环境用密钥管理服务(如 AWS Secrets Manager)替代 .env 文件。CI/CD 里通过 GitHub Secrets 注入。