6. RBFT节点增删

在联盟链场景下,由于联盟的扩展或者某些成员的退出,需要联盟链支持成员的动态进出服务,而传统的PBFT算法不支持节点的动态增删。RBFT为了能够更加方便地控制联盟成员的准入和准出,添加了保持集群非停机的情况下动态增删节点的功能。

新增节点流程

image4

上图中,Replica 5为待新增的节点。RBFT节点的动态新增节点流程如下:

  1. 新增节点Replica 5通过读取配置文件信息,主动向现有节点发起连接,确认所有节点连接成功后更新自身的路由表,并发起recovery;
  2. 现有节点接收到Replica 5的连接请求后确认同意该节点加入,然后向全网广播AddNode消息,表明自己同意该新节点加入整个共识网络;
  3. 当现有节点收到N条(N为现有区块链共识网络中节点总数)AddNode消息后,更新自身的路由表,随后开始回应新增节点的共识消息请求(在此之前,新增节点的所有共识消息是不予处理的);
  4. Replica 5完成recovery之后,向全网现有节点广播ReadyForN请求;
  5. 现有节点在收到ReadyForN请求后,重新计算新增节点加入之后的N,view等信息,随后将其与PQC消息封装到AgreeUpdateN消息中,进行全网广播;
  6. Replica 5加入后的共识网络会产生一个新的主节点,该主节点在收到N-f个AgreeUpdateN消息后,以新的主节点的身份发送UpdateN消息;
  7. 全网所有节点在收到UpdateN消息之后确认消息的正确性,进行VCReset;
  8. 每个节点完成VCReset后,全网广播FinishUpdate消息;
  9. 节点在收到N-f个FinishUpdate消息后,处理后续请求,完成新增节点流程。