5月28日 04:19

Hardhat、Foundry、Truffle 有什么区别?以太坊开发框架怎么选?

以太坊开发工具链的核心是三个框架:Hardhat、Foundry 和 Truffle。Truffle 已于 2023 年被 ConsenSys 停止维护,新项目不要再用。现在的选择基本就是 Hardhat 和 Foundry 二选一,或者混合使用。

Hardhat 基于 JavaScript/TypeScript,插件生态最丰富,适合全栈 DApp 开发——你的测试脚本可以方便地调用前端库、操作 DOM、集成 CI/CD。Foundry 用 Rust 写的,测试直接用 Solidity,编译和跑测试比 Hardhat 快 10 倍以上,内置 fuzz 测试和 invariant 测试,安全审计团队几乎都用 Foundry。

实际项目里的做法:很多团队用 Foundry 写测试(快、原生 Solidity、fuzz),用 Hardhat 做部署和集成(插件多、TypeScript 脚本灵活)。两者共享同一套合约代码,Hardhat 3 甚至能直接读 foundry.toml 配置。

追问

Hardhat 和 Foundry 的测试有什么本质区别?

Hardhat 用 JS/TS 测试合约,通过 ethers.js 调用合约方法,测试文件和合约文件语言不同,需要频繁在两种语言间切换。Foundry 直接用 Solidity 写测试,测试合约和业务合约同语言,还能用 vm.prankvm.deal 等 cheatcode 直接操纵 EVM 状态——比如模拟某个地址发起交易、强制给地址打 ETH,这在 Hardhat 里做不到。

为什么 Truffle 被淘汰了?

性能差(测试套件跑得慢)、插件生态不如 Hardhat 丰富、没有 fuzz 测试支持。最关键的是 ConsenSys 在 2023 年 9 月宣布停止维护,代码仓库已归档。还在用 Truffle 的项目建议尽快迁移到 Hardhat 或 Foundry。

实际项目里怎么选?

三个判断标准:团队技术栈(JS/TS 为主选 Hardhat,Solidity 为主选 Foundry)、项目类型(全栈 DApp 选 Hardhat,纯合约/DeFi 协议选 Foundry)、安全要求(高价值合约必选 Foundry,审计师默认要求 Foundry 测试)。不确定就两个都装,测试用 Foundry 跑,部署用 Hardhat 管。

Hardhat 3 和 Foundry 的速度差距还大吗?

Hardhat 3 用 Rust 重写了执行层,速度比 v2 快了很多,冷启动从十几秒降到 2 秒左右,但 Foundry 依然更快(冷启动约 1.3 秒)。日常开发体感差异不大,真正拉开差距的是大项目的完整测试套件和 fuzz 测试跑几千个 case 的时候。

写段代码

solidity
// Foundry fuzz 测试示例 function testFuzzTransfer(address to, uint256 amount) public { vm.assume(to != address(0)); token.mint(address(this), amount); token.transfer(to, amount); assertEq(token.balanceOf(to), amount); }
标签:以太坊