5. RBFT自主恢复

区块链网络在运行过程中由于网络抖动、突然断电、磁盘故障等原因,可能会导致部分节点的执行速度落后于大多数节点。在这种场景下,节点需要能够做到自动恢复才能继续参与后续的共识流程。为了解决这类数据恢复的问题,RBFT算法提供了一种动态数据自动恢复的机制(recovery),recovery通过主动索取现有共识网络中所有节点的视图、最新区块等信息来更新自身的存储状态,最终同步至整个系统的最新状态。在节点启动、节点重启或者节点落后的时候,节点将会自动进入recovery,同步至整个系统的最新状态。

自主恢复流程

image3

上图中,Replica 4为落后节点,需要进行recovery。此节点在RBFT中的自动恢复流程如下:

  1. Replica 4 首先广播NegotiateView消息,获取当前其余节点的视图信息;
  2. 其余三个节点向Replica 4发送NegotiateViewResponse,返回当前视图信息。
  3. Replica 4 收到quorum个NegotiateViewResponse消息后,更新本节点的视图;
  4. Replica 4 广播RecoveryInit消息到其余节点,通知其他节点本节点需要进行自动恢复,请求其余节点的检查点信息和最新区块信息;
  5. 正常运行节点在收到RecoveryInit消息之后,发送RecoveryResponse,将自身的检查点信息以及最新区块信息返回给Replica 4节点;
  6. Replica 4节点在收到quorum个RecoveryResponse消息后,开始尝试从这些response中寻找一个全网共识的最高的检查点,随后将自身的状态更新到该检查点;
  7. Replica 4节点向正常运行节点索要检查点之后的PQC数据,最终同步至全网最新的状态。