区块链共识机制的演进
区块链共识机制的演进
分布式系统的基本概念
FLP不可能原理和CAP原理
FLP 不可能原理(FLP impossibility):在⽹络可靠,存在节点失效(即便只有⼀个)的最⼩化异步模型系统中,不存在⼀个可以解决⼀致性问题的确定性算法。1985年 FLP 原理实际上说明对于允许节点失效情况下,纯粹异步系统⽆法确保⼀致性在有限时间内完成。科学告诉你什么是不可能的;⼯程则告诉你,付出⼀些代价,我可以把它变成可能。
CAP 原理最早由 Eric Brewer 在 2000 年,ACM 组织的⼀个研讨会上提出猜想,后来 Lynch 等⼈进⾏了证明。
分布式计算系统不可能同时确保⼀致性(Consistency)、可⽤性(Availability)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。
⼀致性(Consistency):任何操作应该都是原⼦的,发⽣在后⾯的事件能看到前⾯事件发⽣导致的结果,注意这⾥指的是强⼀致性;
可⽤性(Availability):在有限时间内,任何⾮失败节点都能应答请求;
分区容忍性(Partition):⽹络可能发⽣分区,即节点之间的通信不可保障。
弱化⼀致性
对结果⼀致性不敏感的应⽤,可以允许在新版本上线后过⼀段时间才更新成功,期间不保证⼀致性。
例如⽹站静态页⾯内容、实时性较弱的查询类数据库等,CouchDB、Cassandra 等为此设计。
弱化可⽤性
对结果⼀致性很敏感的应⽤,例如银⾏取款机,当系统故障时候会拒绝服务。MongoDB、Redis 等为此设计。
Paxos、Raft 等算法,主要处理这种情况。
弱化分区容忍性
现实中,⽹络分区出现概率减⼩,但较难避免。某些关系型数据库、ZooKeeper 即为此设计。
实践中,⽹络通过双通道等机制增强可靠性,达到⾼稳定的⽹络通信。
什么是共识Consensus?
当多个主机通过异步通讯⽅式组成⽹络集时,这种异步⽹络默认是不可靠的,那么在这些不可靠主机之间复制状态需要采取⼀种机制,以保证每个主机的状态最终达成相同⼀致性状态,取得共识。
为什么认为异步⽹络默认是不可靠的?这是根据FLP原理。Impossibility of Distributed Consensus with One Faulty Process⼀⽂提出:在⼀个异步系统中我们不可能确切知道任何⼀台主机是否死机了,因为我们⽆法分清楚主机或⽹络的性能减慢与主机死机的区别,也就是说我们⽆法可靠地侦测到失败错误。但是,我们还必须确保安全可靠。
达成共识越分散的过程,其效率就越低,但满意度越⾼,因此也越稳定;相反,达成共识越集中的过程,效率越⾼,也越容易出现独裁和腐败现象。
达成共识常⽤的⼀种⽅法就是通过物质上的激励以对某个事件达成共识;但是这种共识存在的问题就是容易被外界其它更⼤的物质激励所破坏。
还有⼀种就是体中的个体按照符合⾃⾝利益或整个体利益的⽅向来对某个事件⾃发地达成共识;当然形成这种⾃发式的以维护体利益为核⼼的共识过程还是需要时间和环境因素的,但是⼀旦达成这样的共识趋势,其共识结果也越稳定,越不容易被破坏。
CFT & BFT
Paxos & Raft
Paxos 问题是指分布式的系统中存在故障,但不存在恶意节点场景(即可能消息丢失或重复,但⽆错误消息)下的共识达成问题。因为最早是1990年 Leslie Lamport ⽤ Paxon 岛的故事模型来进⾏描述⽽命名。
Paxos过于晦涩难懂,和难以实现,之后有出现了各种改进算法:Egalitarian Paxos、Hydra、Fast Paxos、Ios、VRR(Viewstamped Replication Revisited)、 Multi-Paxos、Raft等
Raft 算法是Paxos 算法的⼀种简化实现,2013年才问世。
Paxos是⼀种⽆领导⼈Leaderless算法,⽽Raft算法是⼀种强领导⼒Leadership的算法。
拜占庭将军问题&两军问题
拜占庭将军问题是⼀个共识问题: ⾸先由Leslie Lamport与另外两⼈在1982年提出,被称为The Byzantine Generals Problem或者Byzantine Failure。核⼼描述是军中可能有叛徒,却要保证进攻⼀致,由此引申到计算领域,发展成了⼀种容错理论。
Lamport的论⽂中讲了这样⼀个故事:
拜占庭帝国想要进攻⼀个强⼤的敌⼈,为此派出了10⽀军队去包围这个敌⼈。这个敌⼈虽不⽐拜占庭帝国,但也⾜以抵御5⽀常规拜占庭军队的同时袭击。基于⼀些原因,这10⽀军队不能集合在⼀起单点突破,必须在分开的包围状态下同时攻击。他们任⼀⽀军队单独进攻都毫⽆胜算,除⾮有⾄少6⽀军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅⾃变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否到⼀种分布式的协议来让他们能够远程协商,从⽽赢取战⽃?这就是著名的拜占庭将军问题。
⽽容易与拜占庭将军问题混为⼀谈的是两军问题。两军问题描述了这样⼀个故事:
⽩军驻扎在沟渠⾥,蓝军则分散在沟渠两边。⽩军⽐任何⼀⽀蓝军都更为强⼤,但是蓝军若能同时合⼒进攻则能够打败⽩军。他们不能够远程的沟通,只能派遣通信兵穿过沟渠去通知对⽅蓝军协商进攻时间。是否存在⼀个能使蓝军必胜的通信协议,这就是两军问题。
看到这⾥您可能发现两军问题和拜占庭将军问题有⼀定的相似性,但我们必须注意的是,通信兵得经过敌⼈的沟渠,在这过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。由此可见,⼤量混淆了拜占庭将军问题和两军问题的⽂章并没有充分理解两者。
针对拜占庭将军问题,⽬前业界⽐较常⽤的是PBFT算法。
PBFT是Practical Byzantine Fault Tolerance的缩写,意为实⽤拜占庭容错算法。该算法是Miguel Castro (卡斯特罗)和Barbara Liskov(利斯科夫)在1999年提出来的,解决了原始拜占庭容错算法效率不⾼的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应⽤中变得可⾏。
这个算法在保证活性和安全性的前提下提供了(n-1)/3的容错性,也就是节点数需要达到3f+1个节点才能容错f个节点。
以4个节点组成的分布式⽹络为例,PBFT算法的节点间⽹络通信如图所⽰:
从上图我们可以看出,PBFT算法下,⽹络通信的复杂度达到了O(n²),这也就意味着,PBFT⽹络节点不能太多,如果节点太多将会造成⽹络风暴,使得整个⽹络堵塞。
我们平时说的CFT就是Crash Fault Tolerant的简写,是⽆恶意节点的情况下的容错,常⽤的共识算法有: Paxos、Raft
⽽BFT就是Byzantine Fault Tolerant的简写,是有恶意节点的情况下的容错,常⽤的共识算法有:PBFT、POW
POW⼯作证明
Proof of Work,⼯作证明相关理念最早于1993年被Cynthia Dwork和Moni Naor提出,之后的⼏年,该概念在是否能有效对抗拒绝服务攻击的争论中不断被⼈们所知。PoW机制的核⼼在于强迫攻击者作出⼀定量的⼯作才能进⾏接下来的交互操作,这样⽆形中就给攻击者提⾼了攻击的成本。⾃然⽽然的,攻击者需要完成的⼯作可以按消耗的计算机资源种类分为以下三⼤类:
消耗CPU资源。例如,反垃圾邮件的Hashcash⽅案以及受此启发⽽诞⽣的⽐特币;
消耗内存资源。例如,为了防⽌与⽐特币采⽤相同的共识机制所可能导致的51%攻击,以太坊⽬前就使⽤了⼀种需要占⽤⼤量内存资源的PoW算法;
消耗⽹络资源。攻击者在进⾏拒绝服务攻击之前,必须要获取多个远程服务器发送的命令。
POW作为的共识机制于 1998 年在 B-money 设计中提出。2008年中本聪发表⽐特币⽩⽪书,⽐特币采⽤POW共识,通过计算来猜测⼀个数值(nonce),得以解决规定的 Hash 问题(两次SHA256)。保证在⼀段时间内,系统中只能出现少数合法提案。同时,这些少量的合法提案会在⽹络中进⾏⼴播,收到的⽤户进⾏验证后会基于它认为的最长链上继续难题的计算。因此,系统中可能出现链的分叉(Fork),但最终会有⼀条链成为最长的链。
Hash 问题具有不可逆的特点,因此,⽬前除了暴⼒计算外,还没有有效的算法进⾏解决。反之,如果
获得符合要求的 nonce,则说明在概率上是付出了对应的算⼒。谁的算⼒多,谁最先解决问题的概率就越⼤。当掌握超过全⽹⼀半算⼒时,从概率上就能控制⽹络中链的⾛向。这也是所谓 51% 攻击的由来。
⽐特币POW算法的ASIC化问题
由于⽐特币采⽤的是⽐较简单的SHA256哈希算法作为POW共识算法,这个算法只消耗CPU资源,对内存要求不⾼,所以可以很容易被制造出ASIC芯⽚。这是⽐特币挖矿芯⽚的更新换代图:
⽽现在,⽐特币的挖矿都变成了这样⼦:⼤量ASIC矿机组成的矿场。
这样算⼒就越来越集中到了⼤矿主⼿⾥,普通⽤户使⽤电脑根本不可能挖到矿,这与中本聪当年设想的⼈⼈都能公平记账的愿景相违背。为此,⼈们设计了各种反ASIC化的⽅案。主要思想就是将POW算法改的很复杂,需要⼤量的内存,这样ASIC芯⽚是不可能集成⼤量内存进去的,从⽽⽆法制造出专门的挖矿芯⽚。⽐较有代码的改进⽅案有:
莱特币:刚性内存哈希函数Scrypt取代SHA256
达世币:X11,11种哈希函数混合使⽤
以太坊:Ethash,⼤内存DAG搜索
但是实际上,只要利益⾜够⼤,⼈们总能够设计出专门POW挖矿的矿机,莱特币矿机和达世币矿机先后被制造了出来,以太坊之前也顶多是使⽤显卡挖矿,最近⽐特⼤陆也研发出了专门进⾏以太坊挖矿的专业矿机“蚂蚁矿机E3。具体可以参考这个新闻:
⽐特币POW算法的资源浪费问题
中本聪为了解决拜占庭共识问题,在⽐特币系统中引⼊竞争挖矿的机制。同时,为了保证最⼤可能的公平性,采⽤了基于哈希运算的PoW共识机制。矿⼯如果想要得到⼀个合法的区块,则必须向区块头中填⼊不同的随机值,然后计算出区块头的哈希值,使得得到的哈希值⼩于⽬标值。这样,矿⼯在不断寻合适随机值的过程中完成了⼀定的⼯作量。可以发现,矿⼯完成的这个⼯作量对于现实社会毫⽆意义。唯⼀的意义就是保障了⽐特币的安全性。
这是最新的⽐特币历史算⼒曲线,现在的算⼒已经相当惊⼈,这样就意味着,后⾯后200多万台专业的⽐特币矿机在运⾏!!!
有⼈做了个估算,其耗电量⽐伊朗整个国家的耗电量还⼤。
⽐特币的POW算法是没有任何实际意义的SHA256运算,那么有没有可能在挖矿的同时,把这些算⼒算出⼀些副产物?以下是⼏个⽐较有名的进⾏有效⼯作量证明的区块链:
质数币:Primecoin(质数币)发布于2013年7⽉。其最⼤的特点是将虚拟货币中浪费的算法资源利⽤起来。它的PoW可以搜索质数,从⽽计算孪⽣素数表。所以有⼀定的科学价值。
币:Curecoin(币)发布于2013年5⽉。币最⼤的特点是将蛋⽩质褶皱结构的研究SHA256⼯作量证明算法进⾏了结合。
因为蛋⽩质褶皱研究需要对蛋⽩质进⾏⽣化反应的模拟过程需要⼤量的计算资源,所以在“挖矿”的同时,还⽤于发现治愈疾病的新药,⼀举两得。
⽐原链:⽐原链重新设计⼀种不同于⽐特币的哈希运算PoW共识机制,引⼊了矩阵运算与卷积运算,这样就能让⼈⼯智能运算充分利⽤⽐原链的挖矿设备。在这个过程中,⼈⼯智能加⼊了新的硬件,其算法运⾏速度得到明显提⾼。同时,这样也能减少⼀定的资源浪费。在这种情况下,矿机市场巨⼤的经济利益能够极⼤地加速⼈⼯智能ASIC芯⽚的发展,加快⼈⼯智能的研究。反过来,⼈⼯智能的快速发展也产⽣了更多的ASIC矿机需求。因此,这是⼀种正向反馈良性发展的过程。
POS权益证明
POW算法毕竟是要靠⼤量资源的消耗来保证共识的达成,有没有完全不需要靠计算机资源堆砌来保证的共识机制呢?在2011年,⼀个名为Quantum Mechanic的爱好者在Bitcointalk论坛提出Proof-of-
Stake(POS)证明机制,该机制被充分讨论之后证明具有可⾏性。如果说POW主要⽐拼算⼒,算⼒越⼤,挖到⼀个块的概率越⼤,POS则是⽐拼余额,通俗说就是⾃⼰的⼿⾥的币越多,挖到⼀个块的概率越⼤。
POS共识算法存在⼀个漏洞,就是⿍⿍⼤名的Nothing-at-Stake攻击(常写作)。
假设系统中出现了两个分⽀链,那么对于持有币的”挖矿者“来讲,最佳的操作策略就是同时在两个分⽀上进⾏“挖矿”,这样,⽆论哪个分⽀胜出,对币种持有者来讲,都会获得本属于他的利益,即不会有利益损失。⽽且由于不需要算⼒消耗,因此PoS中在两个分⽀上挖矿是可⾏的。这导致的问题是,只要系统存在分叉,“矿⼯们”都会同时在这⼏个分⽀上挖矿;因此在某个情况下,发起攻击的分叉链是极有可能成功的,因为所有⼈也都在这个分叉链上达成了共识;⽽且甚⾄不⽤持有51%的币量,就可以成功发起分叉攻击。⽽这在PoW中是不可⾏的,因为挖矿需要消耗算⼒,矿⼯只能在⼀个分⽀上进⾏挖矿。所以在实际POS算法中,还需要加⼊⼀些惩罚机制,如果矿⼯被发现两个分⽀同时挖矿,就会进⾏惩罚。
第⼀个POS虚拟货币——点点币
Peercoin(点点币,PPC)于2012年8⽉发布,最⼤创新是其采矿⽅式混合了POW⼯作量证明及POS权益证明⽅式,其中POW主要⽤于发⾏货币,未来预计随着挖矿难度上升,产量降低,系统安全主要由POS维护。⽬前区块链中存在两种类型的区块,POW区块和POS区块。PPC的作者为同样不愿意公开
⾝份的密码货币极客Sunny King,同时也是Primecoin的发明者。
第⼀个纯POS虚拟货币——未来币
2013年9⽉,⼀个名为BCNext的⽤户在Bitcointalk论坛发起⼀个帖⼦,宣布将发⾏⼀种全新的纯POS币种,后来取名为Nextcoin,简称NXT。Nxt是且是第⼀个100%的股权证明(PoS)机制的电⼦货币,Nxt不再通过消耗⼤量的资源“挖矿”产⽣新货币,⽽是通过现有账户的余额去“锻造”区块,并给与成功“锻造”区块的账户交易费⽤奖励。NXT的POS实现⽅式与PPC完全不同,合格区块判定⽅法为:
hit < baseTarget * effectiveBalance * elapseTime
hit是根据最新区块和⽤户的私钥⽣成的值,⽤户在挖⼀个区块时只需要计算⼀次即可。⽽右边的值跟账户余额成正⽐,跟流逝的时间成正⽐。也就意味着,⽤户账户余额越多,挖到矿的⼏率越⾼,随着时间的流逝越久,越容易到新的区块。NXT区块的⽣成完全摒弃了竞争的理念,有点“上帝早已安排好⼀切”的味道,下⼀个区块由谁来⽣成冥冥中早就注定了,全⽹节点能做的就是静静等待那⼀刻的到来。
POS的本质就是⽐谁的钱多,钱越多越容易挖到区块,这将会造成富者越富,资源越来越集中,从⽽变得更中⼼化。
DPOS代理权益证明
针对POW、POS的效率低和会变得越来越中⼼化的问题,BM在2013年8⽉启动的⽐特股BitShares项⽬则采⽤了DPOS共识算法。
⽐特股
⽐特股核⼼账本采⽤⽯墨稀技术,对交易容量和区块速度有极⾼要求,显然POW或POS都达不到要求,于是⽐特股发明了⼀种新的共识机制——Delegated Proof-Of-Stake(DPOS),即代理股权证明。
DPOS很容易理解,类似于现代企业董事会制度,⽐特股系统将持有者称为股东,由股东投票选出101名代表,然后由这些代表负责产⽣区块。那么需要解决的核⼼问题主要有:代表如何被选出,代表如何⾃由退出“董事会”,代表之间如何协作产⽣区块等。持币者若想成为⼀名代表,需先拿⾃⼰的公钥去区块链注册,获得⼀个长度为32位的特有⾝份标识符,⽤户可以对这个标识符以交易的形式进⾏投票,得票数前101位被选为代表。代表们轮流产⽣区块,收益(交易⼿续费)平分。如果有代表不⽼实⽣产区块,很容易被其他代表和股东发现,他将⽴即被踢出“董事会”,空缺位置由票数排名102的代表⾃动填补。
从某种⾓度来说,DPOS可以理解为多中⼼系统,兼具去中⼼化和中⼼化优势。
EOS
另外⽬前最⽕的区块链项⽬之⼀EOS也是采⽤了DPOS共识。EOS通过投票的⽅式选举出21个超级节点作为记账节点,每个节点有3秒的时间⽚,轮流记账。如果轮到某节点记账⽽没有出块,则该节点可能被投票出局,由其他备选节点顶替。出块速度是0.5秒!
EOS.IO软件允许区块精准的以每0.5秒产⽣⼀个区块,只有⼀个⽣产者被授权在任何给定的时间点⽣产⼀个区块。如果区块在预定的时间没有被⽣产出来,那么,那个时间的区块将被跳过。当⼀个或多个区块被跳过,将会有0.5秒或更多秒的区块间隔。
使⽤EOS.IO软件,区块以126个区块为⼀轮(每个⽣产者可以⽣产6个,有21个⽣产者,⼆者相乘)。在每⼀轮的开始,21个区块⽣产者通过token持有者的投票被选中。选中的⽣产者依据商定好的顺序⽣产区块,这个顺序由15个或者更多的⽣产者商定。
如果⼀个⽣产者错过了⼀个区块,并且在24⼩时内没有⽣产任何区块,他们将会被移除。直到这些“宕机”的⽣产者们及时通知区块链,他们将打算再次⽣产区块才被重新加⼊。通过不安排那些不够可靠的节点,尽可能的减少错过区块创建,来让整个⽹络运⾏得更平稳。
DPOS的特殊性,也是奠定拜占庭容错能⼒的基础框架,是它的算⼒节点是固定21个⼈,并且由⼤型的机构运营节点,其信息也相对透明,例如运营节点的地点、运营的情况等等。并且DPOS的算⼒节点是固定出块顺序的,固定地从A到B到C······。
421事件是什么传统DPOS中加⼊了拜占庭容错算法(BFT),只要没有⽣产者盖上相同的时间戳或相同区块⾼度的两个区块,便允许所有⽣产者签署所有区块。⼀旦15个⽣产者签署了⼀个区块,该区块就被认为是不可逆转的。在这种模式下,不可逆转的共识应该在1秒内完成。
在这种情况下,其实DPOS是拜占庭容错的特殊解,如何理解特殊解?原来的拜占庭容错(POW⼯作量证明),解决的是不限数量、随机⼴播同步的算⼒节点的容错能⼒,DPOS解决的拜占庭容错从两个维度降低了难度:
1、节点数量固定只有21个。并且节点信息透明。
2、固定出块顺序。每个节点跟接⼒棒⼀样,⼀个个往下接⼒出块。每个节点不能还没轮到它出块的时候,就出块。都是必须轮到再出块。如果出现出块故障,会跳过这个节点。
在POW或者其他的POS共识⾥,节点不限、随机出块顺序的问题,就变成只要解决「固定数量和固定出块顺序情况下的拜占庭问题」,其难度就⼤⼤降低。
⼀直以来以太坊的创始⼈Vitalik和EOS创始⼈BM关于POW和DPOS谁更中⼼化进⾏互怼。Vitalik认为EOS的21个超级节点违反了区块链的去中⼼化原则,有失公平。⽽BM则认为⼏个⼏⼤矿池控制了⽐特币和以太坊的绝⼤部分算⼒,这相当于以太坊只有⼏个超级节点,⽐21个节点还要少,对⼿⾥拿着BTC
和ETH的⼈他们对社区和整个⽣态,他们是没有确定的发⾔权的,在⽐特币的世界⾥算⼒就是王道,⾯对算⼒⼤量集中在部分矿场的现在,它真的实现了中本聪的本⼼了吗?同样需要挖矿POS也是⼀样,需要看概率来决定你能否发声,但是DPOS是有发⾔权的,不管持有多少,我都有发⾔权。这种看似由“直接民主”转为“间接民主”的机制,或许才是真正体现了去中⼼化精神。
以下是最新的⽐特币算⼒分布和以太坊的算⼒分布:
其他改进共识
以上介绍到的PBFT、POW、POS和DPOS各有各的优缺点:
POW的能耗问题
POS/DPOS的中⼼化问题
PBFT的节点数问题
IP投票制币不够安全
有⼈仿照CAP不可能三⾓,也提出了区块链共识的不可能三⾓:环保节能、安全、去中⼼化,三者不可
能同时满⾜,必有⼀⽅的弱化。设计⼀个既环保⼜安全的密码学货币,它必然是中⼼化的,⽐如PPcoin、Nextcoin、Ripple,它们要么本⾝就是中⼼化的架构,要么其去中⼼化的架构不可维持,它们本质上仍是PayPal、⽹银⼀样的中⼼化验证机制;设计⼀个既环保⼜去中⼼化的密码学货币,它必然是不安全的,⽐如IP投票制的P2P货币,中本聪起初就已排除了这种可能,他认为“如果决定⼤多数的⽅式是基于IP地址的,⼀IP地址⼀票,那么如果有⼈拥有分配⼤量IP地址的权⼒,⽐如僵⼫⽹络,就有可能主宰⽐特币⽹络”[vi]。设计⼀个安全的去中⼼化货币,它必然是以付出能源与计算⼒为代价。
有时,我们可能需要根据区块链的场景,对原有共识算法进⾏改进。
NEO的dBFT
NEO采⽤的是 Delegated Byzantine Fault Tolerance (dBFT) 共识算法,由于它⽬前只有 7 个代理节点,⽽代表节点则是通过⽤户投票选出。dBFT参与记账的是超级节点,普通节点可以看到共识过程,并同步账本信息,但不参与记账。总共n个超级节点分为⼀个议长和n-1个议员,议长会轮流当选。每次记账时,先有议长发起区块提案(拟记账的区块内容),⼀旦有⾄少(2n+1)/3个记账节点(议长加议员)同意了这个提案,那么这个提案就成为最终发布的区块,并且该区块是不可逆的,所有⾥⾯的交易都是百分之百确认的。
以太坊的下⼀代POS共识:Casper
Casper(投注共识)是⼀种以太坊下⼀代的共识机制,属于PoS。Casper的共识是按块达成的⽽不是像PoS那样按链达成的。
为了防⽌验证⼈在不同的世界中提供不同的投注,我们还有⼀个简单严格的条款:如果你有两次投注序号⼀样,或者说你提交了⼀个⽆法让Casper合约处理的投注,你将失去所有保证⾦。从这⼀点我们可以看出,Casper与传统的PoS不同的是Casper有惩罚机制,这样⾮法节点通过恶意攻击⽹络不仅得不到交易费,⽽且还⾯临着保证⾦被没收的风险。
Casper协议下的验证⼈需要完成出块和投注两个活动。具体如下:
出块是⼀个独⽴于其它所有事件⽽发⽣的过程:验证⼈收集交易,当轮到他们的出块时间时,他们就制造⼀个区块,签名,然后发送到⽹络
上。投注的过程更为复杂⼀些。⽬前Casper默认的验证⼈策略被设计为模仿传统的拜占庭容错共识:观察其他的验证⼈如何投注,取33%处的值,向0或者1进⼀步移动。
⽽客户端的确认当前状态的过程如下所⽰:
⼀开始先下载所有的区块和投注,然后⽤上⾯的算法来形成⾃⼰的意见,但是不公布意见。它只要简单的按顺序在每个⾼度进⾏观察,如果⼀个块的概率⾼于0.5就处理它,否则就跳过它。在处理所有的区块
之后得到的状态就可以显⽰为区块链的“当前状态”。客户端还可以给出对于“最终确定”的主观看法:当⾼度k之前的每个块,意见要么⾼于99.999%或者低于0.001%,那么客户端就可以认为前k个块已经最终确定。
IOTA和Byteball的DAG和相关共识
IOTA和Byteball这种基于DAG结构的分布式账本技术,从概念上讲已经不能算是区块链了,因为在底层结构上,DAG中既没有区块也不是链。IOTA中使⽤Tangle(缠结)这种技术,使得每个交易在发出时也见证另外两个交易。Byteball采⽤的是11个见证⼈的⽅式,由见证⼈参与共识。
HyperLedger Fabric下⼀代共识:SBFT
PBFT在Fabric0.6的时候被采⽤,但是由于⼀些说不清的原因,在Fabric1.0中并没有采⽤PBFT,⽽是使⽤Kafka进⾏排序,作为共识节点。在Fabric的提案中,打算会采⽤SBFT(Simple BFT),这种BFT算法会对PBFT进⾏简化,具体什么时候实现还没准呢。PalletOne的陪审团共识
在英美,陪审团制度是⼀个使⽤了⼏百年的共识制度,关于⼀个案件中嫌疑⼈是否有罪,是由随机抽选的陪审员组成陪审团共同决定的。提到陪审团,就不得不提⼀部⾮常经典的电影《⼗⼆怒汉》:
《⼗⼆怒汉》讲述的是⼀个在贫民窟长⼤的18岁少年因为涉嫌杀害⾃⼰的⽗亲被告上法庭,证⼈⾔之凿
凿,各⽅⾯的证据都对他极为不利。⼗⼆个不同职业的⼈组成了这个案件的陪审团,他们要在休息室达成⼀致的意见,裁定少年是否有罪,如果罪名成⽴,少年将会被判处死刑。
《⼗⼆怒汉》通过⼀场陪审团审判,⽣动演绎了美国的法律制度与⽂化,是美国宣传法律和法律制度的“银法槌奖”的⾸部获奖作品。同名电影在IMDB上排名第五,⾼于《阿⽢正传》《⾟德勒的名单》等,是⼀部超越时代的经典之作!其中的⼀段台词也很能体现陪审团制度的特点:
“我们都肩负责任。我⼀直认为,这正是民主社会了不起的地⽅。我们接到邮件通知,⼤⽼远跑到这⾥,决定⼀个跟我们素昧平⽣的⼈到底有没有罪。不论作出什么样的裁决,我们都拿不到任何好处,也不会有任何损失。这正是我们国家强⼤的原因之⼀。我们不能把它当成个⼈的事”
提供了对各个底层链的抽象,⽤户使⽤常⽤的开发语⾔,基于对底层链的抽象接⼝进⾏操作。⽽合约的执⾏就是靠⼀个个的陪审团来完成的。
除了陪审团这个⾓⾊,在PalletOne中还有⼀个叫仲裁中介(Mediator)的⾓⾊,该⾓⾊是基于DPOS选举的,相当于现实⽣活中的法官的⾓⾊,在接到⼀个新的智能合约后,Mediator会随机选择陪审员组成陪审团,由该陪审团负责该智能合约的执⾏和共识。
陪审团共识与传统POW、POS等共识的不同之处在于,陪审团共识是⼀个并⾏的共识机制,在同⼀个
时刻,有多个陪审团同时在执⾏不同的合约。为了配合陪审团的并⾏共识,PalletOne采⽤了DAG作为分布式存储,合约的状态数据可以并⾏写⼊DAG中。所以使⽤陪审团并⾏共识+DAG的并⾏写⼊,可以实现极⾼的TPS。
总结
现在区块链上数字资产的应⽤越来越多来源于真实世界或⾦融资产,对交易的最终确认有很⾼的要求,需要有不同的共识机制。
共识机制是区块链的核⼼技术,现在各种区块链共识机制的选择是认为⾄今为⽌的相对的最优选择;当未来区块链技术越来越多应⽤于现实,未来将会不断有所改进,以切合实际的需要。
共识算法的选择与应⽤场景⾼度相关,可信环境使⽤Paxos或者Raft,带许可的联盟可使⽤PBFT,⾮许可链可以是POW、POS、DPOS共识等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。