本文介绍了如何使用Hardhat工具在特定区块上分叉以太坊主网,以便在本地模拟区块链状态。文章详细说明了设置QuickNode以太坊存档节点、安装依赖项、初始化Hardhat项目以及查询分叉链的步骤。
如果你想模拟区块链在某个区块的状态,从该区块分叉链是非常有帮助的;Hardhat 内置了这一功能。在本指南中,我们将介绍如何在旧区块上分叉以太坊主网。
前提条件
Hardhat 是一个本地模拟以太坊环境的一站式解决方案;我们可以使用 Hardhat 分叉以太坊主网,并在任何给定区块模拟区块链的复杂操作。使用 Hardhat,我们还可以开发智能合约。它是一个用于编译、测试、调试和部署智能合约的强大工具。了解如何在我们内部的指南中编写和部署智能合约。
由于区块链的快速变化,测试可能会变得复杂。为了解决这个问题,你可以在运行任何测试之前,在特定区块分叉链。
每个运行全节点的以太坊客户端只存储最近的 128 个区块。为了我们今天的目的,我们需要在旧区块上分叉链。为此,我们需要一个以太坊全存档节点。参见全节点 vs. 存档节点
我们可以使用任何以太坊客户端来启动我们的节点,但以太坊存档数据非常庞大,可能需要几天甚至几周的时间来同步整个链数据,具体取决于所使用的资源。相反,我们将创建一个免费的 QuickNode 账户这里,并轻松创建一个以太坊端点。
选择 ETH 作为链,Mainnet 作为网络。我们将通过此端点获得开箱即用的存档数据。
复制并保存 HTTP URL,我们稍后会用到它。
Hardhat 可以通过 npm 安装,npm 随 node.js 一起提供。
首先,让我们确保我们已经安装了 node.js;在终端/cmd 中输入以下内容:
node -v
它应该返回已安装的 node.js 版本;如果未安装,请从 node.js 的官方网站下载。
创建一个新目录 hardhat_demo,并将该目录设为工作目录:
mkdir hardhat_demo
cd hardhat_demo
现在使用以下命令安装 Hardhat:
npm install -d hardhat
之后,我们需要安装一些 Hardhat 所需的依赖项:
npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai
让我们初始化我们的 Hardhat 项目:
npx hardhat
你会看到一个欢迎信息;选择第二个选项,“创建一个空的 hardhat.config.js”。这将在你的目录中创建一个空的 Hardhat 配置文件。
注意:如果你想开发脚本和合约,请选择第一个选项。它将创建必要的文件。
现在我们已经设置好了 Hardhat 项目,让我们使用 Hardhat 分叉以太坊主网。
npx hardhat node --fork <YOUR_QUICKNODE_URL_HERE>
将 YOUR_QUICKNODE_URL_HERE 替换为我们在上一节中获取的节点的 HTTP URL,然后运行该命令。这将分叉主网,并在 http://127.0.0.1:8545/ 上暴露新的 JSON RPC HTTP 和 WebSocket 端点。
另一个选项是在特定区块分叉链;此功能需要节点的存档能力。让我们在区块 12799760 处分叉链。
npx hardhat node --fork <YOUR_QUICKNODE_URL_HERE> --fork-block-number 12799760
分叉链的 RPC 服务器正在监听 http://127.0.0.1:8545/。让我们尝试向 RPC 发出 cURL 请求以获取区块号。打开一个新的终端/cmd 窗口,并使用以下命令:
curl --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
如上图所示,输出是 0xc34f10,这是我们分叉链时的区块号,但以十六进制格式表示。要将其转换为十进制格式,请删除 0x 前缀,并在此网站上进行转换。转换后的结果是 12799760。
QuickNode 提供访问全存档节点的功能,并带有存档模式附加功能,以下是使用 QuickNode 的更多理由:
在本教程中,我们了解了 Hardhat,如何安装 Hardhat,如何使用 Hardhat 创建新项目,以及如何使用 Hardhat 分叉主网。在官方文档中探索更多 Hardhat 方法。
订阅我们的新闻通讯,获取更多关于以太坊的文章和指南。如果你有任何反馈,请随时通过Twitter与我们联系。你还可以在我们的Discord社区服务器上与我们聊天,那里有一些你会遇到的最酷的开发者 :)
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!