声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
边肖:记得要集中注意力。
作者:赵超越
大家好,相信关注区块链的你们一定对经常听到的“共识”这个词充满了好奇。作为区块链灵魂的共识算法是什么?
共识算法到底是什么?
在理解这个概念之前,或许我们要先回顾一下。什么是区块链?上一期我们给出的那句话的总结是:“区块链是由分布式数据存储、点对点传输、共识机制、加密算法等技术组成的分布式数据库技术。它可以为存款和证书追溯、业务协作、数字资产、数据交换等高价值场景提供互信的解决方案。”
其中,共识机制就是我们今天要讲的——共识算法。
一致性算法是一种用于确保分布式系统一致性的机制。这里的一致性可以是交易顺序、账簿、节点状态等的一致性。
上一期家庭财务的例子,夫妻各自管理账本的时候,每笔新增收入都需要双方核对,确认后会分别记入各自账本,并确认双方账本是否一致。其中“一起核对”和“确认双方账本一致”的过程就是共识。
共识算法有哪些?
要想达成共识,就得解决一个问题:听谁的?
谁更强谁更快:POW工作负载和Raft算法的证明。
以《王者荣耀》为例。五个路人刚刚组队,需要选出一个指挥官来决定比赛过程中如何交换信息,保证动作的一致性,共同赢得团体赛的好名次。
建议国王快跑去比赛。这个趣味比赛要求玩家随机选择英雄,使用英雄技能。谁先到达终点,谁就获胜,并担任指挥官。这就意味着用同一个英雄,他的技能更熟练,他的位移更准确迅速,他的能力更强,他的经验更充足,他自然更能胜任指挥官的工作。
这种方法的原理是比特币使用的工作量证明机制(POW)。区块链中哪个节点的计算能力更强,就更有可能找到下一个块的有效值。但是像这个例子中,玩家除了常规种族外还需要比王者更快的种族,对于不擅长玩位移英雄的玩家来说是不公平的。与区块链相对应的是,节点在处理链中的信息时,也要时不时地与其他节点争夺计算能力。POW算法最终变成了计算能力的竞争,浪费了大量的计算能力,让POW失去了公平的初衷。
为了节省计算能力消耗,有人说不如去五军对决,每人占一个buff点,等待随机刷新的重生石。谁先等待新的重生之石,谁就成为候选人。如果他同时等待,就同时当选为候选人,所以不需要增加太多的竞争。候选人有资格竞选指挥官,指挥官由大家选举产生。每个人只有一张宝贵的选票,第一个获得半数以上选票的候选人可以当选指挥官。该方法的原理是Raft算法。就像每个人都需要等待重生石随机刷新一样,Raft算法中的普通节点(玩家)需要等待一个随机的时间才能成为候选节点(候选者)。没有投票的普通节点可以投票给候选节点,获得半数以上选票的候选节点可以成为领袖节点(指挥官)。
拒绝作恶:RBFT算法,BFT拜占庭容错算法
但即使通过以上两种方式选出指挥官,也不代表团队可以步调一致,取得最后的胜利。可能有些队员其实是“演员”,实际上是不服从指挥。而是把指挥官的命令虚假的发给其他队友,带他们单独行动。在这种情况下,保证参赛队伍在比赛过程中能够交流真实有效的信息就显得尤为重要。在区块链,这被称为邪恶节点(拜占庭节点)的存在。这个时候系统应该如何达成共识?
这种情况下,干脆取消指挥官竞选,大家都有机会担任指挥官,在实战中考验大家的指挥能力。在每一个游戏中,系统都会不断的给出提示,比如“摧毁敌方防御塔”。指挥官从这些信息中筛选出有用的信息,然后将进攻指令传达给其他队友。队友收到消息后,可以判断这个命令是否合理。如果他们认为合理,就会回复“收到”。一旦收到其他队友三分之二以上的“收到”回复,就知道大部分队友都会配合,就可以放心进攻了。在一场比赛结束时,如果超过2/3的队友认为这场比赛的指挥官不称职,就会更换指挥官人选。
这就是基金链高鲁棒性的拜占庭容错算法(RBFT)的原理。客户端(系统)向主节点(指挥者)发送请求,主节点(指挥者)收到请求后向所有从节点(团队成员)发送消息。从节点向所有其他节点发送消息来确认接收。收到2/3以上确认消息的从节点执行命令,同时通知其他所有节点,最后将执行结果反馈给客户端。如果主节点出现,
此外,RBFT算法在常见的拜占庭容错算法的基础上做了很多改进,比如使用恢复机制来提高系统的可靠性和可扩展性。当玩家(从节点)由于网络停滞等原因重新连接游戏(从拜占庭状态恢复)时,玩家可以在重新连接的过程中自动回顾错过的战斗信息和小队指令(方块信息),让玩家可以及时跟上游戏进度。
RBFT算法示意图-王者荣耀版
转移共识比较优化的RBFT算法图:NoxBFT算法,HotStuff算法
但有人提出,当队伍(区块链中的节点)数量变大时,BFT算法的所有队友之间的沟通会很麻烦,大家最好只和指挥官沟通。
为了降低沟通成本,保证指挥官的指令被大多数人认可,每个人都会在给指挥官的回复中附上自己的头像(可以理解为指纹和签名,其他人不能挪用)。指挥官在给每个人发送最终指令时,会附上这些头像的集合,以证明指令已经得到了所有人的认可,否则团队成员可以无视指令。另外,更换指挥员这一步直接搬到了比赛中,防止指挥员在比赛过程中临时断线或状态不好时发出错误指令。
这就是HotStuff算法的原理,将BFT的网状通信网络拓扑结构变为星型通信网络拓扑结构。节点(团队成员)不是通过p2p网络向其他节点(团队成员)广播消息,而是向主节点(指挥官)发送消息,由主节点处理后再发送给其他节点。由于采用了星型通信网络拓扑,系统的通信复杂度大大降低。它还通过将视图切换(改变指挥官)的过程与正常过程(比赛)相结合,降低了视图切换的复杂性。
基本热Stuff流
借鉴HotStuff算法的思想,自主开发的NoxBFT算法可以有效降低区块链网络传输的复杂度,提高系统在大规模组网环境下的共识效率和可扩展性。
所以,我们支持哪些共识算法?
我们的共识模块采用可插拔的模块化设计,用户可以根据不同的业务场景选择不同的共识算法。目前支持RBFT、NoxBFT和Raft共识算法,这三种算法都有各自适用的场景。
RBFT:它具有高性能和鲁棒性。设计了动态数据自动恢复机制和动态共识节点添加删除机制,大大增强了共识模块的可用性,提高了系统的整体事务吞吐量和系统稳定性,可以达到数万TPS和毫米级延迟。适用于一般数量级节点组成的网络环境。
NoxBFT:借鉴Hotstuff算法后自研,通过星型网络拓扑将整个网络的网络复杂度从O(n2)降低到O(n),降低了一个数量级。算法的活性、可靠性和数字签名性能得到进一步优化,有效解决了大规模节点组网场景下共识效率低、扩展性弱的问题。现在,它已经支持数千量级的大规模节点扩展。
Raft:区块链平台支持Raft共识算法,保证账本一致,在联盟各方充分信任的前提下,实现高效共识。该算法仅用于强信任联盟链的场景。
共识算法未来发展方向
区块链共识算法从最初的计算密集型算法POW和POS开始,后来逐渐演变为投票共识模式BFT等。从而降低了能耗,其整体性能提高了4-5个数量级。但是,随着节点数量增加到数百甚至更大的共识节点,需要交换的信息增加,系统负载和网络流量增加,性能会下降,可扩展性弱。如何突破共识性能和带宽的瓶颈,实现大规模节点的高效共识,增强可扩展性,是共识研究的重要发展方向。
目前一致性算法的研究尝试结合更多的技术对其进行优化,如引入VRF(可验证随机函数)保证主节点选择的随机性和公平性,应用DAG(有向无环图)数据结构提高系统吞吐量,结合密码学算法优化一致性效率等。总体趋势是向混合一致性算法发展。