eth_call、eth_getBalance 或 eth_estimateGas 等请求。
背景
尚未本地执行过forkpoint.root - delay 区块的节点将在启动时进行 statesync(参见 forkpoint 启动同步)。此外,节点不会响应超过 statesync_threshold(600)个区块之前的 blocksync 请求。Statesync 是节点在协议内恢复的唯一方式。
本文档描述了一种备选方式来恢复节点,同时在节点停机时间超过 blocksync 提供窗口(600 个区块)的情况下回填历史状态。
请注意,如果 node.toml 中的 statesync_threshold 设置为一个更大的值,blocksync 将失败。
步骤
- 以
monad用户身份 SSH 登录故障节点。 - 确保
node.toml中statesync_threshold = 600
- 停止 monad 服务
-
运行以下脚本以复制缺失的区块,然后执行到该点。您需要运行几次,因为在脚本执行期间链的最新高度会持续推进。
- 注意:在输出停止时,您需要手动中断进程(Ctrl - C)。
-
复制该脚本并命名为
manual-sync.sh -
运行脚本
-
一旦第一个脚本在 1 分钟内完成,运行以下脚本:
- 复制该脚本并命名为
manual-sync-step-2.sh - 运行脚本
- 复制该脚本并命名为
检查
要检查是否成功避开了 statesync,请对节点停机期间已终局化的区块发送eth_getBlockByNumber RPC 请求。

