hardhat开发框架2
上一篇: hardhat开发框架
在上一篇中,我们了解到了
- 实际开发环境的工作流程是什么
- hardhat和remix的区别是什么
- foundry和hardhat的区别
- 对于初学者来说,remix > hardhat > foundry
让我们一步一步来学习 Hardhat,从基础开始,直到深入使用它进行合约开发、测试和部署。
1. 阅读 Hardhat 官方文档:
首先,我们需要确保你已经浏览了 Hardhat 官方文档的基础内容,了解 Hardhat 的基本概念和核心功能。以下是一些你需要特别注意的部分:
**Hardhat 官方文档**:
- 阅读概述部分,了解 Hardhat 是什么,为什么使用它。
- 阅读 安装和设置 部分,掌握如何创建和配置 Hardhat 项目。
2. 设置 Hardhat 项目:
在开始使用 Hardhat 之前,我们需要先设置一个基本的 Hardhat 项目。
步骤:
安装 Node.js 和 NPM
确保你已经安装了 Node.js,你可以在终端中运行以下命令来检查:
1
2node -v
npm -v
初始化项目文件夹
创建一个新的文件夹,并初始化 npm 项目:
1
2
3mkdir hardhat-project
cd hardhat-project
npm init -y
安装 Hardhat
安装 Hardhat:
1
npm install --save-dev hardhat
创建 Hardhat 项目
使用 Hardhat 初始化项目:
1
npx hardhat选择 Create a basic sample project,然后根据提示完成安装。
项目结构
初始化后,你会看到类似这样的文件结构:1
2
3
4
5
6
7
8
9/hardhat-project
├── contracts/
│ └── Greeter.sol
├── scripts/
│ └── deploy.js
├── test/
│ └── sample-test.js
├── hardhat.config.js
└── package.jsoncontracts/:存放 Solidity 合约的目录。scripts/:存放部署脚本的目录。test/:存放测试代码的目录。hardhat.config.js:Hardhat 配置文件,用于配置网络、编译器等。
3. 编写并测试 Solidity 合约:
现在我们已经设置好 Hardhat 项目,可以开始编写和测试我们的第一个 Solidity 合约。
步骤:
创建 Solidity 合约
在
contracts/目录下创建一个新的 Solidity 合约文件,比如MyContract.sol。1
2
3
4
5
6
7
8
9
10// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyContract {
uint256 public value;
function setValue(uint256 _value) public {
value = _value;
}
}
编写测试脚本
在
test/目录下创建一个新的 JavaScript 测试文件,比如myContract-test.js。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const { expect } = require("chai");
describe("MyContract", function () {
it("should set value correctly", async function () {
const [owner] = await ethers.getSigners();
const MyContract = await ethers.getContractFactory("MyContract");
const myContract = await MyContract.deploy();
await myContract.deployed();
await myContract.setValue(42);
const value = await myContract.value();
expect(value).to.equal(42);
});
});
运行测试
你可以使用 Hardhat 的测试命令来运行测试:
1
npx hardhat test
4. 使用 Assertions 库:
Hardhat 默认集成了 Chai 测试库,用于进行断言。你可以在测试中使用 expect、should 和 assert 等断言方法来验证合约的行为。
示例:
1
expect(await myContract.value()).to.equal(42); // 使用 `expect`其他常见断言方法:
1
assert.equal(await myContract.value(), 42); // 使用 `assert`
5. 在 Solidity 中写 Fuzz 测试:
Fuzz 测试(模糊测试)是一种自动化测试技术,通过随机输入来找出合约中的潜在漏洞。
步骤:
启用 Fuzz 测试
- 在 Hardhat 中,你可以使用
forge(Foundry 提供的工具)来进行 fuzz 测试,但 Hardhat 本身不直接支持 fuzz 测试。不过,你可以通过 Hardhat Plugin 来启用这种功能,或者结合使用 Foundry 来进行更高级的测试。
- 在 Hardhat 中,你可以使用
6. 使用 Hardhat 插件:
Hardhat 拥有丰富的插件系统,允许你扩展 Hardhat 的功能。常见的插件有:
- **
@nomiclabs/hardhat-ethers**:用于与ethers.js进行集成。 - **
@nomiclabs/hardhat-waffle**:用于与Waffle测试框架集成。 - **
hardhat-gas-reporter**:用于报告 Gas 使用情况。
安装插件:
1 | |
然后在 hardhat.config.js 中引入插件:
1 | |
7. 写 TypeScript 测试:
Hardhat 支持 TypeScript,可以让你编写类型安全的测试代码。要启用 TypeScript,首先安装 ts-node 和 typescript:
1 | |
然后在 hardhat.config.js 中启用 TypeScript:
1 | |
在 test/ 文件夹中,创建一个 .ts 后缀的测试文件,比如 myContract-test.ts。
8. 确保测试的覆盖范围:
为了确保你的测试覆盖了合约的所有关键路径,Hardhat 支持生成 测试覆盖率报告。你可以使用 solidity-coverage 插件来生成报告。
安装插件:
1 | |
配置:
在 hardhat.config.js 中加入:
1 | |
然后运行覆盖率检查:
1 | |
9. 配置合约与变量:
在 hardhat.config.js 中配置合约的相关变量和网络。例如,配置 Gas 限制、优化设置 等。
示例:
1 | |
10. 验证合约:
Hardhat 也支持合约的自动验证,你可以使用 hardhat-etherscan 插件来自动验证合约。
安装插件:
1 | |
配置:
在 hardhat.config.js 中添加:
1 | |
然后运行合约验证:
1 | |
总结:
通过这些步骤,你将能全面掌握 Hardhat 的基础用法,包括项目设置、编写合约、测试、使用插件、进行类型测试等。希望这能帮助你深入理解 Hardhat,并能够在实际项目中熟练运用它。如果有任何具体问题,随时向我提问!
问题一: nvm是什么?
nvm 是 Node Version Manager 的缩写,是一个用于管理 Node.js 版本的命令行工具。它允许开发者在同一台机器上安装和切换多个版本的 Node.js,非常适合需要在不同项目中使用不同 Node.js 版本的开发者。
nvm 的功能:
安装不同版本的 Node.js:
- 你可以使用
nvm安装多个版本的 Node.js,并且可以轻松切换到任何版本。
- 你可以使用
切换 Node.js 版本:
nvm允许你快速切换当前的 Node.js 版本,这对于同时开发多个项目时尤其有用,每个项目可能需要不同的 Node.js 版本。
全局管理 npm 包:
- 每个版本的 Node.js 都有独立的 npm,因此可以根据不同的 Node.js 版本管理不同的全局 npm 包。
如何安装 nvm:
1. 在 macOS 或 Linux 上安装:
你可以通过以下命令来安装
nvm:1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash这会下载并运行一个安装脚本,安装完后,需要关闭终端再重新打开,或者运行以下命令以便生效:
1
source ~/.bashrc # 或者 source ~/.zshrc(根据你使用的终端配置文件而定)
2. 在 Windows 上安装:
- Windows 用户可以使用 nvm-windows 进行安装。直接下载最新的安装包并安装。
常用的 nvm 命令:
安装 Node.js 版本:
安装指定版本的 Node.js:
1
nvm install 14.17.0 # 安装 Node.js 14.17.0 版本安装最新的稳定版本:
1
nvm install stable # 安装最新的稳定版本
查看已安装的 Node.js 版本:
列出所有已安装的版本:
1
nvm list
使用指定版本的 Node.js:
切换到某个特定版本:
1
nvm use 14.17.0 # 切换到 14.17.0 版本你也可以切换到最新的版本:
1
nvm use node # 使用最新的稳定版本
设置默认的 Node.js 版本:
设置一个默认的 Node.js 版本,这个版本将在新的终端会话中自动启用:
1
nvm alias default 14.17.0
卸载 Node.js 版本:
删除指定的 Node.js 版本:
1
nvm uninstall 14.17.0
nvm 的优势:
- 项目兼容性:不同项目可能需要不同的 Node.js 版本,
nvm让你能够为每个项目选择和管理不同的版本。 - 避免版本冲突:避免了全局安装 Node.js 版本冲突的情况,因为你可以在全局环境中有多个版本并进行切换。
- 简化版本管理:当 Node.js 发布新版本时,你可以轻松更新到新版本,或者切换回一个旧版本进行兼容性测试。
总结:
nvm 是一个非常实用的工具,尤其是在需要管理多个 Node.js 版本的开发环境中。它能帮助你轻松切换版本,避免版本冲突,并提高开发效率。
问题二: npx是什么?
npx 是 npm 自带的一个命令执行工具,用途非常简单:
👉 让你不用全局安装,也能直接运行 npm 包里的命令。
📌 简单一句话解释
npx = 临时使用某个 npm 包来执行命令,不用安装到全局。
🔍 为什么需要 npx?
以前你要运行 Hardhat、Create-React-App、Truffle 等工具,必须全局安装:
1 | |
但现在用 npx,可以:
1 | |
⚡ 不需要安装!
⚡ 不会污染全局!
⚡ 自动下载临时文件然后执行!
🧪 举个实际例子:Hardhat
在新项目目录下可以直接:
1 | |
它会自动启动 Hardhat 项目创建向导。
📦 npx 的工作原理
当你运行:
1 | |
npx 会:
- 检查你项目的
node_modules/.bin/,有没有这个命令 - 如果没有,就临时下载一个版本
- 执行后自动清理
所以 npx 非常适合 CLI 工具。
🆚 npx 和 npm 的区别
| 工具 | 作用 |
|---|---|
| npm | 安装、卸载、管理包 |
| npx | 执行 npm 包中的命令(不一定安装) |
📌 你在 Hardhat、Next.js、React、Solidity 学习中会经常用到
示例:
1 | |
如果你愿意,我可以顺便帮你解释:
npm install和npm install -g的差异node_modules/.bin是什么- npx 在 Hardhat 项目目录下具体执行了什么
你想深入到什么程度?
问题三: 为什么“高级的”工具总是命令行形式,而“初级”工具总是图形化的?
这是一个非常经典、非常本质的问题,甚至能解释为什么编程世界会分成“专业者”和“使用者”两大类。
下面我给你一个 通俗但深刻 的解释——你会完全看懂为什么高级工具倾向命令行,而初级工具偏图形化 GUI。
🧠 1. GUI = 简单易上手,但牺牲灵活性
图形界面(GUI)让你:
- 点按钮
- 拖拽
- 选项框
对新手来说很友好,因为:
- 不需要记东西
- 不可能输错指令
- 学习成本低
但 GUI 有一个致命问题:
你看到的是什么按钮,就只能做什么事情。
GUI 由设计者决定,你的行为范围被提前限定死。
换句话说:
- 简单 = 强制限制自由
- 易用 = 限制灵活性
⚡ 2. CLI = 灵活、强大、自动化,但需要学习
命令行(CLI)让你:
- 组合命令
- 自定义参数
- 批量处理
- 自动化脚本
- 和其他工具链接管道
CLI 工具的设计思路是:
给你“所有能力”,你想怎么用都可以。
这会导致两个特点:
优点:
- 组合能力无限强
- 自动化能力极高(脚本化)
- 更稳定更专业
- 可以被程序调用(CI/CD, DevOps, 自动部署)
缺点:
- 要记命令
- 对初学者不友好
- 使用门槛有点高
🎯 3. 为什么越“高级”的工作越需要 CLI?
因为 高级工作意味着需要处理复杂场景,而复杂场景:
- GUI 不可能覆盖全部按钮
- GUI 无法批量、自动、脚本执行
- GUI 做不了高级组合操作
举例:
🟦 高级工程师要做的事情
- 自动部署 1000 个服务(GUI 不够用)
- 修改合约、编译、打包、测试、部署(GUI 不够灵活)
- 写 CI/CD Pipeline(GUI 做不了)
- 分析日志、链上数据、调试(CLI 才能脚本)
- 操作服务器(无 GUI)
🟩 初学者的需求
- 创建项目(点按钮)
- 看日志(图形化界面)
- 点“部署”按钮
- 查看变量、调试
所以:
GUI 是“培训轮子”,适合入门与学习。
CLI 是“真正的工具”,适合专业生产环境。
🎮 4. 游戏也一样(用游戏比喻你更好懂)
- 新手玩家:点点点,滑鼠操作
- 高端玩家:全键盘快捷键、宏命令、自定义脚本
高级玩家为什么不用 GUI 菜单?
因为 快捷键 + 命令 才能达到极高效率。
开发者世界一样。
🧩 5. 为什么程序员喜欢命令行?
因为 CLI:
- 可重复(写脚本自动化)
- 可组合(管道 | 和 &&)
- 可远程(没有 GUI 时仍能工作)
- 可被程序调用(机器人操作)
- 更稳定(不会像 GUI 一样崩溃)
- 更精确(参数完全可控)
你会发现一个规律:
真正的大型系统、生产环境、连续部署,全靠命令行。
比如:
- Linux 服务器 99% 没有 GUI
- DevOps 全是 CLI + YAML
- Docker/Kubernetes 完全是 CLI
- 区块链合约开发 Hardhat、Foundry 全是 CLI
因为这些工具设计给专业人士,不是给一般用户。
🧨 最精炼的一句话总结
GUI = 简单但有限制,适合入门。
CLI = 强大但需要学习,适合专业。
所以,“高级工具”必须是命令行,
因为高级人员需要的是“力量”,而不是“按钮”。
如果你愿意,我可以继续讲:
- 为什么 Hardhat/Founry/Truffle 全是 CLI?
- 为什么 VS Code、Remix 是 GUI,但高级操作都要 CLI?
- 为什么程序员越高级越不用鼠标?
你想继续深入吗?
为什么 Hardhat/Founry/Truffle 全是 CLI?
Hardhat, Foundry, 和 Truffle 都是智能合约开发中非常流行的工具链,它们都采用了 **命令行界面 (CLI)**。这是有多方面原因的,以下是一些主要的原因:
- 灵活性与控制
- CLI 提供更高的灵活性和控制。开发者通过命令行工具可以精确控制每一个操作,灵活地指定不同的参数、配置和环境,而图形界面(GUI)通常无法提供这种层次的定制。
- 比如,使用 CLI 时,你可以轻松指定要部署的 合约、网络环境、Gas 限制,甚至是 自动化脚本 和 测试覆盖率 等。这些都可以通过简单的命令行参数调整,而 GUI 要实现这些灵活性和可调性通常需要复杂的界面和更多的用户输入。
例子:
在 Hardhat 中,你可以通过命令指定要连接的以太坊网络(如 Goerli、Rinkeby、Local Testnet),而在 GUI 中做这些配置可能会变得复杂且不直观。
1
npx hardhat run scripts/deploy.js --network rinkeby
- 效率和自动化
- CLI 工具适合高效的自动化工作流。命令行可以方便地与其他工具和脚本配合使用,支持自动化测试、部署、代码审计等复杂任务,开发者可以把常用命令写成脚本并自动化执行。
- 批量处理和快速执行:使用命令行,可以快速批量执行一系列操作,如运行所有测试、部署合约、检查合约 Gas 使用情况等,这些操作对于大规模项目的开发尤为重要。
例子:
使用 Truffle 或 Foundry,你可以编写自动化脚本来进行智能合约的部署、测试,甚至将部署过程集成到 CI/CD 流程中。
1
truffle migrate --network ropsten
- 便于与其他工具集成
- CLI 更容易与其他工具链和开发环境集成。开发过程中,通常需要集成许多其他工具(如前端框架、Git、CI/CD 系统、测试框架等)。命令行非常适合这种集成,因为它允许开发者通过脚本、API 调用和自动化工具无缝地与其他系统配合。
- 使用 GUI 实现与其他开发工具的集成则会复杂很多。
例子:
- 在 Hardhat 中,你可以通过脚本或命令行直接集成 ethers.js 或 web3.js,或者将部署、测试等过程集成到持续集成(CI)系统中。CLI 的灵活性使得这一切变得更加简单和自动化。
- 轻量级与性能
- CLI 更加轻量,性能更好。与图形界面相比,命令行工具在启动和执行时需要的资源更少,运行速度更快。图形界面通常需要加载大量的视觉元素和用户交互组件,这在某些开发场景下可能会影响性能。
- 在开发过程中,尤其是进行大量测试和高频交互时,CLI 的高效性非常明显。开发者能够通过命令行快速执行多个操作,避免了图形界面中可能出现的卡顿和延迟。
例子:
- Foundry,作为一个基于 Rust 的工具,速度非常快,能够通过命令行高效地进行合约测试、Gas 分析等操作。而图形界面在这类高频测试和性能要求较高的场景下通常不如 CLI 快。
- 开发者社区的习惯
- 开发者习惯:命令行工具是大多数开发者的常用工具。开发者习惯通过 CLI 进行快速的操作,而图形界面可能会限制一些开发者的工作流。CLI 允许开发者更加自由、灵活地编写脚本、管理项目。
- 工具链的一致性:很多区块链开发工具(如 Node.js、npm、Truffle、Hardhat 等)都采用了命令行界面,这使得开发者可以在熟悉的环境中工作,提升工作效率。
- 可扩展性和定制性
- CLI 提供高度的可扩展性和定制性,允许开发者根据自己的需求编写脚本、添加功能或修改配置。对于专业开发者来说,CLI 工具是不可或缺的,因为它们可以更轻松地通过自定义脚本、插件等方式扩展工具功能。
- 对于想要集成其他功能(如定制测试、部署、监控合约等)的开发者,CLI 提供了丰富的选项和灵活的接口,几乎可以实现无限的自定义。
- 图形界面适用场景较少
- 图形界面不适用于所有场景,尤其是当涉及到一些复杂的设置、自动化或脚本化操作时,图形界面显得比较笨重。例如,当进行大规模测试或需要频繁切换不同网络时,图形界面可能无法提供相同程度的灵活性和效率。
- 因此,许多开发工具选择用 CLI 来提供 底层功能,同时保留 图形界面 来处理一些简单的配置和调试任务。
总结:
Hardhat、Foundry 和 Truffle 都是 CLI 工具链,主要是因为命令行提供了 更高的灵活性、效率、可定制性,并能够 无缝集成到开发流程中。虽然图形界面对某些简单任务有优势,但对于 复杂开发、自动化、性能需求 等场景,命令行工具提供了更合适的解决方案。
如果打个比喻的话,cli就像骨架和肌肉,而GUI就像皮肤和头发。用户注重GUI,但实际上cli才是一个人能否动起来的关键因素。
你打的比喻非常生动且贴切!确实可以这样理解:
CLI 就像骨架和肌肉:CLI 提供了系统的 核心功能 和 灵活性,就像骨架和肌肉为一个人提供了支持和运动能力。它让所有的工作和操作得以高效、有序地进行,支撑着整个应用的运转。CLI 可以通过精细的命令和脚本处理复杂的任务,像是自动化测试、合约部署、网络配置等高效的操作,完全依赖于命令行工具的控制。
GUI 就像皮肤和头发:GUI 是面向 用户体验 和 交互 的,它让用户能够 直观地与应用交互,就像皮肤和头发让一个人看起来更具吸引力和易于接近。GUI 让复杂的操作变得更简单、友好,尤其适用于那些不太了解底层操作的用户或开发者。它提供了一个视觉化、简化的界面,便于理解和使用。
为什么这个比喻准确?
CLI 提供了力量和灵活性:
- 就像骨架和肌肉构成了人的 结构和行动能力,CLI 赋予了开发者 深度控制 和 灵活性,帮助他们高效地完成任务、处理复杂场景,并进行自动化。
- 例如,在 Solidity 开发中,CLI 工具可以让你编写和运行自动化测试脚本、进行复杂的合约部署和网络配置,而 GUI 可能只限于一些简单的交互。
GUI 提供了易用性和可视化:
- GUI 的作用就像皮肤和头发一样,尽管它为用户提供了 美观和易用性,但背后的 实际功能 和 逻辑控制 还是依赖于 CLI。例如,在开发框架(如 Hardhat 或 Truffle)中,虽然有图形化界面帮助展示合约的状态和运行情况,但 核心的操作(如部署、测试、调试等)却是在 CLI 中执行的。
不可或缺的互补关系:
- 就像一个人没有骨架和肌肉无法正常活动,单靠皮肤和头发也无法生存一样,CLI 和 GUI 是互补的。CLI 提供了强大的 功能和灵活性,而 GUI 提供了 直观的界面和交互体验。开发者和用户根据需求选择最合适的工具,CLI 适用于需要高度定制和自动化的场景,而 GUI 则适合日常使用和可视化操作。
总结:
这个比喻准确地表达了 CLI 和 GUI 的关系:CLI 是应用程序的“骨架和肌肉”,提供核心的功能和操作能力;而 GUI 是“皮肤和头发”,提供良好的用户体验和直观的界面。尽管用户更多关注的是 GUI,但没有 CLI 的底层支持,应用程序无法有效运作。
问题四: hardhat2和hardhat3的区别
Hardhat 2 和 Hardhat 3 之间的区别主要集中在一些新特性、性能改进和 API 变化上。Hardhat 作为以太坊智能合约开发的一个流行工具框架,随着版本更新持续改进和优化,Hardhat 3 引入了一些新的特性和 API 更新,下面是两者的主要区别:
1. 性能改进与优化
- Hardhat 3 在性能方面有显著提升,特别是在处理大型项目和复杂任务时,速度更快,资源占用更少。
- 比如,任务执行和 合约编译 过程得到了优化,减少了每次编译和部署时的等待时间。
2. 新的配置文件格式
- Hardhat 3 引入了一些新的配置选项和更灵活的 配置文件格式,特别是在
hardhat.config.js中的改动。这使得开发者可以更加灵活地定制项目配置。 - Plugin 管理:硬化了插件管理和配置的方式,让插件配置更加模块化和简洁。
- 例如,Hardhat 3 开始支持通过配置不同的 网络环境 来指定合约的部署目标,使得处理多链部署变得更简单。
3. Solidity 编译器改进
- Hardhat 3 默认更新了 Solidity 编译器 版本,支持更多的编译选项,比如更细致的优化设置。
- 该版本也改进了合约编译的性能和错误信息的提示,编译错误的提示更加清晰和详细,帮助开发者更容易地定位问题。
4. 新增支持的插件
- Hardhat 3 引入了更多新的插件和更好的插件支持,提升了与其他开发工具的兼容性。
- 其中,Hardhat-deploy 和 Hardhat-ethers 插件在 Hardhat 3 中得到了进一步增强,支持更加高效的合约部署和合约交互。
5. 更好的 TypeScript 支持
- Hardhat 3 对 TypeScript 提供了更强大的支持,使得开发者能够更加方便地编写类型安全的测试代码和部署脚本。
- 如果你使用 TypeScript,Hardhat 3 在项目设置、自动化测试、脚本运行等方面提供了更好的 TypeScript 配置支持。
6. Hardhat Network 改进
- Hardhat Network 在 Hardhat 3 中得到了进一步增强,提供了更多的调试功能和状态追踪能力。现在,开发者可以更加方便地使用 Hardhat 提供的本地网络进行测试和调试。
- 例如,现在 Hardhat Network 允许开发者使用 硬件钱包模拟 来进行部署和测试。
7. API 更新和破坏性更改
- Hardhat 3 对一些 API 进行了更新,部分之前的 API 被弃用或有了新方式。这意味着一些老版本的代码可能需要做调整,以便与新版本兼容。
- 比如,Hardhat 3 引入了新的插件接口,旧的插件可能需要更新才能继续使用。
8. 更好的调试和错误处理
- 在 Hardhat 3 中,调试功能得到了显著的改进,尤其是在出错时的 错误信息反馈 和 堆栈跟踪 更加清晰,帮助开发者更容易定位错误原因。
- 错误和异常处理机制也有了增强,减少了调试时的复杂度。
9. 更好的 ethers.js 集成
- Hardhat 3 进一步加强了与
ethers.js库的集成,允许开发者更加简便地与以太坊区块链交互。比如,Hardhat 3 对合约实例化和发送交易的过程进行了优化,简化了与以太坊的交互。
10. 文档和开发者体验提升
- Hardhat 3 提升了 文档质量,增加了更多的教程和示例,帮助新手开发者更容易上手。
- 在 开发者体验 上,Hardhat 3 对命令行工具、调试工具和插件的支持都有了很大的改进,提供了更好的交互和反馈。
总结:Hardhat 2 vs Hardhat 3
| 特性 | Hardhat 2 | Hardhat 3 |
|---|---|---|
| 性能 | 较慢,处理复杂项目时有性能瓶颈 | 性能优化,执行速度更快,资源占用更低 |
| 配置文件 | 基本配置选项 | 配置文件更灵活,支持更细致的配置选项 |
| Solidity 编译器 | 支持 Solidity 编译器,但不够优化 | 默认更新编译器版本,支持更多编译选项 |
| TypeScript 支持 | 基本支持 | 更强大的 TypeScript 支持,类型安全更好 |
| 插件系统 | 插件支持较基础,有限的集成能力 | 更强大的插件系统,支持更多插件和更好的插件集成 |
| 调试功能 | 调试功能较基础 | 提供更强大的调试功能和错误反馈机制 |
| API 变化 | 稳定,API 不会有太大变化 | 引入了新的 API 和接口,部分破坏性更改 |
| 文档和开发者体验 | 有一定文档支持 | 文档和开发者体验得到了显著改善 |
选择建议:
- 如果你正在使用 Hardhat 2,并且你的项目已经稳定运行,可以继续使用,但建议尽早迁移到 Hardhat 3,因为它提供了更高的性能和更多的功能支持。
- Hardhat 3 更适合新项目,它提供了更好的性能、可扩展性和开发者体验,是面向未来的更新版本。
如果你已经掌握了 Hardhat 2,升级到 Hardhat 3 后,你会发现开发和调试过程更加流畅,同时可以利用更多新的功能和优化。
问题五: hardhat的历史有多久
Hardhat 的历史并不是很长,但它自发布以来迅速成为了以太坊智能合约开发中的重要工具。Hardhat 由 Nomic Labs 开发,目的是提供一个现代化的、易于使用的开发环境,专门为以太坊智能合约开发、测试和部署而设计。
Hardhat 的历史大致时间线:
2018 年:Hardhat 的初步构思
- Nomic Labs(一家专注于区块链开发工具的公司)在 2018 年左右开始了 Hardhat 项目的初步构思。
- 目标是解决当时 Truffle 和其他开发工具的一些性能瓶颈、复杂性以及缺乏灵活性的问题。
2019 年:Hardhat 发布
- Hardhat 正式发布于 2019 年,最初它的核心功能是提供一个强大的 开发环境,让开发者能够更高效地编写和测试智能合约。
- 当时,它主要解决了 开发工具的性能和扩展性问题,比如改进了 Solidity 编译器 的支持、增加了本地测试网络的功能,并且支持调试合约和与以太坊网络的交互。
2019 - 2020 年:逐渐改进与普及
- 在 2019 年和 2020 年间,Hardhat 快速吸引了大量开发者的注意,并成为以太坊开发工具中的一员重要角色。
- 随着以太坊的 DeFi 和 NFT 热潮,Hardhat 也逐渐成为很多开发者的首选工具,特别是在那些需要 高效测试、自动化部署、与多个网络交互 的开发场景中。
- 在此期间,Hardhat 社区和插件生态逐步壮大,逐渐支持了 ethers.js、Waffle 等框架的集成。
2020 年 - 2021 年:Hardhat 的完善与发展
Hardhat 因其强大的性能和灵活性,被越来越多的开发者所采用。这个时期,Hardhat 添加了许多功能和改进,包括:
- 更强大的调试功能:支持 Solidity 源代码调试,帮助开发者更方便地追踪和定位合约中的错误。
- 插件系统:推出插件系统,允许开发者使用或开发自定义插件,扩展 Hardhat 的功能。
- Hardhat Network:提供了一个内置的本地区块链环境(Hardhat Network),用于合约的快速测试和部署。
在这个时期,Hardhat 也成为 Ethereum Foundation 和许多 DeFi 项目、开发者团队的首选开发框架。
2021 年 - 2022 年:Hardhat 3 和持续改进
- 2021 年,Hardhat 3 版本发布,引入了更强大的功能、性能优化和更易于使用的配置方式,同时继续加强与各种工具和插件的集成。
- Hardhat 3 增加了对 TypeScript 的更好支持,优化了 Solidity 编译,并且加入了更多的 安全性测试、Gas 使用分析 等高级功能。
Hardhat 的成长与演变
Hardhat 的成功:Hardhat 因其对开发者友好的设计、快速的本地测试、强大的插件系统和与其他工具的兼容性,逐渐成为了 DeFi 和 NFT 项目的首选框架之一。它的不断迭代和社区贡献,使它在以太坊开发工具中占据了重要地位。
用户增长:Hardhat 的文档、教程以及社区支持非常强大,使得无论是初学者还是高级开发者都能迅速上手并利用这个工具。许多以太坊开发者和团队已经将 Hardhat 集成到他们的开发流程中。
总结:
Hardhat 的历史相对较短,从 2019 年发布到今天,它已经成为了 以太坊开发工具中最受欢迎的框架之一,特别是在智能合约开发和自动化测试方面,得到了广泛的应用。它的发展得益于对开发者需求的深刻理解和持续的功能更新,成为了许多 DeFi 项目和 区块链开发者 的必备工具。