本文指南介绍了如何使用Ganache和QuickNode建立一个本地模拟的以太坊环境,以便进行去中心化金融(DeFi)项目的开发和测试。文章详细地说明了Ganache的作用、以太坊区块链的分叉方法,以及如何通过命令行设置和查询本地环境中的区块信息。结合清晰的步骤和示例代码,本文是以太坊开发者的实用指南。
重要通知
本指南提到了 Truffle 或 Ganache,这些工具不再积极维护。我们建议探索 Hardhat 框架作为替代,因为 Consensys 在 停止 Truffle 和 Ganache 后与 Hardhat 建立了新的合作关系。你可以在我们这里找到 与 Hardhat 相关的指南。如果你想查看此指南的更新版本,请 告诉我们!
如果你想从事 DeFi 工作或进行以太坊开发,分叉和运行本地模拟的以太坊环境是必不可少的。在本指南中,我们将讲解如何使用 Ganache 分叉以太坊区块链。
Ganache 是一种以太坊开发工具,可以让你在本地模拟区块链环境,并测试已部署的智能合约。你可以在整个开发周期中使用 Ganache,这使你能够以安全且可预测的环境来开发、部署和测试你的去中心化应用程序(dApps)。
智能合约一旦部署到区块链上便无法更改,因此在将其部署到区块链之前彻底测试和调试智能合约变得至关重要。因此,拥有一个本地区块链环境是必要的,这可以使开发人员免于交易费用和延迟。Ganache 正是为此而设计。它是一个用于开发和测试目的的本地内存区块链,能够模拟真实的以太坊网络,并且提供一些已经用测试以太(test Ether)资助的账户。
在软件开发中,分叉表示制作一个与原始事物隔离的副本。分叉以太坊区块链意味着在某一个区块复制以太坊区块链的状态,并制作一个副本以进行进一步的更改。这允许你在不更改真实以太坊主网的情况下使用以太坊网络。这样做的主要原因是可以在区块链上使用现有的智能合约,而无需重新创建它们。例如,如果你想处理某个特定的 DeFi 协议,你可以找到该协议的智能合约,并在该区块分叉网络。这将允许你在不进行真实交易的情况下,使用智能合约测试你的项目。
我们可以使用几乎任何以太坊客户端,例如 Geth 或 OpenEthereum(前身为 Parity,对我们而言)。由于这对于分叉一个区块来说有些复杂,我们将创建一个免费的 QuickNode 账户 在这里,并生成一个以太坊端点。我们需要一个主网端点来从链中获取数据,因为我们试图在本地制作一个模拟的主网。在你创建了免费的以太坊端点后,复制你的 HTTP Provider 端点:
你稍后将需要这个,所以请复制并保存。
我们将使用 Ganache CLI 来分叉主网;Ganache CLI 使用 ethereumjs 来模拟完整的客户端行为,使以太坊上的开发更快、更容易和更安全。
你可以使用 npm (Node 包管理器)下载 Ganache CLI,
$ npm install -g ganache-cli
或者使用 yarn 包管理器。
$ yarn global add ganache-cli
此步骤中最常见的问题是 node-gyp
的内部故障。你可以按照 node-gyp 安装说明 进行操作。
注意:如果你遇到 node-gyp 问题,你需要确保你的 Python 版本与上述说明中列出的兼容版本之一匹配。
另一个常见问题是缓存过期;通过在终端输入以下命令清除你的 npm 缓存:
$ npm cache clean
如果一切顺利,Ganache CLI 就会安装在你的系统上。
要分叉主网,请打开你的终端/命令提示符并复制粘贴以下内容:
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE>
将 ADD_YOUR_QUICKNODE_URL_HERE 替换为我们之前获得的 QuickNode HTTP URL,并运行该命令;你必须看到类似于以下内容的输出。
它将在区块链的最新区块 12200647 处分叉主网,如上述示例所示。你可以通过 ping localhost:8545 查询分叉链。
你可以通过在节点 URL 后面附加“@”和区块编号,以特定区块在区块链上分叉。
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE>@<block_number>
假设我们想在以太坊区块链网络上进行一些 xDai 链的开发并使用 xDai 作为Gas费。我们可以在 etherscan 上搜索 Dai,然后进入 持有者部分,查看最大的 Dai 持有者并复制一个地址,然后运行以下命令。
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE> -u <address of token holder>
在这里,ganache 将分叉以太坊区块链并为本地 ganache 环境解锁(-u)上述账户。使用 ganache-cli,我们可以冒充某个特定的账户地址,该账户通常是锁定的。我们还可以从该账户地址在模拟的区块链上进行交易。
注意:你可以使用的代币不是实际代币,仅用于开发和测试目的。
注意:你需要一个带有存档附加组件的节点,以访问比最新区块早 64 个区块的区块。
现在,让我们从分叉链获取一些信息;我们将进行一次 eth_getBlockByNumber 调用,这将返回有关我们分叉链的区块的信息。我们需要将区块编号从 十进制转换为十六进制 并添加 0x 前缀。
$ curl --data '{"method":"eth_getBlockByNumber","params":["0xBA29D2",false],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
我们将获得类似于以下内容的输出。
上面的输出包含有关区块的数据,例如交易、区块中使用的Gas、时间戳、矿工地址等。以下是 完整输出。
现在你有了本地的区块链环境,你可以与已部署的合约进行交互并构建一些非凡的东西。请参考 Ganache CLI 读取我,以了解更多 Ganache 功能。
订阅我们的 通讯,获取更多关于以太坊的文章和指南。如果你有任何反馈,请随时通过 Twitter 联系我们。你随时可以在我们的 Discord 社区服务器与我们聊天,这里有一些你遇到的最酷的开发者 :)
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!