Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ethereum 以太坊:什么';从RPC服务检索大量旧smartcontract日志数据进行回填的好方法是什么?_Ethereum_Go Ethereum - Fatal编程技术网

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

Ethereum 以太坊:什么';从RPC服务检索大量旧smartcontract日志数据进行回填的好方法是什么?,ethereum,go-ethereum,Ethereum,Go Ethereum,我面临的问题是使用以太坊区块链上给定smartcontract的事件日志中的数据回填专用数据库 然而,问题是:如何做到这一点而不达到eth_getLogs的限制(同样没有限制:如何有合理大小的RPC响应) 到目前为止我试过什么 我更喜欢使用Infura,但他们将此调用限制为每个响应100个条目。正确地说,查询应该分小块进行,以便进行负载平衡等。api分页+eth_getLogs是收集数据进行回填的正确方法吗 想法1:eth\u getLogs关于块的范围 除了查询块的范围之外,我不知道有什么方法

我面临的问题是使用以太坊区块链上给定smartcontract的事件日志中的数据回填专用数据库

然而,问题是:如何做到这一点而不达到
eth_getLogs
的限制(同样没有限制:如何有合理大小的RPC响应)

到目前为止我试过什么 我更喜欢使用Infura,但他们将此调用限制为每个响应100个条目。正确地说,查询应该分小块进行,以便进行负载平衡等。api分页+
eth_getLogs
是收集数据进行回填的正确方法吗

想法1:
eth\u getLogs
关于块的范围 除了查询块的范围之外,我不知道有什么方法可以对
eth_getLogs
进行分页。但是,一个块可能包含100多个事件,这会阻止我在使用Infura时读取所有数据。也许有办法在日志索引上分页?(100是我在试验时偶然发现的,但我找不到有关这方面的文档)

想法2:日志过滤器 使用筛选器RPC调用是另一种选择:即在一系列旧块上启动“观察者”。我尝试过这个,但是我使用的infurawebsocketrpc似乎没有给出任何响应,本地测试时Ganache也没有。非归档(即现场观看)日志工作,所以我知道我的代码至少按预期工作。(My go ethereum
Watch…
生成的绑定调用可以工作,但在
bind.WatchOpts.Start
中指定旧块时,不会在输出通道上产生响应)



有人对如何检索大量日志数据有什么建议吗?或者指向解决此问题的其他项目的链接?

您为什么不能使用完全同步的本地节点而不是使用Infura初始化数据库?我将采用这种方法处理遗留事件,然后切换到Infura进行实时更新。@AdamKipnis感谢您的快速输入。是的,这种方法很有效,如果没有更好的解决方案,我会选择这种方法,但我更喜欢解决api问题本身。回填旨在删除不一致/失败的更新,并在最后Y个块中每X分钟运行一次。所以我更喜欢一个不需要太多维护就能持续运行的设置。我可以分散日志查询工作负载,以便与Infura/其他平台配合使用。