如何使用 Ethers.js 流式传输待处理交易

  • QuickNode
  • 发布于 2025-01-19 17:57
  • 阅读 38

本文介绍了如何使用ethers.js从以太坊网络中流式获取待处理交易,并详细说明了如何安装ethers.js、设置以太坊节点以及编写脚本来监听和获取待处理交易。

概述

在以太坊上,交易在被包含进一个区块之前,会保留在一个被称为待处理交易队列、交易池或内存池(mempool)的地方——它们都是同一个意思。矿工随后从这个队列中选择一部分待处理交易进行挖矿——对于交易者、希望节省 gas 费用的人来说,能够访问和分析这些信息有很多好处。

在本指南中,我们将学习如何使用 ethers.js 从以太坊及类似链上流式传输待处理交易。

更喜欢视频教程吗?跟随 Noah 学习如何在 8 分钟内使用 Ethers.js 流式传输待处理交易。

如何使用 Ethers.js 获取待处理的以太坊内存池交易 | QuickCodes - YouTube

QuickNode

131K 订阅者

如何使用 Ethers.js 获取待处理的以太坊内存池交易 | QuickCodes

QuickNode

搜索

信息

购物

点击取消静音

如果播放没有立即开始,请尝试重新启动设备。

你已退出登录

你观看的视频可能会被添加到电视的观看历史记录中,并影响电视推荐。为避免这种情况,请取消并在计算机上登录 YouTube。

取消确认

分享

包含播放列表

检索分享信息时出错。请稍后再试。

稍后观看

分享

复制链接

在 YouTube 上观看

0:00

/ •直播

在 YouTube 上观看

订阅我们的 YouTube 频道以获取更多视频!订阅

先决条件

  • 系统中已安装 Node.js

  • 文本编辑器

  • 终端或命令行

  • 一个以太坊节点

什么是待处理交易?

要在以太坊网络上写入或更新任何内容,需要有人创建、签名并发送一笔交易。交易是外部世界与以太坊网络通信的方式。当交易发送到以太坊网络时,它会保留在一个称为内存池(mempool)的队列中,等待矿工处理——处于这种等待状态的交易被称为待处理交易。发送交易所需的小额费用称为 gas;交易由矿工包含进一个区块中,并且根据它们包含的 gas 价格进行优先排序,这部分 gas 价格会支付给矿工。

你可以在这里获取更多关于内存池和待处理交易的信息。

为什么我们要查看待处理交易?

通过检查待处理交易,可以执行以下操作:

  • 估算 gas:理论上,我们可以通过查看待处理交易来预测下一个区块的最佳 gas 价格。

  • 交易分析:我们可以分析去中心化交易所上的待处理交易,以预测市场趋势。

  • 抢先交易:在 DeFi 中,你可以预览即将到来的与价格相关的预言机交易,并可能在 MKR、COMP 和其他协议上对金库进行清算。

流式传输待处理交易有很多用例——我们不会在这里全部涵盖。

我们将使用 ethers.js 通过 WebSockets 流式传输这些待处理交易。在编写代码之前,我们先看看如何安装 ethers.js。

安装 ethers.js

我们的第一步是检查系统中是否已安装 node.js。为此,请在终端/cmd 中复制粘贴以下内容:

$ node -v

如果未安装,可以从官方网站下载 NodeJS 的 LTS 版本。

现在我们已经安装了 node.js,让我们使用 npm(Node Package Manager)安装 ethers.js 库,npm 随 Node.js 一起提供。

$ npm i ethers@5.7

确保你的 Ethers.js 安装版本为 5.7

此步骤中最常见的问题是 node-gyp 的内部故障。你可以按照node-gyp 安装说明进行操作。

注意:如果你遇到 node-gyp 问题,需要确保你的 python 版本与上述说明中列出的兼容版本之一匹配。

另一个常见问题是缓存陈旧;通过简单地在终端中输入以下内容来清除 npm 缓存:

$ npm cache clean

如果一切顺利,ethers.js 将安装在你的系统中。

设置你的 QuickNode 以太坊端点

今天我们几乎可以使用任何以太坊客户端,例如 Geth 或 OpenEthereum(原名 Parity)。由于要流式传输新传入的待处理交易,节点连接必须稳定可靠;维护一个节点是一项具有挑战性的任务,我们只需在此处创建一个免费的 QuickNode 账户here 并轻松设置一个以太坊端点。创建免费以太坊端点后,复制你的 WSS(WebSocket)提供者端点:

QuickNode 以太坊端点截图

稍后你会需要这个,所以复制并保存它。

流式传输待处理交易

创建一个简短的脚本文件 pending.js,该文件将对传入的待处理交易进行交易过滤。将以下内容复制粘贴到文件中:

var ethers = require("ethers");
var url = "ADD_YOUR_ETHEREUM_NODE_WSS_URL";

var init = function () {
  var customWsProvider = new ethers.providers.WebSocketProvider(url);

  customWsProvider.on("pending", (tx) => {
    customWsProvider.getTransaction(tx).then(function (transaction) {
      console.log(transaction);
    });
  });

  customWsProvider._websocket.on("error", async () => {
    console.log(`Unable to connect to ${ep.subdomain} retrying in 3s...`);
    setTimeout(init, 3000);
  });
  customWsProvider._websocket.on("close", async (code) => {
    console.log(
      `Connection lost with code ${code}! Attempting reconnect in 3s...`
    );
    customWsProvider._websocket.terminate();
    setTimeout(init, 3000);
  });
};

init();

所以请将 **ADD_YOUR_ETHEREUM_NODE_WSS_URL** 替换为上面部分的 WSS(WebSocket)提供者。

解释上面的代码。

第 1 行:导入 ethers 库。

第 2 行:设置我们的以太坊节点 URL。

第 4 行:创建 init 函数。

第 5 行:实例化一个 ethers WebSocketProvider 实例。

第 7 行:为待处理交易创建一个事件监听器,每次从节点发送新交易哈希时都会运行。

第 8-10 行:使用从上一步获得的交易哈希获取整个交易,并在控制台中打印交易。

第 13-16 行:如果连接遇到错误,重新启动 WebSocket 连接的函数。

第 17-21 行:如果连接中断,重新启动 WebSocket 连接的函数。

第 24 行:调用 init 函数。

现在,让我们运行我们的脚本。

$ node pending

如果一切顺利,你应该会看到传入的待处理交易。类似这样

使用 Ctrl+c 停止脚本。

结论

在这里,我们看到了如何使用 ethers.js 从以太坊网络获取待处理交易。在文档中了解更多关于 ethers.js 中的事件过滤器和交易过滤器的信息。

订阅我们的新闻通讯以获取更多关于以太坊的文章和指南。如果你有任何反馈,请随时通过Twitter联系我们。你可以在我们的Discord社区服务器上与我们聊天,那里有一些你会遇到的最酷的开发者 :)

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。