5月28日 05:30

Hardhat 常用插件有哪些?各自解决什么问题?

Hardhat 插件按用途分四类:开发调试(hardhat-ethers 做合约交互、hardhat-network-helpers 模拟链上状态、hardhat-chai-matchers 写测试断言)、部署验证(hardhat-verify 把源码验证到 Etherscan 和 Sourcify、hardhat-deploy 管理部署脚本和升级)、质量分析(hardhat-gas-reporter 看 Gas 消耗、solidity-coverage 跑覆盖率、hardhat-contract-sizer 查合约大小是否超限)、安全审计(hardhat-slither 跑静态漏洞扫描)。大多数项目直接装 @nomicfoundation/hardhat-toolbox 就够了——它把 ethers、network-helpers、chai-matchers、verify、coverage 全打包了。

追问

hardhat-toolbox 和单独装插件哪个好?

toolbox 是全家桶,新项目装一个就能跑测试、验证合约、看覆盖率。项目变复杂后可以拆掉它,按需装插件,减少依赖。没有性能差异,只是安装体积的区别。

hardhat-verify 和 hardhat-etherscan 是什么关系?

@nomiclabs/hardhat-etherscan 是旧版,Nomic Labs 改组为 Nomic Foundation 后推出了 @nomicfoundation/hardhat-verify。新版除了 Etherscan 还支持 Sourcify 验证,API 也有调整。新项目必须用 hardhat-verify,旧项目建议迁移——etherscan 版已经不再维护了。

Gas 优化只靠 hardhat-gas-reporter 行吗?

不行。reporter 只是告诉你每个函数花了多少 Gas,是诊断工具不是优化工具。实际优化要用 viaIR 编译选项处理栈深度问题、减少 storage 写入次数、用 calldata 替代 memory 参数。正确的用法是优化前跑一次 reporter 记录基线,优化后再跑一次量化效果。

hardhat-deploy 和 Hardhat Ignition 怎么选?

Ignition 是 Hardhat 3 官方内置的部署模块,声明式设计——你定义合约依赖关系,它自动编排部署顺序和并行执行。hardhat-deploy 是社区插件,基于脚本,强项是代理合约升级和部署历史回溯。新项目优先用 Ignition,老项目如果依赖 hardhat-deploy 的升级功能可以继续用,两者不冲突。

hardhat-slither 能替代安全审计吗?

替代不了。Slither 做静态分析,能扫出未初始化变量、重入模式、权限缺失这类模式化漏洞。但业务逻辑漏洞(比如错误的访问控制顺序、价格操控)它看不出来。项目上线前 Slither 做第一道快筛,正式审计必须靠人。

solidity-coverage 跑起来很慢怎么办?

coverage 模式要插桩每行代码计算执行次数,比正常测试慢 5-10 倍是正常的。可以只在 CI 的特定阶段跑,开发时跳过。Hardhat 2.x 里 coverage 是独立任务,Hardhat 3 对此做了优化但差距仍然存在。

写段代码

js
// hardhat.config.js — 常用插件配置示例 require("@nomicfoundation/hardhat-toolbox"); require("hardhat-gas-reporter"); module.exports = { solidity: "0.8.24", gasReporter: { enabled: true, currency: "USD" } };
标签:Hardhat