区块链入门 | 如何用共识算法构建区块链共识网络?
作者:赵超越
Hi,相信关注区块链的你,一定对经常听到的“共识”一词充满了好奇,那作为区块链灵魂的共识算法到底是什么呢?
今日在线解决三大疑问:共识算法到底是什么?有哪些?未来发展如何?
共识算法到底是什么?
在了解这个概念之前,或许我们得先回顾一下,什么是区块链?我们上期给出的一句话总结是:“区块链是由分布式数据存储、点对点传输、共识机制、加密算法等技术构成的分布式数据库技术,可为存证溯源、业务协作、数字资产、数据交换等高价值场景提供多方互信的解决方案。”
其中,共识机制就是我们今天要聊到的——共识算法。
共识算法是用于保证分布式系统一致性的机制。这里的一致性可以是交易顺序的一致性、账本一致性、节点状态的一致性等。
在上期家庭财政举的例子中,夫妻各自管理自己的账本时,新增的每一笔收入都需要经过两人的共同查验,确认无误后才会被分别记入二人的账本中,并确认双方账本是否一致。其中“共同查验”、“确认双方账本一致”的过程就是共识。
共识算法有哪些?
想要达成共识,我们就必须得解决一个问题:听谁的?
比比谁更强,谁更快:POW工作量证明、Raft算法。
以「王者荣耀」为例,五个路人刚组好战队,需要选出一名指挥官,决定如何在比赛时交流信息,保证行动的一致性,从而一起夺得战队赛的好名次。
有人提出在王者快跑一决高下,这个趣味赛要求玩家随机选择英雄,利用英雄技能,谁先抵达终点谁就胜出,担任指挥官。这意味着使用同样的英雄,谁的技能操作更熟练,位移更准确且迅速,谁的能力更强,经验更足,也自然更能胜任指挥官。
这种方法的原理就是比特币使用的工作量证明机制(POW),区块链中哪个节点的算力更强,就更有可能发现下一个区块的有效值。然而正如这个例子中,玩家需要在常规比赛之外再另比一场王者快跑的比赛,而且对于不擅长玩位移英雄的玩家来说不公平。对应到区块链中,节点在处理链上信息的同时,还要时时与其他节点比赛算力,POW算法最终变成算力的角逐,浪费大量算力,也使得POW失去了公平的初衷。
为了节省算力消耗,也有人说不如去五军对决,每人占据一个buff点,等待随机刷新的重生之石。谁先等到刷新的重生之石,谁就成为候选人,如果同时等到,则同时当选候选人,就不用增加过多的比赛。候选人具备竞选指挥官的资格,指挥官由大家投票选出,每人手中仅有宝贵的一票,而第一个收到一半以上票数的候选人即可当选指挥官。这种方法的原理就是Raft算法,像所有人都需等待重生之石随机刷新那样,Raft算法中的普通节点(玩家)需要等待随机的时间变成候选节点(候选人),没投过票的普通节点可以把票投给候选节点,收到一半以上票数的候选节点即可成为领导节点(指挥官)。
拒绝作恶:RBFT算法、BFT类拜占庭容错算法
但即使通过上面两种方法选出了指挥官,也并不意味着战队就能统一行动,夺得最终的胜利。可能有队员其实是个“演员”,实际上却并不听从指挥,反而假传指挥官命令给其他队友,带着他们单独行动。这种情况下,保证战队比赛时能够交流真实的有效信息,就尤为重要。在区块链中,这被称作存在作恶节点(拜占庭节点)的情况,此时系统应该如何达成共识呢?
既然如此,干脆取消竞选指挥官的环节,每个人都有担任指挥官的机会,在实战中检验大家的指挥能力。在每局比赛中,系统会不断发出提示,比如“摧毁敌方防御塔”。指挥官筛选出这些消息中的有用消息,再向其他队友转达进攻指令。队友们在收到消息后自行判断这个命令是否合理,如果觉得合理,就回复“收到”,一旦收到超过2/3的其他队友回复的“收到”,就明白大多数队友都会配合,便放心发起进攻。在一局比赛结束后,如果超过2/3的队友认为这局的指挥官不行,就更换指挥官的人选。
这便是趣链高鲁棒性拜占庭容错算法(RBFT)的原理,客户端(系统)给主节点(指挥官)发送请求,主节点(指挥官)收到请求后发送消息给所有从节点(队员),从节点给其他所有节点发送消息确认收到,收到超过2/3确认消息的从节点执行命令,并同时通知其他所有节点,最终将执行结果反馈给客户端,如果主节点出现故障则进行视图切换,更换主节点。
除此之外,RBFT算法在基于普通的拜占庭容错算法的基础上做了诸多改进,比如利用Recovery机制提升了系统的可靠性、拓展性,当队员(从节点)因网络卡顿等原因重新游戏链接(从拜占庭状态中恢复)时,队员能够自动回顾重连过程中错过的战局信息与小队指令(区块信息),让队员能够跟上游戏进度。
但又有人提出,当小队的人数(区块链内节点)变多时,BFT类的算法的要求的所有队友互相交流就会有些麻烦,所有人最好仅与指挥官交流。
为了降低交流的成本,且确保指挥官的指令得到了大部分人的认可,每个人都会在回复指挥官的消息中附上自己的头像(可以理解为指纹、签名,其他人不可盗用) ,而指挥官在给所有人发送最终指令时,会附上这些头像的集合,来证明指令经过了大家的认可,否则队员可以无视指令。除此之外,还把更换指挥官的步骤直接挪到比赛中,以免指挥官在比赛中临时断线或者状态不佳总发送错误指令。
这就是HotStuff算法的原理,它将 BFT 的网状通信网络拓扑变成了星形通信网络拓扑,节点(队员)不再通过 p2p 网络将消息广播给其它节点(队员),而是将消息发送给主节点(指挥官),由主节点处理后发送给其它节点。得益于星型通信网络拓扑,系统的通信复杂度得到了大大降低。它通过将视图切换流程(更换指挥官)和正常流程(比赛)进行合并,也降低了视图切换的复杂度。
Basic HotStuff 的流程
在借鉴HotStuff算法的理念后,自研NoxBFT算法,在大规模组网环境下,能够有效降低区块链网络传输的复杂度,提升系统的共识效率与可扩展性。
所以,我们支持哪些共识算法?
我们的共识模块采用可拔插的模块化设计,用户可针对不同的业务场景需求按需选择不同的共识算法。目前支持RBFT、NoxBFT、Raft共识算法,这三类算法分别有其适合的场景。RBFT:具有高性能高鲁棒性,设计了动态数据自动恢复机制与动态共识节点增删机制,大大增强了共识模块的可用性,提升了系统的整体交易吞吐能力和系统稳定性,可达到万级TPS以及毫米级延迟。适用于一般数量级的节点组成的网络环境。
NoxBFT:借鉴Hotstuff算法后自研,通过星型网络拓扑结构将全网网络复杂度由O(n2)降低至O(n),减少了一个量级,并进一步优化算法的活性、可靠性以及数字签名性能,有效解决大规模节点组网场景下共识效率低下、可扩展性不强的问题,现已支持以千为数量级的大规模节点扩展。
Raft:区块链平台支持Raft共识算法保证账本一致性,在联盟各方足够信任的前提下,实现高效共识。该算法仅限于强信任联盟链场景中使用。
共识算法未来发展方向
区块链共识算法从一开始的算力密集型算法POW、POS开始,后来逐渐演变出减少耗能的选举型共识方式BFT等,整体性能上有4-5个数量级的提升。但随着节点数量增多到几百个甚至更大的共识节点规模,需要交换的信息增多,系统负载及网络通信量增大,性能会有所下降,可扩展性也较弱。如何突破共识性能、带宽瓶颈,实现大规模节点高效共识、增强可扩展性是当前共识研究的重要发展方向。
目前,共识算法的研究尝试结合更多的技术进行优化,比如引入VRF(可验证随机函数)保证主节点选取随机性和公平性,应用DAG(有向无环图)数据结构提升系统吞吐量、结合密码学算法优化共识效率等等,整体趋势上是向混合型共识算法演变。
Digital Yuan Gaining Prominence Globally?
China's digital yuan, or e-CNY, is rapidly reshaping global finance in ways that could challenge the...
Ethereum Dominates in Protocol Count as Sui Leads in Monthly Growth
Ethereum leads in DeFi TVL and protocols as Sui posts 40.85% monthly growth; Solana, Bitcoin, and Ba...
Robert Kiyosaki: I Don’t Trust “Fake” Dollars – I Trust Bitcoin!
The post Robert Kiyosaki: I Don’t Trust “Fake” Dollars – I Trust Bitcoin! appeared first on Coinpedi...