第十六讲 || 共识计算与激励机制
在中心化系统中,由于有一个唯一和确定的数据库系统,当对数据库中的任何一个数据项在符合规则的条件下进行修改,即刻就可以获得一个结果,这一结果对所有访问该数据库系统的用户而言都是一致的。因此在中心化系统中,数据的一致性根本就不是问题,我们也从未想过这方面会有什么问题。但在去中心化的P2P对等网络中,我们存在多个甚至成百上千万个节点,这些节点既是平等的,并且均可以自由进出,在这种条件下要保持网络中所有节点的数据库系统具有完全一致性,显然是一个崭新的课题。

区块链最创新的部分也就在此。因为非对称密钥体制、哈希计算,P2P通信,都不是新技术、新创新,但确保分布式节点数据一致性的共识计算与激励机制绝对是区块链的创新,比特币就是因为发明了这一关键的技术与机制,从而奠定了区块链的技术框架。在去中心化的分布式系统中,之所以需要共识机制,主要是要防止两个问题,一个问题叫“双花”,一个问题叫“自私挖矿”。所谓“双花”,就是指用户同一笔款项多处花费,比如我账户余额只有10个比特币,我向张三转了8个比特币,与此同时向李四转9个比特币,显然我没有这么多比特币,但若网络中没有防止“双花”确保数据一致性的机制,那我就可能利用分布节点数据不同步的机制发起“双花”攻击,若这一攻击能够成功,显然区块链网络就没有什么意义了。“自私挖矿”指的是每一个节点都希望能由自已来封装区块,一方面是可以获得区块封装的奖励,另一方若能由单一节点控制区块封装,实际上就具备了主宰区块中交易序列的可能。显然,在区块链P2P分布式网络系统中,各个节点都是平等的,一个节点“自私挖矿”就必然侵害其他用户的权益,为了公平性并避免单一节点作弊,就需要一套公平的机制来选择某一时刻的“矿工”将网络中交易序列封装为区块,并确保所封装区块是合乎网络的规则的。区块链的共识机制就是解决这两个问题的。

那么共识机制究竟是如何解决前述问题的呢?
区块链的解决思路是从创始区块开始,按时间顺序将先后在网络中所产生的交易序列封装为一个个按序号编列和封装的区块,只要确保了这个区块序列是有序的并且是唯一的,就可以确保网络中所有节点在相同区块时刻下网络状态的一致性。


因而共识机制的核心其实就是如何公平、公正、合理地生成区块、确认区块,并纳入网络中统一的区块链序列中。根据区块产生的机制不同,区块链的共识机制包括这几种类型:

第一,工作量证明,或称为POW,它是英文Proof of Work的缩写。POW是目前比特币和以太坊主网络采用的共识机制,由于比特币与以太坊在区块链网络中的巨大影响力,因而POW可以说是最著名的共识机制。POW最显著的特征就是所有区块封装者,即矿工通过投入算力,(算力包括有CPU、GPU或专用算力芯片),在电力能源的支撑下,进行随机数计算竞赛,当矿工找到的随机数与待封装区块组成的数据体的哈希值满足某个条件,如哈希值的十进制数小于某个设个难度系数,则矿工就可以凭借找到的这个随机数进行区块封装,并将封装的区块向网络中的共它节点广播,其它的节点获得该区块后,将按照区块的生成规则对所收到的区块进行合规性验证,当符合规则时,就会将该区块纳入本地区块链中,否则丢弃该区块。这个难度系数决定了网络中大家一块来找随机数所需要花费的大概时间。在网络中总算力相同的情况下,难度系数越大,则需要时间越多;当网络中算力增长后,就必须增大难度系数,才可以确保大致相同的出块时间。比特币维持的出块时间是10分钟出一个块,以太坊是15秒钟出一个块。POW的好处是相对公平性和开放性,只要你愿意投入算力,你就可以通过算力竞争。

但其缺点也是非常明显的,这表现在:

(1)由于必须进行随机数计算,需要花费相应时间,出块时间较长,因此TPS很低,如比特币每秒最多7笔,而以太坊大概在30笔;

(2)能源浪费,为了计算这个随机数,进行算力计算,需要消耗大量电力能源,仅比特币的电力能源消耗就已相当于整个爱尔兰的电力消耗。

第二,权益证明机制或称为PoS,权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以缩短达成共识所需的时间,但本质上仍然需要网络中的节点进行挖矿运算。因此,PoS机制并没有从根本上解决PoW机制难以应用于商业领域的问题。

第三,股份授权证明机制或称为DPoS,股份授权证明机制是一种新的保障网络安全的共识机制。它在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。股份授权证明机制与董事会投票类似,该机制拥有一个内置的实时股权投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。基于DPoS机制建立的区块链的去中心化依赖于一定数量的代表,而非全体用户。在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。股份授权证明机制可以大大缩小参与验证和记账节点的数量,从而达到秒级的共识验证。然而,该共识机制仍然不能完美解决区块链在商业中的应用问题,因为该共识机制无法摆脱对于代币的依赖,而在很多商业应用中并不需要代币的存在。

第四,验证池或POA机制,验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等。 

实用拜占庭 或简称为PBFT机制,PBFT包括三个阶段:
准备阶段(Prepare):每个节点接收到交易列表后,根据排序模拟执行这些交易。所有交易执行完后,基于交易结果计算新区块的哈希摘要,并向全网广播,如1->023,2->013,3因为宕机无法广播
执行阶段(Commit):如果一个节点收到的2f个其它节点发来的摘要都和自己相等,就向全网广播一条执行消息(f为可容忍的拜占庭节点数)
回应阶段(Reply):如果一个节点收到2f+1条commit消息,即可提交新区块及其交易到本地的区块链和状态数据库。

在前述区块链共识机制中,我们一般从如下角度来评判该机制:
1)安全性。
即是否可以防止二次支付、自私挖矿等攻击,是否有良好的容错能力。以金融交易为驱动的区块链系统在实现一致性的过程中,最主要的安全问题就是如何防止和检测二次支付行为。自私挖矿通过采用适当的策略发布自己产生的区块,获得更高的相对收益,是一种威胁比特币系统安全性和公平性的理论攻击方法。此外,日食Eclipse攻击控制目标对象的网络通信,形成网络分区,阻隔交易传播。Sybil攻击通过生产大量无意义的节点影响系统安全性。
2)扩展性。即是否支持网络节点扩展。扩展性是区块链设计要考虑的关键因素之一。
3)性能效率。即从交易达成共识被记录在区块链中,至被最终确认的时间延迟,也可以理解为系统每秒可处理确认的交易数量。与传统第三方支持的交易平台不同,区块链技术通过共识机制达成一致,因此其性能效率问题一直是研究的关注点。比特币系统每秒最多处理7笔交易,远远无法支持现有的业务量。
4)资源消耗。即在达成共识的过程中,系统所要耗费的计算资源大小,包括CPU、内存等。


区块链上的共识机制借助计算资源或者网络通信资源达成共识。以比特币系统为例,基于工作量证明机制的共识需要消耗大量计算资源进行挖矶提供信任证明完成共识。前面讲了共识机制,主要解决区块链中如何生成一致性的区块的问题。对于公链系统,由于要保证网络的开放性,因此矿工的参与是完全自由的,对这些自由进出的节点,如何确保网络能够有稳定甚至不断扩大的算力,这就需要对公链系统设计一个特别的激励机制,以鼓励矿工为网络提供持续的算力支持。那么,这个机制现在普遍采用的办法,就是对完成区块封装的矿工进行区块链原生代币增发奖励,以及获得所封装区块中用户所支付的交易费。


在区块链中置入代币,并通过让代币具有交易价值,使矿工对区块封装获得代币奖励具有热情,是区块链激励机制设计的基本原理。如比特币设计了总共增发2100万比特币的机制,以太坊设计了每年增发初始发行量25%的增发机制。在区块链公链系统中,每发送一次交易,均需要支付相应的交易费,这个机制既是一种激励机制,同时也是一种安全保护机制。通过这个机制,可以避免用户发送大量垃圾交易从而造成网络交易拥塞。