pBFT共识算法梗概,以及zilliqa优化了的算法

在pBFT共识中,所有参与共识的节点是按照某种规则排序的,另外还有一个主节点(领导者)。每一轮的pBFT共识分为以下几步:

  1. 预先准备阶段:主节点向共识节点广播需要共识的内容;
  2. 准备阶段:收到预准备消息后,每一个共识节点判断其准确性,并向所有其他节点广播准备阶段消息;
  3. 提交阶段:在接收到超过2/3的节点的准备阶段消息后,一个节点广播提交阶段消息。在收到超过2/3的提交阶段消息后,可以认为主节点广播的需要共识的内容形成了共识。
    pBFT依赖于一个诚实的领导者来引导新的共识阶段,如果领导者不诚实,那么会阻碍整个共识的进度。对此,pBFT中规定,在一段时间内,如果节点没有看到共识有任何的进度,可以提议换领导者。如果2/3以上的节点同意换领导者,那么可以根据一个事先约定的顺序选出下一个领导者。

pBFT的沟通复杂度为O(n2)。


利用数字签名,将pBFT需要的交流复杂度从O(n2)降低到了O(n);并应用了植入了EC-Schnorr 多签方法,以及自定义的签名数位(bitmap)的方式,并将签名数据大小从O(n)降低到了O(log(n))。
Zilliqa的签名数位是指:通过一个数字B[i],记录第i个节点是否签名。签名的话,B[i]=1,不然为0。

Zilliqa改进了的pBFT共识流程如下:

  1. 预准备阶段:领导者将区块信息广播给共识组的所有节点;
  2. 准备阶段:节点验证区块信息,领导者汇集超过2/3共识节点的反馈。签名被用EC Schnorr多签的方式生成,领导者同时建立签名数位。
  3. 提交阶段: 第二轮的 EC-Schnorr
    多签共识。这一轮,发送的是在准备阶段生成的签名。在这一轮被2/3的节点验证后,区块信息的共识完成。

你可能感兴趣的:(pBFT共识算法梗概,以及zilliqa优化了的算法)