伴随着Web3生态的快速迭代,智能合约的开发工具也在经历着底层的重构。长期以来,Hardhat 2.x 凭借其繁荣的前端插件生态统治着以太坊开发流。面对业内对极速编译与原生语言测试的强烈诉求,官方正式推出了由 Rust 赋能、架构彻底翻新的 Hardhat 3.x 版本。
本文将深入剖析这两个大版本之间的核心架构差异,并提供详实的代码比对,助读者无缝跨入最新的工程时代。
笔记来自:17小时最全Web3教程:ERC20,NFT,Hardhat,CCIP跨链_哔哩哔哩_bilibili,十分推荐大家学习该课程!
目录
[一、 底层架构与执行引擎的代际跨越](#一、 底层架构与执行引擎的代际跨越)
[二、 配置文件(hardhat.config)的全面革新](#二、 配置文件(hardhat.config)的全面革新)
[1. 代码示例:Hardhat 2.x 的传统配置范式](#1. 代码示例:Hardhat 2.x 的传统配置范式)
[2. 代码示例:Hardhat 3.x 的现代化配置范式](#2. 代码示例:Hardhat 3.x 的现代化配置范式)
[三、 测试体系的破壁:融合 Solidity 原生测试](#三、 测试体系的破壁:融合 Solidity 原生测试)
[四、 网络并发与 CLI 指令的重构](#四、 网络并发与 CLI 指令的重构)
[五、 部署架构升级:Hardhat Ignition 全面接管](#五、 部署架构升级:Hardhat Ignition 全面接管)

一、 底层架构与执行引擎的代际跨越
在 Hardhat 2.x 时代,整个框架高度依赖 Node.js 的 CommonJS (CJS) 规范与纯 JavaScript 编写的本地 EVM 模拟器。这种设计在处理复杂的大型协议或进行深度模糊测试时,常常面临严重的性能瓶颈。
Hardhat 3.x 在底层进行了大刀阔斧的改革。框架全面拥抱现代 JavaScript 标准,默认采用 ECMAScript Modules (ESM) 架构。其本地节点引擎被彻底替换为基于 Rust 编写的 EDR (Ethereum Development Runtime)。这一举措将编译与执行速度提升了数倍,同时使得内存捕获机制与节点追踪变得更加精准和高效。
二、 配置文件(hardhat.config)的全面革新
在项目的初始化配置阶段,两个版本的逻辑差异尤为明显。Hardhat 2.x 的配置习惯于直接导出一个巨大的对象,并利用隐式的引入(require)来挂载插件。Hardhat 3.x 引入了类型安全的配置定义函数,要求开发者显式地注册所有使用的插件。
可以通过以下代码对比来直观感受这种变化:
1. 代码示例:Hardhat 2.x 的传统配置范式
javascript
// 基于 CommonJS 规范的隐式插件引入
require("@nomicfoundation/hardhat-toolbox");
require("hardhat-deploy");
// 直接导出配置对象
module.exports = {
solidity: "0.8.20",
networks: {
hardhat: {
chainId: 31337
}
}
};
2. 代码示例:Hardhat 3.x 的现代化配置范式
TypeScript
// 基于 ESM 规范,显式引入插件模块与配置函数
import { defineConfig } from "hardhat/config";
import verifyPlugin from "@nomicfoundation/hardhat-verify";
export default defineConfig({
// 插件必须在 plugins 数组中显式注册
plugins: [verifyPlugin],
solidity: {
version: "0.8.20",
},
networks: {
hardhat: {
// 3.x 版本的配置选项更加细化,例如可直接调配区块Gas上限
blockGasLimit: 30000000
}
}
});
三、 测试体系的破壁:融合 Solidity 原生测试
测试环节是智能合约开发的生命线。在 Hardhat 2.x 的生态中,开发者被牢牢绑定在 TypeScript/JavaScript 与 Mocha/Chai 的测试栈上。当面临极其复杂的 DeFi 协议运算时,跨语言的类型转换往往会引发难以排查的精度丢失问题。
Hardhat 3.x 完美补齐了这一短板。新版本在保留原生 TypeScript 集成测试的基础上,直接内置了与 Foundry 高度兼容的 Solidity 测试引擎。开发者可以直接使用 Solidity 语言编写单元测试、模糊测试(Fuzzing)以及不变性验证测试(Invariant testing)。项目工程中可以同时并存 TS 脚本与 Solidity 测试脚本,两者互为补充,彻底打破了测试语言的天然壁垒。
四、 网络并发与 CLI 指令的重构
网络调度机制的底层重写是 Hardhat 3.x 的另一项重大升级。Hardhat 2.x 的本地模拟网络被硬编码为永远模拟以太坊主网的行为。在执行单个任务或脚本期间,老版本框架只允许维持单一的、固定的网络连接。
Hardhat 3.x 彻底解除了这些僵化限制。新版本的网络管理器支持真正的多链并发模拟(Multichain support)。开发者可以在一次任务执行中,同时建立并管理多条不同的链连接(例如同时模拟以太坊主网与 Optimism 二层网络),实现复杂的跨链业务逻辑开发与校验。
为了配合这些底层变动,常用的 CLI 命令行指令也进行了部分更替。为了方便开发过程中的查阅,特整理如下指令核心对比表:
| 开发场景 | Hardhat 2.x 常用指令 | Hardhat 3.x 升级后指令 |
|---|---|---|
| 项目初始化 | npx hardhat |
npx hardhat --init |
| 项目全量编译 | npx hardhat compile |
npx hardhat build |
| 插件配置挂载 | 使用 require("plugin") |
写入 defineConfig 的 plugins 数组 |
| 密钥与环境管理 | 依赖第三方 dotenv 包处理 |
内置全新的 keystore 密匙管理模块 |
五、 部署架构升级:Hardhat Ignition 全面接管
在过去的项目中,大多数团队都会引入第三方插件 hardhat-deploy 来管理复杂的合约部署顺序。随着项目规模的膨胀,基于纯脚本的部署方式在面临网络中断或执行失败时,极难实现状态的精准回滚与断点续传。
Hardhat 3.x 将官方倾力打造的声明式部署框架------Hardhat Ignition 设置为默认标准,彻底取代了松散的脚本流。Ignition 引入了模块化部署(Module-based deployments)的概念。它的核心功能支持自动化的交易批处理与并发执行,同时内置了强大的失败恢复机制。开发者可以在代码部署前,在本地预演每一笔交易的真实状态变更。部署命令统一升级后,配合新引入的 production 构建配置方案(Build profiles),使得从本地开发到主网上线的全流程变得前所未有的坚固与透明。
Hardhat 3.x 是一次针对底层编译、测试框架与并发架构的全面推倒重来,其深度远超常规的 API 优化。希望通过本文的对比拆解,您能顺利掌握这把通往下一代 Web3 开发的全新利器。