查看原文
其他

区块链之魂:共识机制

超图集团 2022-07-17



编者按:随着新一代科技革命浪潮的到来,区块链(Blockchain)作为一项关键技术,在全球互联网领域内快速升温。在中国,区块链也被看作核心技术自主创新的重要突破口,各行业相继开始寻找区块链赋能本领域的方法,以求助力解决发展痛点和难点。区块链到底是什么?如何运作?它的价值又如何体现?我们将以GISer的视角,陆续推出「区块链」科普系列文章,为大家普及相关知识,分享区块链和IPFS的相关应用,后续更新敬请关注!



区块链采用去中心化设计,节点是各处分散且平行对等的,所以必须设计一套制度,来维护系统的运作顺序与公平性,这个制度就是共识机制。一般区块链系统都会选取记账最快、最好的那个节点,以这个节点的账目为准,并发送备份其他所有节点。


在这个达成共识的过程中,会有很多问题,比如:系统是以什么标准来判断最快、最好的节点的?其他节点为什么会同意某个节点的记账?人人都参与记账,那么各个节点靠什么达成共识,保证节点数据的一致性和正确性?会不会有些节点出于私利伪造或者篡改信息?在区块链网络中,这些问题都由“共识机制”来解决。


本次我们将根据这些问题,介绍区块链发展中几项主要的共识算法,分析其主要特性,并介绍SuperMap在共识机制上的选择。


比特币的共识机制:工作量证明


区块链的共识机制,最为知名的就是比特币系统中运用的PoW,即工作量证明。


什么是工作量证明? 


工作量证明(proof of work,PoW),简单理解就是一份证明,用来确认你做过一定量的工作。众所周知,监测工作的整个过程通常极为低效,而监测结果则高效得多。例如,要想知道一个学生是否每分每秒都在认真学习很难,但可以用毕业证来验证他的努力程度。现实生活中的各类证件,都是通过检验结果的方式(各类考试)来取得的证明。工作量证明的原理,跟这个有点相似,它要求发起者需要做一定难度的工作,也就是需要进行一定量的运算,消耗计算机一定量的时间才能得出一个结果,验证方通过这个结果很容易验证发起者是否做了相应的工作,以及结果的正确性。


比特币系统通过每个节点的计算能力来竞争记账,也就是通过算力竞争来达成共识,系统大约每10分钟进行一轮算力竞争,通过工作量证明判断竞争中的获胜节点,胜利者将获得一次记账的权利,即在区块链这个总帐本中加入一个新区块的权利,并向其它节点同步更新新的账目信息,如此周而复始,不断增加新的区块上链。


由于区块链是一个去中心化的自治系统,没有第三方监督,在这种情况下,每个节点都会存在潜在的道德问题,变成恶节点,这样达成共识就会变得很困难,要如何解决这些问题?


在中本聪的设计里,每轮竞争胜出并完成记账的节点将获得系统给予的一定数量的比特币奖励,这个奖励的过程也是比特币的发行过程。这和生物学中的“不利原理”有点类似,可以理解为:在这个系统中,如果你认真工作,你的账本被系统认可和接受,系统会对你的贡献给予一定的奖励;而如果你的记账被系统认为是不合格的,将会失去奖励。


准确来讲,系统发放的奖励包含两部分:一部分是区块所包含交易的手续费,这部分不属于比特币的发行过程;另一部分是新币奖励,每四年减半,这是比特币的发行过程。目前所获得的奖励以新币奖励为主。在这个系统下,为了获得系统发放的比特币,节点不停地进行计算和竞争,同时不断地有新区块产生。这个过程很像现实生活中挖矿的过程,因此获得比特币的过程被人们形象地称为“挖矿”。我们可以看出:在这个系统中,每个节点只需要根据自身利益行事,出于“私利”的目的进行竞争,为了在“工作量证明”中获胜以得到比特币,不得不保持诚实。


这就是比特币的共识机制,比特币借助区块链打造了一个正向的循环系统。工作量证明共识机制,架构清晰,有效可靠。但工作量证明突出的问题就是“浪费资源”,因为节点计算需要耗费大量的电。另外,在效率方面,此共识机制的效率也非常低,因此出于对能源和效率的考虑,科学家们提出了新的共识机制。


PoS(proof of stake):权益证明机制


另一个典型的共识机制就是以太坊的PoS,权益证明机制。PoS的原理类似于现实世界中的股份制,拥有股份越多,话语权就越强,获得记账机会的概率就越大。如果把PoW理解为“干得越多,收获越多”,那么PoS就是“持有越多,获得越多”。


PoS 共识机制的核心是网络中的币,通过节点持有币的数量和时间来选择记账权,这些币可以在交易所甚至 OTC 市场大量购买,不需要通过挖矿获取,所以相对于PoW,PoS一定程度上减少了数学运算带来的资源消耗,同时,矿工不需要去拼算力,而且也不会浪费太多的计算时间,在一定程度上提高了共识效率。


