3分钟Solidity: 17.1 Hardhat开发框架

46 阅读4分钟

欢迎订阅专栏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. 与其他工具的对比 (简要)

特性HardhatFoundry
主要语言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 是一个强大的替代方案。许多顶尖团队甚至会同时使用两者,取长补短。