如何过滤给定地址的传入交易?

How can I filter incoming transactions for a given address?

使用 Infura 作为我的以太坊节点我已经订阅了网络套接字中的 pendingTransactions 项。对于发生的 每个 交易,我都会收到一个交易 ID。为了确定它是否与我相关,我必须调用 getTransaction() 方法

因此我不得不调用该方法 100,000 次,这使我超过了 Infura 配额

公平地说,我什至不想要待处理的交易。我更喜欢已完成的交易,但 API 似乎没有提供

我看到这篇文章:https://medium.com/coinmonks/monitoring-an-ethereum-address-with-web3-js-970c0a3cf96d 这似乎支持以太坊并没有让这变得容易的观点

谁能推荐更好的方法?

TIA, ekkis

您可以订阅您的节点提供商支持的任何 websocket 频道。但是,大多数提供商(包括 Infura)使用 go-ethereum or openethereum 客户端软件,默认情况下仅实现 web3js 文档中列出的四个通道:pendingTransactionsnewBlockHeaderssyncinglogs.

因此,为了仅订阅挖掘的交易 to/from 指定地址,您需要找到一个提供带有过滤器(不太可能)的交易通道的提供商。或者 运行 您自己的节点并使用通道的自定义实现扩展其代码(技术上可行,但范围不小)。

解决方法:使用收集所有交易的外部服务,将它们存储在可搜索的数据库中,并允许其用户请求过滤数据。例如,Etherscan 在这种情况下有一个有限的免费 endpoint

我写了一个工具,它完全可以满足您的需求,您可以向该工具提供您的节点 RPC(HTTP) 地址、块号以开始编制索引,并且它有一个 Web 界面供您上传地址列表进行检查,当您对其中一个地址有传入交易时,您会收到通知。

https://github.com/ahmadbrainworks/fiddi