其安全性来自于抵押经济的价值,即权益质押得越高收益越高。PoS协议内部也设计了一些激励机制来优化一致性决定,在基于权益的共识中,通过“押金”来提高安全性,因为押金、抵押物的存在,节点可以通过运行和维护网络获得奖励,但如果一个节点作恶,它的抵押物将按照协议内容被处罚或销毁,协议里面也会制定一些严厉的惩罚措施,例如对于作恶的处罚将远远超过诚实节点收到的交易费用或是挖矿奖励。


PoS的共识中仍需要挖矿,但所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上更容易存在其他攻击的影响。例如,以太坊的DAO攻击事件造成以太坊硬分叉。同时,拥有代币的节点可以坐享其成,所有参与者都可以持币拿利息,不利于货币的流动,此外,节点挖矿需要一直打开钱包,很容易吸引黑客的攻击。


DPoS:股份授权证明机制


DPoS类似于董事会投票,持币者投出一定数量的节点,代理其进行验证和记账。它与PoS原理相同,只是选了一些“代表”进行区块链网络维护,即节点选举若干代理人,由代理人进行验证和记账。该模式下可以每30秒产生一个新区块,并且在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决,因此DPoS继承了PoS的优势,且比PoS拥有更快的效率和更高的性能。


但也因为性能,DPoS对去中心化作了妥协,仅代理节点具有验证和记账的权利,所以此时的区块链网络已经不是真正意义上的“去中心化”,而变成了“弱中心”或者说“部分去中心化”。同时由于在该区块链系统下只有有一定影响力的人才有资格获得记账的权利,导致攻击者的目标更加明确,更易遭到恶意者攻击。

以上为公有链中几种典型的共识机制。对于联盟链,与公有链最大区别在于联盟链采用比较强的身份管理机制,在明确的成员准入前提下,共识算法可以有更高的优化,比特币的共识本质上是基于概率的算法理论,联盟链的共识用Raft、PBFT等基于确定性的算法理论。
联盟链通过身份管理和共识算法结合,来保证整个系统的安全,同时带来性能的大幅提升。下面将以Fabric为例,介绍三种联盟链的共识算法。


Kafka 共识模式


Fabric的核心共识算法通过Kafka集群实现,简单来说,就是通过Kafka算法对所有的交易记录进行排序,当交易达到最大数量或超时后进行批次切分,生成新的区块。每个排序节点为每条链维护一个本地日志,生成的区块也保存在本地账本中,当发生崩溃时,由于所有的排序节点都维护有本地日志,因此可以利用不同的排序节点分发区块,恢复账本。


分区、有序、容错是kafka的三个特性,具有这种特性的共识算法,效率较高,缺点是安全度比较低,因为kafka服务是分布式集群,还不是去中心系统,存在一定风险。


PBFT共识模式


Fabric早期版本支持PBFT算法,PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法。在R>=3f+1的前提下,系统能保持安全性和活性。R为总节点数,f为错误节点数。PBFT算法通过三阶段广播协议来使所有正常节点按相同的顺序执行请求,三阶段分别为pre-prepare、prepare和commit。三个阶段结束结束后,客户端等待f+1个相同的副本结果作为最后结果。


该算法解决了原始拜占庭容错(BFT)算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得该算法在实际系统中可以适用。PBFT算法允许不超过1/3个作恶节点;但通信复杂度O(n^2),通信复杂度过高,可拓展性比较低,一般的系统在达到100左右的节点个数时,性能下降非常快,尤其是在网络不稳定的情况下延迟很高。


Raft 共识模式


Raft算法由斯坦福大学的Diego Ongaro和John Ousterhout提出,是简化版拜占庭将军问题的解决方案,解决多个决策达成一致的问题,本质是一种基于消息传递的一致性算法,它遵循“领导者和追随者”模型,每个系统节点有三种状态:Leader(领导者)、Candidate(候选领导者)和Follower(跟随者),实现中的主要步骤为选主和复制日志,一个Raft集群包含2f+1个服务器,允许系统出现f个故障服务器。


Raft共识模式是能够实现分布式强一致性的算法,相较于Kafka算法,Raft算法更加安全。由于Raft算法不允许有作恶节点,相比较PBFT共识更高效;为了防范作恶节点,可以结合联盟链的用户准入机制,来保证整个系统的安全。SuperMap的“空间区块链”中部署的Fabric区块链网络环境,采用的就是Raft共识模式。


文/大数据与AI研发中心 李文龙


【相关阅读】

  什么区?什么块?什么链?

  比特币是什么?

 为什么密码学是区块链的核心?

 人人都说的比特币挖矿,到底是在挖什么?

 智能合约初探:概念与演变

 区块链科普之“联盟链和Fabric”

区块链真正价值是什么?有哪些应用场景?


欢迎转载~

三连一下,天天好心情!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存