本文介绍了如何使用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 频道以获取更多视频!订阅
先决条件
系统中已安装 Node.js
文本编辑器
终端或命令行
一个以太坊节点
要在以太坊网络上写入或更新任何内容,需要有人创建、签名并发送一笔交易。交易是外部世界与以太坊网络通信的方式。当交易发送到以太坊网络时,它会保留在一个称为内存池(mempool)的队列中,等待矿工处理——处于这种等待状态的交易被称为待处理交易。发送交易所需的小额费用称为 gas;交易由矿工包含进一个区块中,并且根据它们包含的 gas 价格进行优先排序,这部分 gas 价格会支付给矿工。
你可以在这里获取更多关于内存池和待处理交易的信息。
为什么我们要查看待处理交易?
通过检查待处理交易,可以执行以下操作:
估算 gas:理论上,我们可以通过查看待处理交易来预测下一个区块的最佳 gas 价格。
交易分析:我们可以分析去中心化交易所上的待处理交易,以预测市场趋势。
抢先交易:在 DeFi 中,你可以预览即将到来的与价格相关的预言机交易,并可能在 MKR、COMP 和其他协议上对金库进行清算。
流式传输待处理交易有很多用例——我们不会在这里全部涵盖。
我们将使用 ethers.js 通过 WebSockets 流式传输这些待处理交易。在编写代码之前,我们先看看如何安装 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 将安装在你的系统中。
今天我们几乎可以使用任何以太坊客户端,例如 Geth 或 OpenEthereum(原名 Parity)。由于要流式传输新传入的待处理交易,节点连接必须稳定可靠;维护一个节点是一项具有挑战性的任务,我们只需在此处创建一个免费的 QuickNode 账户here 并轻松设置一个以太坊端点。创建免费以太坊端点后,复制你的 WSS(WebSocket)提供者端点:
稍后你会需要这个,所以复制并保存它。
创建一个简短的脚本文件 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!