共识机制
共识算法是保证区块链平台各节点账本数据一致的关键,目前常见的分布式系统一致性算法包括PoW、PoS、Paxos、Raft、PBFT等。
其中PBFT算法是一种许可投票、少数服从多数的共识机制。该算法具备容忍拜占庭错误的能力,且能够允许强监管节点的参与,算法性能较高,适合企业级平台的开发。
目前主流的企业级区块链解决方案HyperLedger Fabric和Hyperchain都提供了PBFT的实现方案。然而原生PBFT算法在可靠性与灵活性方面不够完善,Hyperchain平台对可靠性与灵活性进行了增强,设计实现了PBFT的改进算法,即RBFT(Robust Byzantine Fault Tolerant)。
RBFT概述
Hyperchain的共识模块采用可拔插的模块化设计,能够针对不同的业务场景需求选择配置不同的共识算法,目前支持PBFT的改进算法RBFT。
Hyperchain通过优化PBFT的执行过程,增加主动恢复与动态节点增删等机制,极大地提高了传统PBFT的可靠性与性能。RBFT能够将交易的延时控制在300 ms,最高可以支持每秒上万笔的交易量,为区块链的商业应用提供了稳定高性能的算法保障。
RBFT的常规流程保证了区块链各节点以相同的顺序处理来自客户端的交易。RBFT同PBFT的容错能力相同,需要至少3f+1个节点才能容忍f个拜占庭错误。
图中的示例为最少集群节点数,其f的值为1。图中的Primary为区块链节点中动态选举出来的主节点,负责对客户端消息的排序打包,Replica节点为备份节点,所有Replica节点与Primary节点执行交易的逻辑相同,Replica节点能够在Primary节点失效时参与新Primary节点的选举。
RBFT算法的常规共识流程如下所示。
(1) Client将交易发送到区块链中的任意节点。
(2) Replica节点接收到交易之后转发给Primary节点,Primary自身也能直接接收交易消息。
(3) Primary会将收到的交易进行打包,生成batch进行验证,剔除其中的非法交易。
(4) Primary将验证通过的batch构造PrePrepare消息广播给其他节点。
(5) Replica接收来自Primary的PrePrepare消息之后构造Prepare消息发送给其他Replica节点,表明该节点接收到来自主节点的PrePrepare消息并认可主节点的batch排序。
(6) Replica接收到2f个节点的Prepare消息之后对batch的消息进行合法性验证,验证通过之后向其他节点广播Commit消息,表示自己同意了Primary节点的验证结果。
(7) Replica节点接收到2f+1个Commit之后执行batch中的交易并同主节点的执行结果进行验证,验证通过将会写入本地账本。
由以上的RBFT常规流程可以看出,RBFT将交易的验证流程穿插于共识算法的整个流程中,做到了对写入区块结果的共识。
首先,Primary节点接收到交易之后首先进行验证,这保证了平台的算力不会被非法交易所消耗,使Replica节点能够高效地处理Primary节点的拜占庭失效。
其次,Replica节点在接收到2f个Prepare消息之后对Primary节点的验证结果进行验证,如果结果验证不通过则会触发ViewChange消息,这再一次保证了系统的安全性。
更多
此外,在PBFT以及RBFT中都引入了View(视图)的概念,每次更换一个Primary节点同时切换视图,ViewChange(视图更换)机制是保证整个共识算法健壮性的关键;
为了解决数据恢复工作,RBFT算法提供了一种动态数据自动恢复机制。大大增强了整个区块链系统的可用性;
RBFT为了能够更加方便地控制联盟成员的准入和准出,为PBFT添加了保持集群非停机的情况下动态增删节点的功能。