当前位置: 首页 > 工具软件 > hardhat > 使用案例 >

116 以太坊 ethereum hardhat : HRE , Hardhat运行时环境

魏鹤轩
2023-12-01

介绍
使用HRE
全局变量
从任务外部访问 HRE
扩展HRE
hardhat Tutorials , hardhat 教程
Contact 联系方式

• 介绍

Hardhat Runtime Environment,或简称 HRE,是一个包含 Hardhat 在运行任务、测试或脚本时公开的所有功能的对象。实际上,安全帽是 HRE。

当您需要 Hardhat (const hardhat = require("hardhat")) 时,您将获得 HRE 的一个实例。

在初始化期间,Hardhat 配置文件实质上构建了要添加到 HRE 的事物列表。这包括任务、配置和插件。然后,当任务、测试或脚本运行时,HRE 始终存在并且可以访问其中包含的任何内容。

HRE 的作用是集中协调所有安全帽组件。这种架构允许插件注入在 HRE 可访问的任何地方都可用的功能。

• 使用HRE

默认情况下,HRE 为您提供对任务运行程序和配置系统的编程访问权限,并导出 EIP1193-compatible 以太坊提供程序。

插件可以扩展 HRE。例如,hardhat-ethers 添加一个 Ethers.js 实例,使其可用于任务、测试和脚本。

• 全局变量

在运行任务、测试或脚本之前,Hardhat 将 HRE 注入全局范围,将其所有字段转换为全局变量。当任务执行完成时,这些全局变量将被删除,如果它们有一个,则恢复它们的原始值。

不是每个人都喜欢神奇的全局变量,Hardhat 也不会强迫你使用它们。一切都可以在任务、测试和脚本中明确完成。

在编写测试或脚本时,您可以使用 require("hardhat") 来导入 HRE。您可以在 从任务外部访问 HRE 中阅读有关此内容的更多信息。

您可以在定义任务时显式导入配置 API,并显式接收 HRE 作为操作的参数。您可以在 创建自己的任务 中了解更多相关信息。

• 从任务外部访问 HRE

可以从任何 JavaScript 或 TypeScript 文件中使用 HRE。为此,您只需使用 require("hardhat") 导入它。您可以这样做以更好地控制您的开发工作流程,创建您自己的工具,或者将 Hardhat 与来自 node.js 生态系统的其他开发工具一起使用。

直接使用 Mocha 而不是 npx hardhat test 运行测试可以通过在其中显式导入 HRE 来完成,如下所示:

const hre = require("hardhat");
const assert = require("assert");

describe("Hardhat Runtime Environment", function () {
  it("should have a config field", function () {
    assert.notEqual(hre.config, undefined);
  });
});

这样,为 Hardhat 编写的测试只是普通的 Mocha 测试。这使您可以从您喜欢的编辑器中运行它们,而无需任何特定于安全帽的插件。例如,您可以使用 Mocha 测试资源管理器从 Visual Studio Code 运行它们

• 扩展HRE

HRE 仅提供用户和插件开发人员在 Hardhat 之上开始构建所需的核心功能。在您的项目中使用它直接与以太坊接口可能比预期的要难一些。

当您使用更高级别的库时,一切都会变得更容易,例如 Ethers.js 或 [ethereum-waffle](https://www.npmjs.com/package/ethereum- waffle),但是这些库需要一些初始化才能工作,并且可能会重复。

Hardhat 让您可以连接到 HRE 结构,并使用新功能对其进行扩展。这样,您只需初始化所有内容一次,您的新功能或库将在使用 HRE 的任何地方可用。

您可以通过将 HRE 扩展器添加到队列中来做到这一点。这个扩展器只是一个同步函数,它接收 HRE 并使用您的新功能向其中添加字段。这些新字段也将[在运行时注入全局范围](#exporting-globally)。

例如,将 Web3.js 的实例添加到 HRE 可以通过安装 web3 包并将以下内容添加到您的 hardhat. config.js

extendEnvironment((hre) => {
  const Web3 = require("web3");
  hre.Web3 = Web3;

  // hre.network.provider is an EIP1193-compatible provider.
  hre.web3 = new Web3(hre.network.provider);
});

• hardhat Tutorials , hardhat 教程

CN 中文 Github hardhat 教程 : github.com/565ee/hardhat_CN
CN 中文 CSDN hardhat 教程 : blog.csdn.net/wx468116118
EN 英文 Github hardhat Tutorials : github.com/565ee/hardhat_EN

• Contact 联系方式

Homepage : 565.ee
微信公众号 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : 468116118@qq.com

 类似资料: