区块链技术的伟大之处在于去中心化和去信任(或降低信用成本),如何在一个完全陌生的网络环境里,通过代码撮合交易?言外之意,这些代码究竟发挥了何种神奇的魔力,让买卖双方产生信任呢?这就是共识。
1
为什么需要共识算法?
在区块链系统当中,没有一个像银行一样的中心化记账机构,每个节点都要记账。例如在公有区块链中,世界上任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。而在点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致。
那对于区块链这样的去中心化的、点对点的分布式数据库,网上成千上万的节点中谁有权创建下一个区块?对要创建的区块发生分歧怎么办?怎么防止有人恶意区块来盗取利益?这就需要共识机制来解决这样的问题。因此所谓的“共识机制”,就是一套方法论来让参与者能形成共同认识,并且在有缺陷和不诚实行为的网络中保证容错。
区块链系统,维基百科给出的解释:区块链(英语:blockchain 或 block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。意味着区块链系统就是一个分布式系统。而在分布式系统研究过程中,大家应该都听说过拜占庭问题。
知识库-拜占庭将军问题
一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。
因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。
在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
在分布式系统中,为了解决拜占庭将军问题,防止部分人作恶,就提出了相关的共识算法。
2
区块链主流的共识算法
1:工作量证明(pow)
工作量证明是第一个成功的去中心化区块链共识算法。工作量证明被比特币和其他的一些加密货币使用,例如以太坊(以太坊计划迁移到权益证明),莱特币,zcash,门罗和其他一些别的。
工作量证明要求节点参与者执行计算密集型的任务,但是对于其他网络参与者来说易于验证。在比特币的例子中,矿工竞相向由整个网络维护的区块链账本中添加所收集到的交易,即区块。为了做到这一点,矿工必须第一个准确计算出“nonce”,这是一个添加在字符串末尾的数字,用来创建一个满足开头特定个数为零的哈希值。
工作量证明最显著的优点是,它在过去的几年里得到了实践的证明,这个比许多其他共识算法都更值得一提。然而,工作量证明并不是没有缺点,其中包含采矿的大量电力消耗和低交易吞吐量。
2、权益证明(pos)
对于权益证明,有很多实施提议。在所有的实施方案中,权益证明要求所有的参与者抵押一部分他们所拥有的token来验证交易。不同于通过完成复杂计算问题来验证交易,验证者需要通过锁定token来完成交易验证。
选取交易验证者的方式通常是根据他们所抵押的token占整个网络代币的比例,以及token抵押时长,或者是一些其他的方式以确保交易验证者的利益和整个网络的长期利益是一致的。
工作量证明通过不划算的耗费电力来阻止不良行为,权益证明则通过长期绑定验证者的利益和整个网络的利益来阻止不良行为。因此,我们很乐于见到它的成功。
通过锁定代币,如果验证者存在欺诈性交易,那么他们所抵押的token也会被削减。与工作量证明一样,权益证明的细节比这里呈现的要丰富得多。
权益证明目前被用到点点币,Decred, 以及不久之后会用在以太坊上。权益证明的优势在于它更经济,可能相比于工作量证明更能有效防止攻击,但是目前还没有被有效的证明,也没有在大项目中实施。
3、委托权益证明(dpos)
虽然委托权益证明和权益证明名字差不多,但实施细节却有显著的不同。在委托权益证明中,不同于权益证明的抵押token来验证交易,而是通过token的持有者投票产生一组交易验证者(超级节点)。
委托权益证明既是去中心化的,因为网络中的所有参与者都能参与投票选取节点来验证交易,但也是中心化的,因为只有一组交易验证者,这样的好处就是提高交易和验证的速度。
委托权益证明的实施中需要维持良好的信誉,持续投票流程以及验证节点的更换,来得以保证选取产生的验证者有良好的责任心和诚实感。
委托权益证明的优势在于良好的可扩展性以及快速的交易验证,但是缺点在于部分中心化,并且治理模式还没在大的区块链项目中被证明行之有效。委托权益证明目前被用于Steemit,EOS和BitShares等项目中。
4、拜占庭容错机制(bft)
拜占庭容错机制本质上是一个高度技术性的算法(像其他共识算法一样)。一般来说,加密货币项目所采用的拜占庭容错机制是通过允许将军(节点)分别管理一条链,并在彼此之间共享消息用来确保正确的交易记录和每个节点的诚实性。
比较突出的是,拜占庭容错机制被用于瑞波(验证节点由瑞波团队选出)和恒星币(任何人都可以当验证节点,信任节点由社区共识产生)。
拜占庭容错机制的优势在于可扩展性和低廉的转账费用,但是和委托权益证明一样,引入了部分中心化。
5、新兴的共识算法
正如前面所提到的,共识算法和交易验证的问题非常困难,并且非常微妙。目前有更多新的共识算法提出不同的权衡方案,并且可能会替代当前所使用的共识算法。
目前,dag正受到越来越多的关注,并且为可扩展性提出一个可靠的潜在解决方案,Hashgraph,Tangle和Block-lattice是最近受到关注的三种实现方式(同样,即将推出的更多内容- 并非所有关注都是正面的)。
3
共识算法的评判标准
怎么评判共识算法的好坏呢,主要有以下评判标准:
1.去中心化
区块链共识算法必须包含去中心化,有时也有程度的不同。
2.网络成本
共识算法在考虑网络成本时,不仅仅要考虑交易成本和维护成本,也要考虑挖矿成本。昂贵费时的算法只能优化再优化,简化再简化, 以满足平台和应用需求。
3.扩展性
从当前现实部署看,单一的区块链负载严重,每秒钟处理能力有限,所以在扩展性指标方面,我们需要考量这种共识算法是否在技术上能够运行数千区块链的可行性。 而且在运行数量庞大的区块链后,消耗的网络成本也是可控的。
4.交易确认的速度
在区块链共识算法的设计架构中,需要一个精准范围内的交易确认速度。比如Bitcoin上的区块链现在出力能力是平均每秒4笔交易左右,而Ethereum也是15笔每秒,这与实际应用场景需求差距颇大。
5.强大的安全机制和容错能力
安全机制首要防止可能的攻击、攻击使用的成本多大、攻击的范围和目标的损害程度、攻击的持续性和网络修复反应的速度,最后一点就是算法机制的总体攻击的可能性。
对于区块链共识方案的研究,为分布式系统中的一致性问题提供了较好的解决方案,目前的一些共识算法能较好地解决分布式系统中的共识等问题,但仍然由许多问题有待解决,仍有很大的研究价值和发展空间。