以太坊:从RPC服务中为回填检索大量旧的smartcontract日志数据的好方法是什么?

时间:2018-03-17 16:55:58

标签: ethereum go-ethereum

我提出的问题是使用来自以太坊区块链的给定智能合约的事件日志中的数据来回填专用数据库。

但问题是:如何在不达到eth_getLogs的限制的情况下这样做(也没有限制:如何获得合理大小的RPC响应)

到目前为止我尝试了什么

我更喜欢使用Infura,但是他们将此调用限制在每个响应100个条目。理所当然地,查询应该在小块中进行,以实现负载平衡等。是api pagination + eth_getLogs正确的方法来收集回填数据吗?

创意1:eth_getLogs关于块的范围

除了查询块的范围之外,我不知道如何对eth_getLogs进行分页。但是,一个块可能包含100多个事件,这使我无法在使用Infura时读取所有数据。也许有一种方法可以对日志索引进行分页? (100是我在试验时遇到的东西,但我无法找到相关文件)

创意2:记录过滤器

使用过滤器RPC调用是另一种选择:即启动一个"观察者"在一系列旧街区。我试过这个,但我使用的Infura websocket RPC似乎没有给出任何响应,在本地测试时Ganache也没有。非归档(即实时监听)日志工作,所以我知道我的代码至少按预期工作。 (我的go-ethereum Watch...生成的绑定调用有效,但在bind.WatchOpts.Start中指定旧块时不会导致输出通道上的响应

有没有人对如何检索大量日志数据有任何建议?或者是解决此问题的其他项目的链接?

0 个答案:

没有答案