【发布时间】:2022-11-12 11:01:32
【问题描述】:
我正在运行以太坊侧链的一个节点。几天前,我开始只在日志中收到“没有兼容 eth 支持的快照上的对等连接”错误消息。它不会下载任何新块。我本地链中的最后一个区块是 5 天前的。我想也许它与合并有关。
该节点在 docker 容器内运行,我不知道如何使用 docker 做任何事情。我唯一的选择是与节点交互。
首先,我尝试通过 RPC 使用debug_setHead。我把头向后仰大约。在我的链中最后一个块之前的 100k 个块。但是当它到达同一个块时,我只会再次收到那些错误消息。奇怪的是,在这两次(第一次发生和放回头部后)之前出现的日志消息是“深度冻结链段”,之后我只得到“在没有兼容 eth 支持的情况下在 snap 上连接的对等点”。
因为放回头部不起作用,我尝试的下一件事是修剪节点。根据文档,这个侧链的修剪应该只需要 1 到 2 个小时(它在 SSD 上)。但即使在一夜之间运行它,我也永远不会收到“状态修剪成功”的日志消息。
不知道该怎么做,我启动了我的节点并阅读了日志。 日志的结尾说:
WARNING!
The clean trie cache is not found. Please delete it by yourself after the pruning. Remember don't start the Geth without deleting the clean trie cache otherwise the entire database may be damaged!
Check the command description "geth snapshot prune-state --help" for more details.
INFO [09-16|18:14:45.182] Pruning state data nodes=1 size=115.00B elapsed=13m3.752s eta=14m13.881s
INFO [09-16|18:14:53.188] Pruning state data nodes=2,264,671 size=676.51MiB elapsed=13m11.758s eta=14m7.433s
INFO [09-16|18:15:01.198] Pruning state data nodes=4,284,801 size=1.25GiB elapsed=13m19.768s eta=14m2.59s
之后它将停止记录。它从不尝试连接到链并下载任何块。我不确定启动节点是否会损坏链,因为毕竟它从未下载任何新的链数据。我也不知道如何删除干净的 trie 缓存。
我尝试的最后一件事是删除所有 docker 容器。我运行了docker system prune,它删除了所有容器、图像和卷。但是重新安装节点后没有任何改变。我仍然得到与上图相同的日志(没有下载任何块),因为显然它没有删除任何链数据。
启动节点时,RPC 端点也不再工作。
我完全迷路了。我不知道首先是什么导致了这个问题或如何解决它。我该怎么做才能让我的节点重新启动并运行?
更新:
我现在也尝试使用geth removedb 删除链数据,但我仍然收到完全相同的日志警告,之后没有任何反应。也许删除干净的缓存可以帮助至少更进一步,但我不知道如何在 docker 容器中做到这一点。
更新 2:
geth removedb虽然没有删除数据库,但肯定是删除了什么,因为启动节点后,剪枝成功完成。但正如预期的那样,它并没有解决我原来的问题。我仍然得到源源不断的
ERROR[09-16|20:50:27.777] Snapshot extension registration failed peer=eec7c316 err="peer connected on snap without compatible eth support"
错误日志。我的节点仍然卡在同一个旧块上。请注意,此错误流仅从某个块开始,而不是我的节点的一般问题。如果我使用debug_setHead 将头部设置为先前的块,则节点将成功同步到我卡在的块。
【问题讨论】:
标签: blockchain ethereum go-ethereum pruning