欢迎订阅专栏:3分钟Solidity--智能合约--Web3区块链技术必学
Hardhat 是目前最流行、最完善的以太坊智能合约开发框架之一。
亮点
Solidity 测试 和 EDR 是 Hardhat V3 的革命性更新,这使得它在保持原有强大生态和易用性的同时,在性能和测试灵活性上直追 Foundry。
- EDR (Ethereum Development Runtime): 用 Rust 重写的执行环境,将编译和测试速度提升了 10-20 倍,解决了之前 JavaScript 测试运行慢的痛点。
- Solidity 测试: 现在开发者可以像使用 Foundry 一样,用 Solidity 写测试套件,这对于测试复杂的合约间调用和状态变化更为直观高效。
更完整的 Hardhat 特性与工作流概览
1. 项目脚手架与管理
- 快速初始化项目结构 (
npx hardhat init)。 - 内置对 TypeScript 的一流支持,开箱即用。
- 灵活的配置文件 (
hardhat.config.js/ts),轻松集成插件和自定义网络。
2. 一流的开发体验
- 交互式控制台 (
npx hardhat console): 连接到任何网络(本地或主网分叉),实时与合约交互,进行快速原型测试。 - 强大的错误信息: Solidity 编译错误和栈追踪信息非常清晰,直接指向源代码位置。
- 任务系统 (Task System): Hardhat 的一切都是“任务”。您可以运行内置任务(如
compile,test),也可以轻松编写自定义任务来自动化任何工作流。
3. 网络与部署
- Hardhat Network:
- 可预测的挖矿,交易即时确认。
- 主网分叉 (Mainnet Forking): 在本地模拟主网状态,使用真实合约和数据进行测试,是 DeFi 和复杂协议测试的利器。
- 丰富的 RPC 方法支持,如
hardhat_setStorageAt,hardhat_impersonateAccount,方便操纵状态进行测试。
- 部署脚本: 使用 JavaScript/TypeScript 编写灵活的部署脚本,支持依赖部署、参数配置和升级模式。
4. 插件生态系统 (关键优势)
Hardhat 的最大优势在于其庞大的插件生态,可以无缝集成各种工具:
- @nomicfoundation/hardhat-toolbox: 一个元插件,打包了几乎所有常用工具(Ethers.js、Waffle、Chai、TypeScript 支持等)。
- @nomicfoundation/hardhat-verify: 一键验证合约源代码到 Etherscan 等区块链浏览器。
- @openzeppelin/hardhat-upgrades: 安全地部署和管理可升级合约。
- hardhat-gas-reporter: 测试时自动估算 Gas 消耗。
- hardhat-contract-sizer: 检查合约代码大小是否超过以太坊限制。
- 以及众多钱包、DeFi 协议、预言机的特定插件。
5. 与其他工具的对比 (简要)
| 特性 | Hardhat | Foundry |
|---|---|---|
| 主要语言 | JavaScript/TypeScript (主导) + Solidity (测试) | Solidity (主导) + Rust (底层) |
| 测试语言 | JS/TS 和 Solidity | 仅 Solidity |
| 性能 | 快 (EDR) | 极快 (原生 Rust) |
| 调试 | 优秀 (内置) + console.log | 优秀 + 强大的追踪 (forge test -vvv) |
| 入门难度 | 较低,前端开发者友好 | 中等,更适合 Solidity 纯后端开发者 |
| 插件生态 | 极其丰富,已成标准 | 正在增长,但较新 |
| 部署脚本 | 非常灵活 (JS/TS) | 使用 Cast 或自写脚本 (Solidity/JS) |
典型工作流
# 1. 创建项目
npx hardhat init
# 2. 编写合约 contracts/MyContract.sol
# 3. 编写测试 test/MyContract.js 或 test/MyContract.t.sol (Solidity 测试)
# 4. 编译
npx hardhat compile
# 5. 运行测试 (可指定测试文件)
npx hardhat test
npx hardhat test test/MyContract.t.sol # 运行 Solidity 测试
REPORT_GAS=true npx hardhat test # 带 Gas 报告
# 6. 启动本地节点
npx hardhat node
# 7. 部署到本地网络
npx hardhat run scripts/deploy.js --network localhost
# 8. 验证合约
npx hardhat verify --network sepolia DEPLOYED_CONTRACT_ADDRESS "Constructor Arg"
总结
简而言之,Hardhat 是一个为专业团队和复杂项目设计的、功能全面的“集成开发环境”。它的插件生态和开发者体验是其护城河。V3 引入的 EDR 和 Solidity 测试,让它补齐了性能短板,成为一个既强大又快速的全能型框架。
对于新项目,尤其是团队中有前端开发者或需要与复杂 JavaScript 工具链集成的项目,Hardhat 通常是默认的最佳选择。而对于追求极限测试速度和纯 Solidity 开发体验的开发者,Foundry 是一个强大的替代方案。许多顶尖团队甚至会同时使用两者,取长补短。