我遇到的问题是回填一个专门的数据库,使用以太坊区块链上给定智能合约的事件日志中的数据。
然而,问题是:如何在不达到限制的情况下这样做eth_getLogs
(也没有限制:如何获得合理大小的 RPC 响应)
到目前为止我尝试了什么
我更喜欢使用 Infura,但他们将此调用限制为每个响应 100 个条目。理所当然地,查询应该在小块中完成以进行负载平衡等。api分页+eth_getLogs
收集数据以进行回填的正确方法吗?
想法1:eth_getLogs
关于块的范围
eth_getLogs
除了查询块的范围之外,我不知道有任何方法可以分页。然而,一个块可能包含超过 100 个事件,这使我在使用 Infura 时无法读取所有数据。也许有一种方法可以对日志索引进行分页?(100 是我在实验时遇到的,但我找不到这方面的文档)
想法2:日志过滤器
使用过滤器 RPC 调用是另一种选择:即在一系列旧块上启动“观察者”。我试过这个,但我使用的 Infura websocket RPC 似乎没有给出任何响应,Ganache 在本地测试时也没有。非存档(即实时观看)日志工作,所以我知道我的代码至少按预期工作。(我的 go-ethereumWatch...
生成的绑定调用有效,但在指定旧块时不会导致输出通道上的响应bind.WatchOpts.Start
)
有人对如何检索大量日志数据有任何建议吗?或者链接到解决这个问题的其他项目?