1. 共识机制现状
经过前面几节课的介绍,我们知道现在主流的区块链共识机制主要有两类,即概率一致性算法和绝对一致性算法。区块链中的工作量证明POW类型的共识算法、股权证明POS以及变种DPOS都是属于概率一致性算法的,而以PBFT为代表的共识算法属于绝对一致性算法。其中,比特币的Nakamoto共识和早期的以太坊中的共识算法就采用了POW,以太坊的casper就是使用了POS共识算法。这几种主流共识算法各有所长,但是都存在一定的缺陷。
POW类型的共识算法虽然通过耗费算力来解决一个密码学难题来证明自己不会作恶,允许节点的任意加入,可扩展性强,但是这类算法的缺点是足够慢才能保证系统的安全性,同一个时刻只有一个矿工产生的区块会被认可,其他区块被视为分叉,分叉上的区块和交易是不会被认可的,这就导致系统浪费了大量的资源来做无效工作。而且由于交易需要等待足够的新区块产生才能确认这笔交易被认可了,避免进入分叉而被覆盖,所以交易的确认需要很长的时间。
POS类型的共识算法中,系统的安全性基于对股权大的节点不会作恶的前提,股权越大的节点的记账概率会更大。这类系统虽然能抵御女巫攻击,但会导致“富豪统治”的问题。
在上一节课中,我们知道,PBFT算法的正确性要求系统中的可信节点数大于2/3,换句话来说,这类区块链系统中需要对节点进行等级划分和权限控制,用户节点是不能随意加入系统作为验证节点的。此外,PBFT算法性能会随着节点个数的增加而下降,可扩展性不强。
表1-1 主流共识算法
其实不论是POW、POS还是PBFT算法,核心都是要解决区块链的安全和性能的困境问题,但是每种方案都存在一定的缺陷,共识机制需要在理论和工程实践上持续改进。融合多种共识算法优势的共识算法、DAG共识机制、基于可信硬件的共识算法等在未来都是值得关注的。下面我们主要讲讲融合了多种共识算法的algorand、DAG以及基于可信硬件的共识机制。
2. Algorand
我们在前面的几节课中提到,拜占庭容错算法应用于区块链作为共识算法,是一个确定性的算法,不会出现分叉,交易的确认时间短。传统的POW算法是一个概率一致性算法,比如比特币的共识算法 Nakamoto,同一时间多个矿工可以打包交易提出新块,只要该新块中包含一个值是的区块的哈希的前缀为n个0,则是合法的。这种开放式的规则不可避免地会导致区块分叉,Nakamoto 共识规定只有出现在最长的链上的区块才会最终被认可。为此, 用户在交易被矿工打包入块之后,需要延迟至少六个块约一个小时的时间才能确定交易不会出现在分叉中。但是,将BFT算法直接作为公链的共识算法时会存在一些问题:
-
BFT算法的正确性建立在系统中超过2/3的节点是可信节点的基础上,用户节点不能随意地加入系统中,这违背了区块链的去中心化精神。
-
BFT算法的性能会随着节点数的增加而下降,这就限制了系统的节点不能无限制地增加。
针对BFT算法在区块链的去中心化、可扩展性和安全存在的问题,图灵奖得主 Micali 在2016年的SOSP大会上提出了 Algorand 算法。Algorand 的核心是通过在BFT算法中引入可验证随机函数 VRF 来随机选取委员会作为每一轮投票的节点。在给定节点私钥sk、随机种子seed和输入的要竞选的角色role的前提下,如果节点当选为指定的角色role,即负责出块的提议者或者共识的投票者的话,VRF函数会输出一个哈希hash和证明π,其他节点通过该节点的私钥sk对应的公钥pk、哈希hash以及证明π,便可通过VRF验证函数来验证该节点是否当选为指定的角色。