共识算法分类

分类依据:应用场景

CFT

  • 只保证在节点出现宕机等情况下不工作的异常,允许更多数量的节点宕机
  • 不保证恶意节点出现并发生错误时系统的稳定性
  • 多用于机构内部的区块链,不适合公用链
  • 代表性算法为Paxos算法及其衍生算法Raft

BFT

  • 同时保证一定允许出现一定数量的故障节点和恶意节点
  • 公用链只能使用BFT算法,公用链不保证节点不作恶
  • 代表性算法有PBFT

分类依据:网络同步

同步算法

  • 保证在有限时间内消息可以到达所有共识节点
  • 大多数联盟链采用的共识算法都过时同步算法

异步算法

  • 不对消息到达共识节点的时间做限制
  • 几乎没有高效的异步算法

半同步算法

  • 已知消息到达共识节点的时间和概率的关系
  • 是目前主流的区块链共识算法,比如PBFT

 

常见共识算法

PBFT(Pratical Byzantine Fault Tolerance 实用拜占庭容错算法)

简介

  • 主要用于联盟链
  • PBFT在1999年被loskov在《Pratical Byzantine Fault Tolerance》中首次提出
  • 算法复杂度:o(n^2)
  • 容错节点为f,则总结点数不少于3f+1

拜占庭将军问题

拜占庭位于如今土耳其的伊斯坦布尔,是古代东罗马帝国的首都,东罗马帝国幅员辽阔,为了防御外敌,会在每个城设立一个将军领导一支军队,但是这些城相距很远,相互之间通信只能靠信差,但是存在间谍和叛徒,导致信差送达的消息不一定是将军的意思,拜占庭问题就是,如何让忠诚的将军在决定是否进攻敌人这个点上达成一致。

流程

  1. 客户端发起交易请求
  2. 主节点收到请求之后打包信息进行广播
  3. 其他共识节点收到打包信息之后将带有自己签名的投票信息广播出去
  4. 客户端收到f+1个节点的相同反馈后知道达成共识了

POW(Proof Of Work,工作量证明)

简介

  • 以工作付出作为信任背书
  • 目的是使得恶意节点作恶的收益大于工作的付出
  • 预定规则:付出一定的工作就可以获取记账权,诚实节点按照预定规则工作获得记账权后,在系统认可的链上新增区块
  • 系统只认可最长链,诚实的记账节点基于最长链
  • 恶意节点想要非法篡改区块链数据需要达到的条件:篡改目标数据后,恶意节点服务器上的链必定比目前系统认可的最长链短,所以恶意节点需要付出比所有诚实节点的算力之和还大的算力来工作获取记账权,自己链的新增速度大于所有诚实节点共同维护的链的速度,才可以使得恶意节点维护的链大于诚实节点维护的最长链并被系统接受。在这个条件里面,大于所有诚实节点算力之和是必要条件,而当节点数少的时候,这个代价是可以接受的,当争取记账的节点遍布某个地区乃至世界之后,单个恶意机构拥有超越这个大型系统的诚实节点所拥有的算力的可能性就几近于0了,也就是,作恶的条件是拥有所有参与记账节点的算力的百分之五十一。最典型的就是比特币。

哈希函数

哈希函数是工作量证明的基石

哈希函数的流程

给出一个任意长度的输入,通过哈希函数计算得到一个预定长度的字符串

哈希函数的特点

  • 通过输出计算输入是不可行的,想要通过输出获取输入的唯一方式是穷举法,同理找到同一个输出的两个不同输入的唯一方法也是穷举法
  • 当输出的位数足够之后,输出的取值范围就会变得很大,比如SHA256的结果又2的256次方中,也即意味着,如果运气差到穷举的最后一个才是正确输入的话,用全世界目前的算力经过宇宙大爆炸至今的时间都穷举不出来
  • 哈希函数的计算是高效的

哈希函数在POW中的运用

  1. 指定哈希算法,比如SHA256
  2. 让矿工通过穷举法找到指定输出的输入虽然满足了节点付出工作量这一条件,但是工作量太大,是不可行的。所以减少工作量,也就是不指定具体输出,但是限制输出的值范围,通过穷举法找到范围内输出对应的输入是可行的。
工作量调节

科学是进步的,算力是逐渐增多的,如果五年前获取记账权需要的算力付出和今天一样,就会导致一个问题,同一时间,系统内会有非常多的节点拥有记账权,会产生大量的支链,不利于系统维护。

比特币系统对这个问题的解决方案是:每生成2016个节点比特币会进行以此工作量调整,也就是调整穷举的范围来调整穷举的难度,保证在每十分钟诞生一个新的区块,根据这2016个区块诞生的平均时间调整穷举的范围。

 

评价算法

容错性能

允许节点的故障数和恶意节点数等

终局性性能

达成终局性的时间

扩展性性能

区块链规模增大,共识节点增多,共识效率下降,扩展性性能即共识效率下降的幅度

网络模型性能

  • 采取不同的网络模型对共识的性能影响也很大
  • 同步算法要求消息在有限时间内到达所有共识节点并且共识节点要做出响应,否则被认为故障,所以受网络波动较大
  • 异步算法,由FLP不可能定理影响,效率难以满足
  • 半同步算法,当前主流算法

 

参考

详解 | 共识算法演变史
共识算法系列之一:raft和pbft算法
关于PBFT算法
什么是比特币的挖矿难度:它又是如何计算的
区块链共识算法--PoW