本文首先简要介绍 ethers.js 和 Web3 流的复杂性。然后,本文对两者进行比较,强调它们的相似之处和不同之处。最后,我们将深入研究使用 ethers.js 与 Web3 流设置区块链侦听器的实际示例。在此过程中,我们将进一步探讨它们的区别以及 Moralis 成为首选的原因!
Ethers.js –它是什么?
Ethers.js 于 2016 年发布,是最著名的 Web3 JavaScript (JS) 库之一。ethers.js 的目标是成为一个完整而紧凑的库,使开发人员能够与以太坊网络交互。它最初旨在与“ ethers.io ”一起使用,但后来演变成一个更通用的库。
ethers.js 的一些核心功能包括该库的详尽文档、用户友好的 API 结构、较小的包大小以及用 TypeScript 编写。此外,它是一个相对直观且易于使用的库。因此,它是 Web3 开发人员设置区块链监听器的首选之一。
Ethers.js 由四个核心模块组成:“ ethers.contract ”、“ ethers.utils ”、“ ethers.wallets ”和“ ethers.provider ”。每个模块都有不同的功能,对于库的应用程序编程接口 (API) 至关重要。不过,如果您想了解有关这些模块以及库的更多信息,请查看我们的另一篇文章,其中回答了“什么是 Ethers.js? ”这个问题。
什么是 Web3 流?
Web3 流本质上是一个高级区块链监听器,允许您监控区块链钱包或智能合约事件,您可以使用 Moralis 的Web3 Streams API轻松设置一个!此外,使用此 API,您可以通过Moralis webhook将区块链数据无缝地流式传输到您的应用程序或 Web3 项目的后端。
此外,借助 Moralis 的跨链功能,您可以为多个链设置 Web3 流。这包括 Polygon、Avalanche、BNB Chain、以太坊等。此外,Streams API 由 Moralis 的团队积极维护,他们正在不断致力于添加更多网络!
您可以使用 API 设置 Web3 流,以便在地址发送、接收、交换或质押资产时接收 Webhook。此外,当 Web3 游戏中开始战斗、有人参与代币销售或根据您的过滤器触发任何其他智能合约事件时,您都可以接收 Webhook。
现在,我们对 ethers.js 和 Web3 流有了更好的了解,我们将在下一节中对两者进行比较,以强调它们在监控链上事件时的异同!
Ethers.js 与 Web3 流的比较
Ethers.js 是设置区块链监听器以实时接收有关链上事件的信息的一个很好的替代方案。不幸的是,如果你开始使用 ethers.js,你很快就会注意到这个库有局限性。因此,你应该考虑 Moralis 的 Web3 Streams API 作为一个选项。但是,你不必相信我们的话。加入我们的下一节,我们将比较 ethers.js 和 Web3 流,以突出它们的差异以及为什么 Moralis 是首选!
上图总结了 ethers.js 和 Web3 流之间的主要区别。一眼望去,您会立即注意到 Moralis 提供了 ethers.js 提供的所有功能,甚至更多。但是,让我们更详细地介绍每一点,以深入分析 ethers.js 与 Web3 流!
为什么选择 Moralis?– Ethers.js 与 Web3 Streams
如上一节图片中的表格所示,您可以使用 ethers.js 和 Moralis 的 Web3 流来实时监听区块链事件。这两种替代方案都具有多条链,这意味着您可以监控各种网络的事件。然而,这仅涵盖了 ethers.js 和 Moralis 的 Web3 流之间的相似之处;现在,让我们深入了解它们之间的差异。
首先,使用 Moralis,您可以获得 100% 的可靠性,而使用 ethers.js 并不总是如此。当您使用 ethers.js 设置区块链侦听器时,您必须添加单独的节点提供程序,这在某些情况下可能会出现问题。例如,提供商可能不支持您想要的链,并且很难 100% 确定节点保持运行。相反,使用 Moralis,您可以拥有一个单一、简单的技术堆栈,并始终通过Web3 webhook获取实时警报。
此外,在设置 Web3 流时,您可以使用 Moralis 添加过滤器。这样,您可以定位特定事件,并仅接收您感兴趣的数据的 webhook。例如,您可以设置流以仅接收超过特定转账金额的交易数据。
此外,使用 Moralis,您可以将多个合约地址汇集到一个流中,并且 webhook 会通知您事件从何处发出。而使用 ethers.js 则不是这样,您必须为要监控的所有合约创建单独的侦听器。
最后,您还可以使用 Moralis 监听钱包地址。这样,当钱包执行特定操作时,您就可以收到 webhook。此外,从 Web3 流收到的数据会被解析,这意味着您不必担心额外的处理。这样,您就可以收到所有需要的数据,开箱即用!
Ethers.js 与 Web3 Streams——哪个是开发人员的最佳选择?
通过比较 ethers.js 与 Web3 流,您现在熟悉了这两个选项之间的差异。但是,为了使区别更加直接,并突出使用 Moralis 相对于 ethers.js 的优势,以下部分将基于这两种替代方案探讨实际示例。因此,让我们首先仔细看看如何使用 ethers.js 设置区块链侦听器!
Ethers.js 实例
在以下 ethers.js 示例中,我们将简要介绍设置区块链监听器以监控 USD 币智能合约的代码。具体来说,我们将监控合约的转账事件。不过,您可以在下图中找到整个代码:
主要部分是“ getTransfer() ”函数,我们最初在其中添加合约地址。从那里,我们使用 ethers.js 库的模块之一指定“提供者”。由于我们在使用 ethers.js 时需要添加节点提供者,因此我们失去了一些可靠性,因为我们无法 100% 确定他们是否可以始终保持其节点完全运行。我们还需要确保提供者支持我们感兴趣的链。
从这里,我们创建一个新的“合约”对象,以“ usdcAddress ”和“提供者”作为参数。接下来,我们设置监听器来监控合约的“转账”事件。最后,我们最终将结果记录到控制台中。
现在,一旦你运行上面屏幕截图中的代码,它将返回有关 USDC 转账的信息,它看起来像这样:
ethers.js 区块链监听器返回各种信息,例如“到”和“来自”地址以及事件数据,例如“ blockNumber ”、“ blockHash ”、“ transactionHash ”等。然而,这不包含解析数据,例如,我们无法直接确定数据究竟来自哪个合约。
这是一个很好的开始,但 Moralis 能给你带来更多!因此,让我们深入研究 Moralis Web3 Streams API 示例,探索是什么让它成为一个更好的替代方案!
Moralis 的 Web3 Streams 实际示例
对于这个例子,我们有相同的区块链监听器;但是,这一次,它是使用 Moralis 的 Web3 Streams API 设置的:
首先,如上图所示,我们首先创建一个带有几个参数的“ options ”对象。这些参数包括链、描述、标签、webhook URL 等。从那里,我们另外添加一个 Moralis API 密钥,并通过调用带有“ options ”参数的“ Moralis.Streams.add() ”函数创建一个新的“ stream ”对象。
最后,使用“ Moralis.Streams.addAddress()”函数,我们可以添加所有想要监控的地址。请注意,借助 Moralis,您可以通过将多个智能合约地址添加到“ address ”数组来包含它们。
通过运行上面的代码,它会自动创建一个新的 Web3 流,并将其添加到 Moralis 管理面板。因此,通过登录 Moralis 并单击“Streams”选项卡,我们现在应该找到一个新的流:
从那里,可以直接通过 Moralis UI 管理流。例如,只需单击几个按钮,我们就可以添加其他合同、选择更多链并应用过滤器!
Web3 Streams 响应
现在,我们简要概述了流的结构,然后仔细看看结果和收到的数据。因此,我们可以打开接收 webhook 的服务器的控制台来查看响应的样子:
上面,您可以看到发送到我们的 webhook 服务器的响应之一,其中包含已解析的数据。此响应是具有类似结构的其他交易的更广泛的阵列的一部分。尽管如此,数据包括交易哈希、日志索引、合约地址等。更重要的是,由于数据已经格式化,因此可以直接在 dapps 和其他 Web3 项目中使用它!
正如 ether.js 与 Web3 流的比较所示,您可以获得 ethers.js 提供的所有功能以及 Moralis 的 Web3 流,甚至更多!因此,在设置区块链侦听器时,选择 Moralis 应该是明智之举!
Ethers.js 与 Web3 Streams – 总结
在本文中,您了解到 Web3 开发的一个重要部分是与区块链网络交互和监听。因此,对于开发人员来说,例如,能够轻松设置区块链监听器来监控链上事件非常重要。此外,您还发现两种主要的方法是 ethers.js 和 Moralis 的 Streams API。但是,您应该选择哪种替代方案?
为了阐明这两种替代方案之间的区别,本文比较了 ethers.js 与 Web3 流。在此过程中,您会发现 Web3 流提供了 ethers.js 提供的所有功能,甚至更多。因此,如果您希望设置区块链侦听器,那么最佳选择是 Moralis 的 Web3 Streams API!