什么是Hardhat?Hardhat是如何工作的?

什么是Hardhat?

Hardhat 是一个用于编译、测试、部署和调试以太坊软件的开发环境。它可以帮助开发人员管理和自动化构建智能合约和dApp 过程中固有的重复性任务,并围绕此工作流程轻松引入更多功能。这意味着在核心上编译、运行和测试智能合约。

Hardhat 将帮助您完成整个智能合约开发之旅。从最初的创建、测试、交互和部署。它对于测试已经部署的合约和创建“未来假设”也非常有帮助。

在部署合约之前,您将在下面找到一个简单的图表,其中包含一个非常基本的开发人员工作流程:

Hardhat 是开发人员旅程中这些步骤的绝佳工具,它将与您一路同行。让我们进一步解开它们:

智能合约创建/测试:这是您对合约进行编码的步骤。通常你在编写智能合约和测试代码之间存在共生关系,这是因为你需要测试每一段代码。Hardhat 非常擅长这一点,因为它提供了非常好的插件来测试和优化代码。

部署:在此步骤中,您将代码(将solidity 或vyper 转换)代码编译为字节码,对其进行优化并进行部署。Hardhat 有很多不错的插件,我们稍后会看到它们非常有用。

此外,使用Hardhat,您可以重现过去的场景。例如,您可以告诉Hardhat 回到过去并像我们在“x”日期一样重新进行黑客攻击,或者您想做的任何其他事情。这是通过分叉主网来完成的。我们将在第二个项目中回顾这个特性。

如您所见,Hardhat 为我们提供了许多不错的功能,可以在以太坊(或EVM 兼容链)中发挥作用。

Hardhat的架构

Hardhat 是围绕任务和插件的概念设计的。Hardhat 的大部分功能来自插件,作为开发人员,您可以自由选择要使用的插件。Hardhat 对您最终使用的工具没有意见,但它带有一些可以覆盖的内置默认值。

插件→ 插件是Hardhat 的支柱,它们是使用您在Hardhat 配置中使用的相同配置DSL 构建的。您可以在此处找到Hardhat 插件的完整列表。

任务→ 任务是带有一些相关元数据的JavaScript 异步函数。Hardhat 使用此元数据为您自动执行某些操作。处理参数解析、验证和帮助消息。您在Hardhat 中可以做的所有事情都被定义为一项任务。

您可以将插件视为向基础层添加额外功能的可重用代码段。这样做的好处是,您既可以自己创建插件,也可以使用任何社区和/或Hardhat 的插件。

Hardhat网络

Hardhat 内置了Hardhat Network,这是一个专为开发而设计的本地以太坊网络节点。

以太坊的核心是一套所有客户都必须遵守的规范。以太坊协议(即客户端)有不同的实现,最常用的是GETH(用GO 编写)。但也有其他用不同语言编写的。重要的是,它们都必须遵循以太坊的规范。

在底层,Hardhat 使用EVM 的JS 实现来运行您的文件。这意味着您正在您的机器上运行Ethereum JS。这就是当您在内部发送交易、测试和部署合约时,Hardhat 知道该做什么的方式。

项目结构

您将在下面找到一个图表,该图表显示了平均架构结构的外观。请记住,每个项目都是不同的,并且大小差异很大。但这只是为了得到一个大致的了解。

simple-smart-contracts-project-structure

让我们分析每个目录:

contracts→ 在这里,您将拥有所有合同和派生合同。这意味着,您创建的所有合约、接口、库和抽象合约都将位于contracts 文件夹下。唯一的例外是您通过npm 包导入其他合约。

deployments→ 在部署下,您将拥有将合约部署到网络的脚本。

test→ 所有的测试用例都在这个文件夹下。如图所示,最好将每个合同文件的测试分开。

hardhat.config.js → Hardhat 的配置文件。

现在我们已经大致了解了Hardhat 在理论上是如何工作的,让我们从项目开始吧!

本文链接地址:https://www.wwsww.cn/jishu/11373.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。