「共识简史」区块链共识算法的发展现状与展望(区块链技术发展现状与展望)

「共识简史」区块链共识算法的发展现状与展望

来源:平行区块链

「共识简史」区块链共识算法的发展现状与展望(区块链技术发展现状与展望)
(图片来源网络,侵删)

摘要共识算法是区块链技术的核心要素,也是近年来分布式系统研究的热点.本文系统性地梳理和讨论了区块链发展过程中的32种重要共识算法,介绍了传统分布式一致性算法以及分布式共识领域的里程碑式的重要研究和结论,提出了区块链共识算法的一种基础模型和分类方法,并总结了现有共识算法的发展脉络和若干性能指标,以期为未来共识算法的创新和区块链技术的发展提供参考.

关键词区块链,共识算法,分布式系统,拜占庭容错

「共识简史」区块链共识算法的发展现状与展望(区块链技术发展现状与展望)
(图片来源网络,侵删)

引用格式袁勇,倪晓春,曾帅,王飞跃.区块链共识算法的发展现状与展望.自动化学报,DOI10.16383/j.aas.2018.c180268

共识问题社会科学和计算机科学等领域的经典问题,已经有很长的研究历史.目前有记载的文献至少可以追溯到1959年,兰德公司和布朗大学的埃德蒙·艾森伯格-EdmundEisenberg-和大卫·盖尔-D***idGale-发表的“Consensusofsubjectiveprobabilities:thePari-Mutuelmethod",主要研究针对某个特定的概率空间,一组个体各自有其主观的概率分布时,如何形成一个共识概率分布的问题[1].随后,共识问题逐渐引起了社会学、管理学、经济学、特别是计算机科学等各学科领域的广泛研究兴趣.

「共识简史」区块链共识算法的发展现状与展望(区块链技术发展现状与展望)
(图片来源网络,侵删)

计算机科学领域的早期共识研究一般聚焦于分布式一致性,即如何保证分布式系统集群中所有节点的数据完全相同并且能够对某个提案达成一致的问题,是分布式计算的根本问题之一.虽然共识-Consensus-和一致性-Consistency-在很多文献和应用场景中被认为是近似等价和可互换使用的,但二者涵义存在着细微的差别:共识研究侧重于分布式节点达成一致的过程及其算法,而一致性研究则侧重于节点共识过程最终达成的稳定状态;此外,传统分布式一致性研究大多不考虑拜占庭容错问题,即***设不存在恶意篡改和伪造数据的拜占庭节点,因此在很长一段时间里,传统分布式一致性算法的应用场景大多是节点数量有限且相对可信的分布式数据库环境.与之相比,区块链系统的共识算法则必须运行于更为复杂、开放和缺乏信任的互联网环境下,节点数量更多且可能存在恶意拜占庭节点.因此,即使Viewstampedreplication-以下简称VR-和Paxos等许多分布式一致性算法早在上世纪80年代就已经提出,但是如何跨越拜占庭容错这道鸿沟、设计简便易行的分布式共识算法,仍然是分布式计算领域的难题之一.

2008年10月31日,一位化名为“中本聪"的研究者在密码学邮件组中发表了比特币的奠基性论文“Bitcoin:apeer-to-peerelectroniccashsystem"[2],基于区块链-特别是公有链-的共识研究自此拉开序幕.从分布式计算和共识的角度来看,比特币的根本性贡献在于首次实现和验证了一类实用的、互联网规模的拜占庭容错算法,从而打开了通往区块链新时代的大门.

一般而言,区块链系统的节点具有分布式、自治性、开放可自由进出等特性,因而大多***用对等式网络-Peer-to-peernetwork,P2P网络-来组织散布全球的参与数据验证和记账的节点.P2P网络中的每个节点均地位对等且以扁平式拓扑结构相互连通和交互,不存在任何中心化的特殊节点和层级结构,每个节点均会承担网络路由、验证区块数据、传播区块数据、发现新节点等功能.区块链系统***用特定的经济激励机制来保证分布式系统中所有节点均有动机参与数据区块的生成和验证过程,按照节点实际完成的工作量分配共识过程所产生的数字加密货币,并通过共识算法来选择特定的节点将新区块添加到区块链.以比特币为代表的一系列区块链应用的蓬勃发展,彰显了区块链技术的重要性与应用价值,区块链系统的共识也成为一个新的研究热点[3][4][5].

迄今为止,研究者已经在共识相关领域做了大量研究工作,不同领域研究者的侧重点也各不相同.计算机学科通常称为共识算法或者共识协议,管理和经济学科则通常称为共识机制.细究之下,这些提法存在细微的差异:算法一般是一组顺序敏感的指令集且有明确的输入和输出;而协议和机制则大多是一组顺序不敏感的规则集.就区块链领域而言,本文认为比特币和以太坊等可认为是底层协议或机制,其详细规定了系统或平台内部的节点交互规则、数据路由和转发规则、区块构造规则、交易验证规则、账本维护规则等***;而工作量证明-Proof-ofWork,PoW-、权益证明-Proof-of-Stake,PoS-等则是建立在特定协议或机制基础上、可灵活切换的算法,其规定了交易侦听与打包、构造区块、记账人选举、区块传播与验证、主链选择与更新等若干类顺序敏感的指令***.因此,本文后续叙述均***用共识算法的提法.

现有文献研究的共识问题实际上可以分为算法共识和决策共识两个分支,前者致力于研究在特定的网络模型和故障模型前提下,如何在缺乏中央控制和协调的分布式网络中确保一致性,其实质是一种“机器共识";后者则更为广泛地研究无中心的群体决策中,如何就最优的决策达成一致的问题,例如关于比特币系统扩容[6]问题和分叉问题的社区讨论与路线选择,其实质是“人的共识".二者的区别在于:前者是机器间的确定性共识,以工程复杂性为主;而后者则是以“人在环路中-Human-in-theloop-"的复杂系统为特点的不确定性共识,以社会复杂性为主.区块链共识算法研究应属于算法共识分支的子集,而决策共识则大多见于分布式人工智能、多智能体等研究领域.

拜占庭将军问题是分布式共识的基础,也是上述两个研究分支的根源.拜占庭将军问题有两个交互一致性条件,即一致性和正确性.由于大多数情况下,正确性涉及到人的主观价值判断,很难施加到分布式节点上,因此算法共识***用的是“降级的正确性-Degradedcorrectness-,即从“表达的内容是正确的"降级为“正确地表达",这就导致区块链的拜占庭共识实际上是一种机器共识,其本身等价于分布式一致性正确表达-不篡改消息-.与之相对的是,决策共识可以认为是人的共识,不仅要求一致性,而且要求所有节点相信“表达的内容是正确的",因而决策共识不仅要求内容的客观一致性,而且还要求其在共识节点间的主观正确性.由此可见,算法共识处理的是客观的二值共识,即对-唯一正确的账本-和错-所有错误的账本-,而决策共识处理的是主观的多值共识,即意见1-及其所属群体-、意见2-及其所属群体-、……、意见N-及其所属群体-,各节点最终通过群体间的协调和协作过程收敛到唯一意见-共识-,而此过程可能失败-不收敛-.

本文致力于按时间顺序梳理和讨论区块链发展过程中的共识算法,以期为未来共识算法的创新和区块链技术的发展提供参考.本文的后续章节安排如下:首先简要介绍了分布式共识领域重要的里程碑式的研究和结论,包括两军问题、拜占庭问题和FLP不可能定理,并介绍了传统的分布式一致性算法;然后提出了区块链共识算法的一种基础模型和分类方法,并对当前主流的区块链共识算法进行了分析;最后总结了区块链共识算法的发展和研究趋势.

1传统分布式一致性算法

1***5年,纽约州立大学石溪分校的阿克云卢-E.A.Akkoyunlu-、埃卡纳德汉姆-K.Ekanadham-和胡贝尔-R.V.Huber-在论文“Someconstraintsandtradeofisinthedesignofnetworkcommunications"中首次提出了计算机领域的两军问题及其无解性证明[7],著名的数据库专家吉姆·格雷正式将该问题命名为“两军问题"[8].两军问题表明,在不可靠的通信链路上试图通过通信达成一致共识是不可能的,这被认为是计算机通信研究中第一个被证明无解的问题.两军问题对计算机通信研究产生了重要的影响,互联网时代最重要的TCP/IP协议中的“三次握手"过程即是为解决两军问题不存理论解而诞生的简单易行、成本可控的“工程解".

分布式计算领域的共识问题于1980年由马歇尔·皮斯-MarshallPease-、罗伯特·肖斯塔克-RobertShostak-和莱斯利·兰伯特-LeslieLamport-提出[9],该问题主要研究在一组可能存在故障节点、通过点对点消息通信的独立处理器网络中,非故障节点如何能够针对特定值达成一致共识.1982年,作者在另一篇文章中正式将该问题命名为“拜占庭将军问题"[10],提出了基于口头消息和基于签名消息的两种算法来解决该问题.拜占庭***设是对现实世界的模型化,强调的是由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现的不可预料的行为.此后,分布式共识算法可以分为两类,即拜占庭容错和非拜占庭容错类共识.早期共识算法一般为非拜占庭容错算法,例如广泛应用于分布式数据库的VR和Paxos,目前主要应用于联盟链和私有链;2008年末,比特币等公有链诞生后,拜占庭容错类共识算法才逐渐获得实际应用.需要说明的是,拜占庭将军问题是区块链技术核心思想的根源,直接影响着区块链系统共识算法的设计和实现,因而在区块链技术体系中具有重要意义.

1985年,迈克尔·费舍尔-MichaelFisher-、南希·林奇-NancyLynch-和迈克尔·帕特森-MichaelPaterson-共同发表了论文“Impossibilityofdistributedconsensuswithonefaultyprocess"[11].这篇文章证明:在含有多个确定性进程的异步系统中,只要有一个进程可能发生故障,那么就不存在协议能保证有限时间内使所有进程达成一致.按照作者姓氏的首字母,该定理被命名为FLP不可能定理,是分布式系统领域的经典结论之一,并由此获得了Dijkstra奖.FLP不可能定理同样指出了存在故障进程的异步系统的共识问题不存在有限时间的理论解,因而必须寻找其可行的“工程解".为此,研究者们只能通过调整问题模型来规避FLP不可能定理,例如牺牲确定性、增加时间等;加密货币则是通过设定网络同步性-或弱同步性-和时间***设来规避FLP不可能性,例如网络节点可以快速同步,且矿工在最优链上投入有限时间和***等.

早期的共识算法一般也称为分布式一致性算法.与目前主流的区块链共识算法相比,分布式一致性算法主要面向分布式数据库操作、且大多不考虑拜占庭容错问题,即***设系统节点只发生宕机和网络故障等非人为问题,而不考虑恶意节点篡改数据等问题.1988年,麻省理工学院的布莱恩·奥奇-BrianM.Oki-和芭芭拉·里斯科夫-BarbaraH.Liskov,著名计算机专家、2008年图灵奖得主-提出了VR一致性算法,***用主机-备份-Primary-backup-模式,规定所有数据操作都必须通过主机进行,然后***到各备份机器以保证一致性[12].1989年,莱斯利·兰伯特-LeslieLamport-在工作论文“Thepart-timeparliament"中提出Paxos算法,由于文章***用了讲故事的叙事风格且内容过于艰深晦涩,直到1998年才通过评审、发表在ACMtransactionsoncomputersystems期刊上[13].Paxos是基于消息传递的一致性算法,主要解决分布式系统如何就某个特定值达成一致的问题.随着分布式共识研究的深入,Paxos算法获得了学术界和工业界的广泛认可,并衍生出Abstractpaxos、Classicpaxos、Byzantinepaxos和Diskpaxos等变种算法,成为解决异步系统共识问题最重要的算法家族[14].实际上,Liskove等提出的VR算法本质上也是一类Paxos算法.需要说明的是,VR和Paxos算法均***设系统中不存在拜占庭故障节点,因而是非拜占庭容错的共识算法.除以上共识算法外,获得较多研究关注的早期共识算法还有两阶段提交-Two-pha***mit-算法、三阶段提交-Three-pha***mit-算法、Zab、Zyzzyva、Kafka等,本文限于篇幅不加详述.

2主流区块链共识算法

1993年,美国计算机科学家、哈佛大学教授辛西娅·德沃克-CynthiaDwork-首次提出了工作量证明思想[15],用来解决垃圾邮件问题.该机制要求邮件发送者必须算出某个数学难题的答案来证明其确实执行了一定程度的计算工作,从而提高垃圾邮件发送者的成本.19***年,英国密码学家亚当·伯克-AdamBack-也独立地提出、并于2002年正式发表了用于哈希现金-Hashcash-的工作量证明机制[16].哈希现金也是致力于解决垃圾邮件问题,其数学难题是寻找包含邮件接受者地址和当前日期在内的特定数据的SHA-1哈希值,使其至少包含20个前导零.1999年,马库斯·雅各布松-MarkusJakobsson-正式提出了“工作量证明"概念[17].这些工作为后来中本聪设计比特币的共识机制奠定了基础.

1999年,BarbaraLiskov等提出了实用拜占庭容错算法-PracticalByzantinefaulttolerance,PBFT-[18],解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行.PBFT实际上是Paxos算法的变种,通过改进Paxos算法使其可以处理拜占庭错误,因而也称为Byzantinepaxos算法,可以在保证活性-Liveness-和安全性-Safety-的前提下提供-n-1-/3的容错性,其中n为节点总数.

2000年,加利福尼亚大学的埃里克·布鲁尔-EricBrewer-教授在ACMsymposiumonprinciplesofdistributedcomputing研讨会的特邀报告中提出了一个猜想:分布式系统无法同时满足一致性-Consistency-、可用性-***ailability-和分区容错性-Partitiontolerance-,最多只能同时满足其中两个.其中,一致性是指分布式系统中的所有数据备份在同一时刻保持同样的值;可用性是指集群中部分节点出现故障时,集群整体是否还能处理客户端的更新请求;分区容忍性则是指是否允许数据分区,不同分区的集群节点之间无法互相通信.2002年,塞斯·吉尔伯特-SethGilbert-和南希·林奇-NancyLynch-在异步网络模型中证明了这个猜想,使其成为CAP定理或布鲁尔定理[19].该定理使得分布式网络研究者不再追求同时满足三个特性的完美设计,而是不得不在其中做出取舍,这也为后来的区块链体系结构设计带来了影响和限制.

2008年10月,中本聪发表的比特币创世论文催生了基于区块链的共识算法研究.前文所提到的传统分布式一致性算法大多应用于相对可信的联盟链和私有链,而面向比特币、以太坊等公有链环境则诞生了PoW、PoS等一系列新的拜占庭容错类共识算法.

比特币***用了PoW共识算法来保证比特币网络分布式记账的一致性,这也是最早和迄今为止最安全可靠的公有链共识算法.PoW的核心思想是通过分布式节点的算力竞争来保证数据的一致性和共识的安全性.比特币系统的各节点-即矿工-基于各自的计算机算力相互竞争来共同解决一个求解复杂但是验证容易的SHA256数学难题-即挖矿-,最快解决该难题的节点将获得下一区块的记账权和系统自动生成的比特币奖励.PoW共识在比特币中的应用具有重要意义,其近乎完美地整合了比特币系统的货币发行、流通和市场交换等功能,并保障了系统的安全性和去中心性.然而,PoW共识同时存在着显著的缺陷,其强大算力造成的***浪费-主要是电力消耗-历来为人们所诟病,而且长达10分钟的交易确认时间使其相对不适合小额交易的商业应用.[3]

2011年7月,一位名为QuantumMechanic的数字货币爱好者在比特币论坛-***.bitcointalk.org-首次提出了权益证明PoS共识算法[20].随后,SunnyKing在2012年8月发布的点点币-Peercoin,PPC-中首次实现.PoS由系统中具有最高权益而非最高算力的节点获得记账权,其中权益体现为节点对特定数量货币的所有权,称为币龄或币天数-Coindays-.PPC将PoW和PoS两种共识算法结合起来,初期***用PoW挖矿方式以使得Token相对公平地分配给矿工,后期随着挖矿难度增加,系统将主要由PoS共识算法维护.PoS一定程度上解决了PoW算力浪费的问题,并能够缩短达成共识的时间,因而比特币之后的许多竞争币都***用PoS共识算法.

2013年2月,以太坊创始人VitalikButerin在比特币杂志网站详细地介绍了Ripple-瑞波币-及其共识过程的思路.Ripple项目实际上早于比特币,2004年就由瑞安·福格尔-RyanFugger-实现,其初衷是创造一种能够有效支持个人和社区发行自己货币的去中心化货币系统;2014年,大卫·施瓦尔茨-D***idSchwartz-等提出了瑞波协议共识算法-RippleProtocolConsensusAlgorithm,RPCA-[21],该共识算法解决了异步网络节点通讯时的高延迟问题,通过使用集体信任的子网络-Collectively-trustedsubnetworks-,在只需最小化信任和最小连通性的网络环境中实现了低延迟、高鲁棒性的拜占庭容错共识算法.目前,Ripple已经发展为基于区块链技术的全球金融结算网络.

2013年8月,比特股-Bitshares-项目提出了一种新的共识算法,即授权股份证明算法-DelegatedProof-of-Stake,DPoS-[22].DPoS共识的基本思路类似于“董事会决策",即系统中每个节点可以将其持有的股份权益作为选票授予一个代表,获得票数最多且愿意成为代表的前N个节点将进入“董事会",按照既定的时间表轮流对交易进行打包结算、并且签署-即生产-新区块[3].如果说PoW和PoS共识分别是“算力为王"和“权益为王"的记账方式的话,DPoS则可以认为是“民主集中式"的记账方式,其不仅能够很好地解决PoW浪费能源和联合挖矿对系统的去中心化构成威胁的问题,也能够弥补PoS中拥有记账权益的参与者未必希望参与记账的缺点,其设计者认为DPoS是当时最快速、最高效、最去中心化和最灵活的共识算法.

2013年,斯坦福大学的迭戈·翁伽罗-DiegoOngaro-和约翰·奥斯特豪特-JohnOusterhout-提出了Raft共识算法.正如其论文标题“Insearchofanunderstandableconsensusalgorithm"[23]所述,Raft的初衷是为设计一种比Paxos更易于理解和实现的共识算法.要知道,由于Paxos论文极少有人理解,Lamport于2001年曾专门写过一篇文章“Paxo***adesimple"[24],试图简化描述Paxos算法但效果不好,这也直接导致了Raft的提出.目前,Raft已经在多个主流的开源语言中得以实现.

3共识算法的模型与分类

随着比特币的普及和区块链技术的发展,越来越多的新共识算法被提出.为使读者更为深刻地理解不同的共识算法,本节给出区块链共识过程的一个主流模型.需要说明的是,该模型并非通用模型,可能无法涵盖所有种类的共识过程,但是可以体现大多数主流共识算法的核心思想.

区块链系统建立在P2P网络之上,其全体节点的***可记为P,一般分为生产数据或者交易的普通节点,以及负责对普通节点生成的数据或者交易进行验证、打包、更新上链等挖矿操作的“矿工"节点***-记为M-,两类节点可能会有交集;矿工节点通常情况下会全体参与共识竞争过程,在特定算法中也会选举特定的代表节点、代替他们参加共识过程并竞争记账权,这些代表节点的***记为D;通过共识过程选定的记账节点记为A.共识过程按照轮次重复执行,每一轮共识过程一般重新选择该轮的记账节点.

共识过程的核心是“选主"和“记账"两部分,在具体操作过程中每一轮可以分为选主-Leaderelection-、造块-Blockgeneration-、验证-Dat***alidation-和上链-Chainupdation,即记账-四个阶段.如图1所示,共识过程的输入是数据节点生成和验证后的交易或数据,输出则是封装好的数据区块以及更新后的区块链.四个阶段循环往复执行,每执行一轮将会生成一个新区块.

第一阶段:选主.选主是共识过程的核心,即从全体矿工节点集M中选出记账节点A的过程:我们可以使用公式f-M-!A来表示选主过程,其中函数f代表共识算法的具体实现方式.一般来说,jAj=1,即最终选择唯一的矿工节点来记账.

第二阶段:造块.第一阶段选出的记账节点根据特定的策略将当前时间段内全体节点P生成的交易或者数据打包到一个区块中,并将生成的新区块广播给全体矿工节点M或其代表节点D.这些交易或者数据通常根据区块容量、交易费用、交易等待时间等多种因素综合排序后,依序打包进新区块.造块策略是区块链系统性能的关键因素,也是贪婪交易打包、自私挖矿等矿工策略性行为的集中体现.

第三阶段:验证.矿工节点M或者代表节点D收到广播的新区块后,将各自验证区块内封装的交易或者数据的正确性和合理性.如果新区块获得大多数验证/代表节点的认可,则该区块将作为下一区块更新到区块链.

第四阶段:上链.记账节点将新区块添加到主链,形成一条从创世区块到最新区块的完整的、更长的链条.如果主链存在多个分叉链,则需根据共识算法规定的主链判别标准,来选择其中一条恰当的分支作为主链.

区块链共识算法可以根据其容错类型、部署方式和一致性程度等多个维度加以分类.例如,根据容错类型,可以将区块链共识算法分为拜占庭容错和非拜占庭容错两类;根据部署方式,可以将区块链共识算法分为公有链共识、联盟链共识和私有链共识三类;根据一致性程度,还可以将区块链共识算法分为强一致性共识和弱-最终-一致性共识等.本文提出一种按照共识过程的选主策略的新分类方法,其优点在于便于刻画共识算法的核心机理.具体来说,可根据选主策略-即函数f的具体实现方式-将区块链共识算法分为选举类、证明类、随机类、联盟类和混合类共五种类型:

选举类共识:即矿工节点在每一轮共识过程中通过“投票选举"的方式选出当前轮次的记账节点,首先获得半数以上选票的矿工节点将会获得记账权;多见于传统分布式一致性算法,例如Paxos和Raft等.

证明类共识:也可称为“ProofofX"类共识,即矿工节点在每一轮共识过程中必须证明自己具有某种特定的能力,证明方式通常是竞争性地完成某项难以解决但易于验证的任务,在竞争中胜出的矿工节点将获得记账权;例如PoW和PoS等共识算法是基于矿工的算力或者权益来完成随机数搜索任务,以此竞争记账权.

随机类共识:即矿工节点根据某种随机方式直接确定每一轮的记账节点,例如下文将要提到的Algorand和PoET共识算法等.联盟类共识:即矿工节点基于某种特定方式首先选举出一组代表节点,而后由代表节点以轮流或者选举的方式依次取得记账权.这是一种以“代议制"为特点的共识算法,例如DPoS等.

混合类共识:即矿工节点***取多种共识算法的混合体来选择记账节点,例如PoWPoS混合共识、DPoSBFT共识等.

4区块链共识算法的新进展

自2014年起,随着比特币和区块链技术快速进入公众视野,许多学者开始关注并研究区块链技术,共识算法也因此进入快速发展、百花齐放的时期.许多新共识算法在这段时间被提出.它们或者是原有算法的简单变种,或者是为改进某一方面性能而做出的微创新,或者是为适应新场景和新需求而做出重大改进的新算法.需要说明的是,这些共识算法由于提出时间晚,目前大多尚未获得令人信服的实践验证,有些甚至只是科研设想;但这些算法均具有明显的创新之处,具有一定的大规模应用的前景,因此我们写出来以飨读者,并期待能够启发后续的创新研究.

4.1主线一:PoW与PoS算法的有机结合

研究者基于PoW和PoS算法的有机结合,相继提出了权益-速度证明-ProofofStakeVelocity,PoSV-[25]、燃烧证明-ProofofBurn,PoB-[26]、行动证明-ProofofActivity,PoA-[27]和二跳-2-hop-[28]共识算法,致力于取长补短、解决PoW与PoS存在的能源消耗与安全风险问题.2014年4月,拉里·雷恩-LarryRen-在蜗牛币Reddcoin***中提出了PoSV共识算法,针对PoS中币龄是时间的线性函数这一问题进行改进,致力于消除持币人的屯币现象.PoSV算法前期使用PoW实现代币分配,后期使用PoSV维护网络长期安全.PoSV将PoS中币龄和时间的线性函数修改为指数式衰减函数,即币龄的增长率随时间减少最后趋于零.因此新币的币龄比老币增长地更快,直到达到上限阈值,这在一定程度上缓和了持币者的屯币现象.2014年5月发行的Slimcoin借鉴了比特币和点点币的设计,基于PoW和PoS首创提出了PoB共识算法.其中,PoW共识被用来产生初始的代币供应,随着时间增长,区块链网络累积了足够的代币时,系统将依赖PoB和PoS共识来共同维护.PoB共识的特色是矿工通过将其持有的Slimcoin发送至特定的无法找回的地址-燃烧-来竞争新区块的记账权,燃烧的币越多则挖到新区块的概率越高.2014年12月提出的PoA共识也是基于PoW和PoS,其中***用PoW挖出的部分代币以抽奖的方式分发给所有活跃节点,而节点拥有的权益与抽奖券的数量即抽中概率成正比.二跳共识于2017年4月提出,其设计初衷是为解决PoW潜在的51%算力攻击问题,解决思路是在PoW算力的基础上引入PoS权益,使得区块链安全建立在诚实节点占有大多数联合***-算力权益-的基础上.换句话说,拜占庭节点必须同时控制51%以上的算力和51%以上的权益,才能成功实施51%攻击,这无疑极大地提高了区块链的安全性.

4.2主线二:原生PoS算法的改进

原生PoS共识算法的改进目标主要是解决其固有的“无利害关系-Nothingatstake-"问题,形成了Tendermint[29]以及由其衍生出的Casper[30]、Ouroboros[31]、Tezos[32]和Honeybadger[33]等新共识算法.原生PoS共识一般***设系统中的对等节点都是静态和长期稳定的,这在区块链环境中并不现实.2014年提出的Tendermint的重大突破是使用区块、哈希链接、动态验证器***和循环的领导者选举,实现了第一个基于PBFT的PoS共识算法.为解决无利害关系问题,Tendermint节点需要缴纳保证金,如果作恶则保证金就会被没收.Tendermint是一种拜占庭容错的共识算法,具有抵御双花攻击的鲁棒性,并且可以抵御网络中至多三分之一的破坏者的攻击.

2015年提出的Casper是以太坊***在其路线图中称为宁静-Serenity-的第四阶段***用的共识算法,尚在设计、讨论和完善阶段.目前Casper总共有两个版本,即由VladZamjir领导的CaspertheFriendlyGhost-CTFG-[34]和由VitalikButerin带领实现的CasperFriendlyFinalityGadget-CFFG-[35].前者是明确的PoS共识,而后者则是PoW和PoS共识的有机结合.同时,PoS共识的两个主要原理分别是基于链的PoS和基于拜占庭容错的PoS.Tendermint是基于拜占庭容错的PoS设计.相比之下,CTFG是基于链的PoS设计,而CFFG则是两者的结合.

2016年提出的HoneyBadger共识是首个实用的异步拜占庭容错共识协议,可以在没有任何网络时间***设的前提下保证区块链系统的活性-Liveness-.该共识基于一种可实现渐进有效性的原子广播协议,能够在广域网的上百个节点上处理每秒上万笔交易.2017年8月提出的Ouroboros共识是首个基于PoS并且具有严格安全性保障的区块链协议,其特色是提出了一种新的奖励机制来驱动PoS共识过程,使得诚实节点的行为构成一个近似纳什均衡,可以有效地抵御区块截留和自私挖矿等由于矿工的策略性行为而导致的安全攻击.

4.3主线三:原生PoW共识算法的改进

原生PoW共识算法的改进目标主要是实现比特币扩容或者降低其能耗.2016年3月,康奈尔大学的IttayEyal等提出一种新的共识算法BitcoinNG[36],将时间切分为不同的时间段.在每一个时间段上由一个领导者负责生成区块、打包交易.该协议引入了两种不同的区块:用于选举领导者的关键区块和包含交易数据的微区块.关键区块***用比特币PoW共识算法生成,然后领导者被允许小于预设阈值的速率-例如10秒-来生成微区块.BitcoinNG可在不改变区块容量的基础上通过选举领导者生成更多的区块,从而可***解决比特币的扩容问题.同年8月提出的ByzCoin[37]共识算法借鉴了Bitcoin-NG这种领导者选举和交易验证相互独立的设计思想,是一种新型的可扩展拜占庭容错算法,可使得区块链系统在保持强一致性的同时,达到超出Paypal吞吐量的高性能和低确认延迟.2016年提出的Elastico[38]共识机制通过分片技术来增强区块链的扩展性,其思路是将挖矿网络以可证明安全的方式隔离为多个分片-Shard-,这些分片并行地处理互不相交的交易***.Elastico是第一个拜占庭容错的安全分片协议.2017年,OmniLedger[39]进一步借鉴ByzCoin和Elastico共识,设计并提出名为ByzCoinX的拜占庭容错协议.OmniLedger通过并行跨分片交易处理优化区块链性能,是第一种能够提供水平扩展性而不必牺牲长期安全性和去中心性的分布式账本架构.

为改进PoW共识算法的效率-能耗-和公平性,研究者相继提出了消逝时间证明-ProofofElapsedTime,PoET-[40]和运气证明-ProofofLuck,PoL-[41].PoET和PoL均是基于特定的可信执行环境-Trustedexecutionenvironments,TEE,例如基于IntelSGX技术的CPU-的随机共识算法.PoET是超级账本HyperLedger的锯齿湖Sawtooth项目***用的共识算法,其基本思路是每个区块链节点都根据预定义的概率分布生成一个随机数,来决定其距离下一次获得记账权的等待时间.每当一个新区块提交到区块链系统后,SGX即可帮助节点创建区块、生成该等待时间的证明,而这种证明易于被其他SGX节点验证.PoET共识的意义在于使得区块链系统不必消耗昂贵算力来挖矿、从而提高了效率,同时也真正实现了“一CPU一票"的公平性.类似地,PoL共识也***用TEE平台的随机数生成器来选择每一轮共识的领导者-记账人-,从而可降低交易验证延迟时间和交易确认时间、实现可忽略的能源消耗和真正公平的分布式挖矿.

2014年提出的空间证明-ProofofSpace,PoSp-[42]和2017年提出的有益工作证明-ProofofUsefulWork,PoUW-[43]也是为解决PoW的能耗问题而提出的共识算法.PoSp共识要求矿工必须出具一定数量的磁盘空间-而非算力-来挖矿,而PoUW则将PoW共识中毫无意义的SHA256哈希运算转变为实际场景中既困难又有价值的运算,例如计算正交向量问题、3SUM问题、最短路径问题等.

4.4主线四:传统分布式一致性算法的改进及其它

传统分布式一致性算法大多是非拜占庭容错的,因而难以应用于区块链场景-特别是公有链-.为此,克里斯托弗·科普兰-ChristopherCopeland-等结合Raft和PBFT算法的优势,于2014年提出拜占庭容错的Tangaroa算法[44].Tangaroa继承了Raft简洁和容易理解的优势,同时在拜占庭错误环境下也能够维持安全性、容错性和活性.受Tangaroa共识启发,2016年Github平台的Juno项目提出一种拜占庭容错的Raft算法,此后该算法演变为一种称为ScalableBFT[45]的专用拜占庭容错协议,能够实现比Tangaroa和Juno更好的性能.

2015年,Stellar.org首席科学官D***idMazieres教授提出了恒星共识协议-StellarConsensusProtocol,SCP-[46].SCP在联邦拜占庭协议和Ripple协议的基础上演化而来的,是第一个可证明安全的共识机制,具有分散控制、低延迟、灵活信任和渐进安全四个关键属性.同年,超级账本的锯齿湖项目将Ripple和SCP共识相结合,提出了法定人数投票-Quorumvoting-共识算法,以应对那些需要即时交易最终性的应用场景.2016年,中国区块链社区NEO-原名小蚁-提出一种改进的拜占庭容错算法dBFT,该算法在PBFT的基础上借鉴了PoS设计思路,首先按照节点的权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识.该算法改进了PoW和PoS缺乏最终一致性的问题,使得区块链能够适用于金融场景.

2016年,图灵奖得主、MIT教授SivioMicali提出了一种称为AlgoRand[47]的快速拜占庭容错共识算法.该算法利用密码抽签技术选择共识过程的验证者和领导者,并通过其设计的BA*拜占庭容错协议对新区块达成共识.AlgoRand只需极小计算量且极少分叉,被认为是真正民主和高效的分布式账本共识技术.

2017年,康奈尔大学提出了一种称为SleepyConsensus-休眠共识-的新算法[48].这种共识针对的是互联网环境下大规模的共识节点中可能多数都处于离线状态,仅有少数节点在线参与共识过程的实际情况.该研究证明,传统共识算法无法在这种环境下保证共识的安全性.而***用休眠共识算法,只要在线诚实节点的数量超过故障节点的数量,即可保证安全性和鲁棒性.

综上所述,区块链共识算法的演进历史如图2所示,表1则给出了每一种共识算法的提出时间、拜占庭容错性能、基础算法以及具有代表性的应用系统或平台.

5总结与展望

共识算法是区块链系统的关键要素之一,已成为当前信息领域的一个新的研究热点.本文对目前已经提出的32种主流区块链共识算法进行了系统性的梳理与分析.需要说明的是,由于近年来共识算法研究发展较快,本文讨论的共识算法可能仅为实际共识算法的一个子集,尚存在若干新兴或者小众的共识算法未加以讨论,同时一些较新的共识算法仍在不断试错和优化阶段.本文工作可望为后续的研究与应用提供有益的启发与借鉴.

以目前的研究现状而言[49][50],区块链共识算法的未来研究趋势将主要侧重于区块链共识算法性能评估、共识算法-激励机制的适配优化、以及新型区块链结构下的共识创新三个方面.

首先,区块链共识算法在经历过一段百花齐放式的探索和创新之后,势必会趋向于收敛到新共识算法的性能评估和标准化方面的研究.目前,共识算法的评价指标各异,但一般均侧重于社会学角度的公平性和去中心化程度,经济学角度的能耗、成本与参与者的激励相容性,以及计算机科学角度的可扩展性-交易吞吐量、节点可扩展等-、容错性和安全性等.如何结合具体需求和应用场景[51][52],自适应地实现针对特定性能评价目标的共识机制设计与算法优化,将是未来研究的热点之一.

区块链技术发展现状与展望

区块链技术发展现状与展望
区块链技术起源于2008年由化名为 “中本聪” (Satoshi Nakamoto)的学者在密码学邮件组发表的奠基性论文《比特币:一种点对点电子现金系统》。近两年来,区块链技术的研究与应用呈现出爆发式增长态势,被认为是继大型机、个人电脑、互联网、移动/社交网络之后计算范式的第五次颠覆式创新,是人类信用进化史上继血亲信用、贵金属信用、央行纸币信用之后的第四个里程碑。区块链技术是下一代云计算的雏形,有望像互联网一样彻底重塑人类社会活动形态,并实现从目前的信息互联网向价值互联网的转变。区块链的技术特点

区块链具有去中心化、时序数据、集体维护、可编程和安全可信等特点。 去中心化:区块链数据的验证、记账、存储、维护和传输等过程均是基于分布式系统结构,***用纯数学方法而不是中心机构来建立分布式节点间的信任关系,从而形成去中心化的可信任的分布式系统; 时序数据:区块链***用带有时间戳的链式区块结构存储数据,从而为数据增加了时间维度,具有极强的可验证性和可追溯性; 集体维护:区块链系统***用特定的经济激励机制来保证分布式系统中所有节点均可参与数据区块的验证过程(如比特币的“挖矿”过程),并通过共识算法来选择特定的节点将新区块添加到区块链; 可编程:区块链技术可提供灵活的脚本代码系统,支持用户创建高级的智能合约、货币或其它去中心化应用; 安全可信:区块链技术***用非对称密码学原理对数据进行加密,同时借助分布式系统各节点的工作量证明等共识算法形成的强大算力来抵御外部攻击、保证区块链数据不可篡改和不可伪造,因而具有较高的安全性。区块链与比特币 比特币是迄今为止最为成功的区块链应用场景,区块链技术为比特币系统解决了数字加密货币领域长期以来所必需面对的双重支付问题和拜占庭将军问题。与传统中心机构(如中央银行)的信用背书机制不同的是,比特币区块链形成的是软件定义的信用,这标志着中心化的国家信用向去中心化的算法信用的根本性变革。近年来,比特币凭借其先发优势,目前已经形成体系完备的涵盖发行、流通和金融衍生市场的生态圈与产业链,这也是其长期占据绝大多数数字加密货币市场份额的主要原因。区块链的发展脉络与趋势
区块链技术是具有普适性的底层技术框架,可以为金融、经济、科技甚至政治等各领域带来深刻变革。按照目前区块链技术的发展脉络,区块链技术将会经历以可编程数字加密货币体系为主要特征的区块链1.0模式,以可编程金融系统为主要特征的区块链2.0模式和以可编程社会为主要特征的区块链3.0模式。然而,上述模式实际上是平行而非演进式发展的,区块链1.0模式的数字加密货币体系仍然远未成熟,距离其全球货币一体化的愿景实际上更远、更困难。目前,区块链领域已经呈现出明显的技术和产业创新驱动的发展态势,相关学术研究严重滞后、亟待跟进。区块链的基础模型与关键技术
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等技术;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。区块链技术的应用场景
区块链技术不仅可以成功应用于数字加密货币领域,同时在经济、金融和社会系统中也存在广泛的应用场景。根据区块链技术应用的现状,本文将区块链目前的主要应用笼统地归纳为数字货币、数据存储、数据鉴证、金融交易、资产管理和选举投票共六个场景:数字货币:以比特币为代表,本质上是由分布式网络系统生成的数字货币,其发行过程不依赖特定的中心化机构。数据存储:区块链的高冗余存储、去中心化、高安全性和隐私保护等特点使其特别适合存储和保护重要隐私数据,以避免因中心化机构遭受攻击或权限管理不当而造成的大规模数据丢失或泄露。数据鉴证:区块链数据带有时间戳、由共识节点共同验证和记录、不可篡改和伪造,这些特点使得区块链可广泛应用于各类数据公证和审计场景。例如,区块链可以永久地安全存储由***机构核发的各类许可证、登记表、执照、证明、认证和记录等。金融交易:区块链技术与金融市场应用有非常高的契合度。区块链可以在去中心化系统中自发地产生信用,能够建立无中心机构信用背书的金融市场,从而在很大程度上实现了“金融脱媒”;同时利用区块链自动化智能合约和可编程的特点,能够极大地降低成本和提高效率。资产管理:区块链能够实现有形和无形资产的确权、授权和实时监控。无形资产管理方面已经广泛应用于知识产权保护、域名管理、积分管理等领域;有形资产管理方面则可结合物联网技术形成“数字智能资产”,实现基于区块链的分布式授权与控制。选举投票:区块链可以低成本高效地实现政治选举、企业股东投票等应用,同时基于投票可广泛应用于***、预测市场和社会制造等领域。区块链技术的现存问题
安全性威胁是区块链迄今为止所面临的最重要的问题。其中,基于PoW共识过程的区块链主要面临的是51%攻击问题,即节点通过掌握全网超过51%的算力就有能力成功篡改和伪造区块链数据。其他问题包括新兴计算技术破解非对称加密机制的潜在威胁和隐私保护问题等。 区块链效率也是制约其应用的重要因素。区块链要求系统内每个节点保存一份数据备份,这对于日益增长的海量数据存储来说是极为困难的。虽然轻量级节点可部分解决此问题,但适用于更大规模的工业级解决方案仍有待研发。比特币区块链目前每秒仅能处理7笔交易,且交易确认时间一般为10分钟,这极大地限制了区块链在大多数金融系统高频交易场景中的应用。 PoW共识过程高度依赖区块链网络节点贡献的算力,这些算力主要用于解决SHA256哈希和随机数搜索,除此之外并不产生任何实际社会价值,因而一般意义上认为这些算力***是被“浪费”掉了,同时被浪费掉的还有大量的电力***。如何能有效汇集分布式节点的网络算力来解决实际问题,是区块链技术需要解决的重要问题。 区块链网络作为去中心化的分布式系统,其各节点在交互过程中不可避免地会存在相互竞争与合作的博弈关系,例如比特币矿池的区块截留攻击博弈等。区块链共识过程本质上是众包过程,如何设计激励相容的共识机制,使得去中心化系统中的自利节点能够自发地实施区块数据的验证和记账工作,并提高系统内非理性行为的成本以抑制安全性攻击和威胁,是区块链有待解决的重要科学问题。智能合约与区块链技术
智能合约是一组情景-应对型的程序化规则和逻辑,是部署在区块链上的去中心化、可信共享的程序代码。通常情况下,智能合约经各方签署后,以程序代码的形式附着在区块链数据(例如一笔比特币交易)上,经P2P网络传播和节点验证后记入区块链的特定区块中。智能合约封装了预定义的若干状态及转换规则、触发合约执行的情景(如到达特定时间或发生特定***等)、特定情景下的应对行动等。区块链可实时监控智能合约的状态,并通过核查外部数据源、确认满足特定触发条件后激活并执行合约。 智能合约对于区块链技术来说具有重要的意义。一方面,智能合约是区块链的激活器,为静态的底层区块链数据赋予了灵活可编程的机制和算法,并为构建区块链2.0和3.0时代的可编程金融系统与社会系统奠定了基础;另一方面,智能合约的自动化和可编程特性使其可封装分布式区块链系统中各节点的复杂行为,成为区块链构成的虚拟世界中的软件代理机器人,这有助于促进区块链技术在各类分布式人工智能系统中的应用,使得基于区块链技术构建各类去中心化应用(Decentralized application, D***)、去中心化自治组织(Decentralized Autonomous Organization, DAO)、去中心化自治公司(Decentralized Autonomous Corporation, DAC)甚至去中心化自治社会(Decentralized Autonomous Society, DAS)成为可能。 区块链和智能合约技术的主要发展趋势是由自动化向智能化方向演化。现存的各类智能合约及其应用的本质逻辑大多仍是根据预定义场景的“ IF-THEN”类型的条件响应规则,能够满足目前自动化交易和数据处理的需求。未来的智能合约应具备根据未知场景的“ WHAT-IF”推演、计算实验和一定程度上的自主决策功能,从而实现由目前“自动化”合约向真正的“智能”合约的飞跃。区块链驱动的平行社会
近年来,基于CPSS(Cyber-Physical-SocialSystems)的平行社会已现端倪,其核心和本质特征是虚实互动与平行演化。区块链是实现CPSS平行社会的基础架构之一,其主要贡献是为分布式社会系统和分布式人工智能研究提供了一套行之有效的去中心化的数据结构、交互机制和计算模式,并为实现平行社会奠定了坚实的数据基础和信用基础。 就数据基础而言,管理学家爱德华戴明曾说过:除了上帝,所有人必须以数据说话。然而在中心化社会系统中,数据通常掌握在***和大型企业等“少数人”手中,为少数人“说话”,其公正性、权威性甚至安全性可能都无法保证。区块链数据则通过高度冗余的分布式节点存储,掌握在“所有人”手中,能够做到真正的“数据民主”。就信用基础而言,中心化社会系统因其高度工程复杂性和社会复杂性而不可避免地会存在“默顿系统”的特性,即不确定性、多样性和复杂性,社会系统中的中心机构和规则制定者可能会因个体利益而出现失信行为;区块链技术有助于实现软件定义的社会系统,其基本理念就是剔除中心化机构、将不可预测的行为以智能合约的程序化代码形式提前部署和固化在区块链数据中,事后不可伪造和篡改并自动化执行,从而在一定程度上能够将“默顿”社会系统转化为可全面观察、可主动控制、可精确预测的“牛顿”社会系统。 ACP(人工社会Artificial Societies、计算实验Computational Experiments和平行执行ParallelExecution)方法是迄今为止平行社会管理领域唯一成体系化的、完整的研究框架,是复杂性科学在新时代平行社会环境下的逻辑延展和创新。 ACP方法可以自然地与区块链技术相结合,实现区块链驱动的平行社会管理。首先,区块链的P2P 组网、分布式共识协作和基于贡献的经济激励等机制本身就是分布式社会系统的自然建模,其中每个节点都将作为分布式系统中的一个自主和自治的智能体(agent)。随着区块链生态体系的完善,区块链各共识节点和日益复杂与自治的智能合约将通过参与各种形式的D***,形成特定组织形式的DAC和DAO,最终形成DAS,即ACP中的人工社会。其次,智能合约的可编程特性使得区块链可进行各种“ WHAT-IF” 类型的虚拟实验设计、场景推演和结果评估,通过这种计算实验过程获得并自动或半自动地执行最优决策。最后,区块链与物联网等相结合形成的智能资产使得联通现实物理世界和虚拟网络空间成为可能,并可通过真实和人工社会系统的虚实互动和平行调谐实现社会管理和决策的协同优化。不难预见,未来现实物理世界的实体资产都登记为链上智能资产的时候,就是区块链驱动的平行社会到来之时。

区块链技术中的共识算法?

关于区块链技术的一些讲解和知识点分析我们已经给大家分享过很多次了。今天,昌平镇j***a课程就再来了解一下,区块链技术中的共识算法的一些基本定义与特点。



简单过一下区块链


我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个简单的雏形


通俗讲解共识


所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。共识,是一种规则。


继续我们的会议例子。参与会议的人,通过开会的方式来达到谈论解决问题。


对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持一致。让账本保持一致的深入一层意思就是,让链中区块信息保持一致。


为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。区块链没了共识的规则,各个节点各干各的,失去一致的意义。


这两个例子的对应的关系如下:


会议的人=挖矿的矿工


开会=共识方式(算法)


谈论解决问题=让自己的账本跟其他节点的账本保持一致


如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。


共识算法


目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致的共识方式(算法)有如下几种:


PoW,代表者是比特币(BTC)


弊端:


矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。


存在巨大的算力浪费,看看矿池消耗大量的电力***,随着难度增加,挖出的不够付电费


PoS,代表者是以太坊(ETH),从PoW过度到PoS


弊端:


破坏者对网络的攻击成本很低,拥有代币就能竞争


另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性。


区块链技术的发展

想要了解区块链技术的发展,首先大家需要了解一下什么是区块链。

区块链其实不难理解,“区块链”是一个信息技术领域的术语。从本质上讲,他和互联网一样,是一个数据的传输方式。 只不过区块链进行了升级与创新,***了很多新型技术,例如密码学、分布式储存、智能合约、共识算法等等,使其具备独特的优势。

它也可以看作是一个集群的数据库 ,储存于其中的信息和数据,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。

区块链虽然起源于比特币,但从区块链本质上来讲,也是这些互联网协议中的一种,可以说是对现有的互联网协议进行创新的一种新的数据间的传输方法。它的优势则是,可以以数据的传输作为基础,改变现有传统模式中以第三方为中心的信任背书模式。

区块链独一无二的地方就是其去中心化的特点,这也是区块链最重要的一个特点,而所谓的去中心化,就是把这个中心去掉,使原来属于中心化角色的权利分散化,用户之间能自由的进行点对点交易。

区块链 --- 共识算法

PoW算法是一种防止分布式服务***被滥用、拒绝服务攻击的机制。它要求节点进行适量消耗时间和***的复杂运算,并且其运算结果能被其他节点快速验算,以耗用时间、能源做担保,以确保服务与***被真正的需求所使用。

PoW算法中最基本的技术原理是使用哈希算法。***设求哈希值Hash(r),若原始数据为r(raw),则运算结果为R(Result)。

R = Hash(r)

哈希函数Hash()的特性是,对于任意输入值r,得出结果R,并且无法从R反推回r。当输入的原始数据r变动1比特时,其结果R值完全改变。在比特币的PoW算法中,引入算法难度d和随机值n,得到以下公式:

Rd = Hash(r+n)

该公式要求在填入随机值n的情况下,计算结果Rd的前d字节必须为0。由于哈希函数结果的未知性,每个矿工都要做大量运算之后,才能得出正确结果,而算出结果广播给全网之后,其他节点只需要进行一次哈希运算即可校验。PoW算法就是***用这种方式让计算消耗***,而校验仅需一次。

?

PoS算法要求节点验证者必须质押一定的资金才有挖矿打包资格,并且区域链系统在选定打包节点时使用随机的方式,当节点质押的资金越多时,其被选定打包区块的概率越大。

POS模式下,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。这个时候,如果你验证了一个POS区块,你的币龄就会被清空为0,同时从区块中获得相对应的数字货币利息

节点通过PoS算法出块的过程如下:普通的节点要成为出块节点,首先要进行资产的质押,当轮到自己出块时,打包区块,然后向全网广播,其他验证节点将会校验区块的合法性。

?

DPoS算法和PoS算法相似,也***用股份和权益质押。

但不同的是,DPoS算法***用委托质押的方式,类似于用全民选举代表的方式选出N个超级节点记账出块。

选民把自己的选票投给某个节点,如果某个节点当选记账节点,那么该记账节点往往在获取出块奖励后,可以***用任意方式来回报自己的选民。

这N个记账节点将轮流出块,并且节点之间相互监督,如果其作恶,那么会被扣除质押金。

通过信任少量的诚信节点,可以去除区块签名过程中不必要的步骤,提高了交易的速度。
?

拜占庭问题:

拜占庭是古代东罗马帝国的首都,为了防御在每块封地都驻扎一支由单个将军带领的军队,将军之间只能靠信差传递消息。在战争时,所有将军必须达成共识,决定是否共同开战。

但是,在军队内可能有叛徒,这些人将影响将军们达成共识。拜占庭将军问题是指在已知有将军是叛徒的情况下,剩余的将军如何达成一致决策的问题。

BFT:

BFT即拜占庭容错,拜占庭容错技术是一类分布式计算领域的容错技术。拜占庭***设是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常行为,并满足所要解决的问题的规范要求。

拜占庭容错系统

发生故障的节点被称为 拜占庭节点 ,而正常的节点即为 非拜占庭节点

***设分布式系统拥有n台节点,并***设整个系统拜占庭节点不超过m台(n ≥ 3m + 1),拜占庭容错系统需要满足如下两个条件:

另外,拜占庭容错系统需要达成如下两个指标:

PBFT即实用拜占庭容错算法,解决了原始拜占庭容错算法效率不高的问题,算法的时间复杂度是O(n^2),使得在实际系统应用中可以解决拜占庭容错问题
?

PBFT是一种状态机副本***算法,所有的副本在一个视图(view)轮换的过程中操作,主节点通过视图编号以及节点数***来确定,即:主节点 p = v mod |R|。v:视图编号,|R|节点个数,p:主节点编号。

PBFT算法的共识过程如下:客户端(Client)发起消息请求(request),并广播转发至每一个副本节点(Replica),由其中一个主节点(Leader)发起提案消息pre-prepare,并广播。其他节点获取原始消息,在校验完成后发送prepare消息。每个节点收到2f+1个prepare消息,即认为已经准备完毕,并发送commit消息。当节点收到2f+1个commit消息,客户端收到f+1个相同的reply消息时,说明客户端发起的请求已经达成全网共识。

具体流程如下

客户端c向主节点p发送<REQUEST, o, t, c>请求。o: 请求的具体操作,t: 请求时客户端追加的时间戳,c:客户端标识。REQUEST: 包含消息内容m,以及消息摘要d(m)。客户端对请求进行签名。

主节点收到客户端的请求,需要进行以下交验:

a. 客户端请求消息签名是否正确。

非法请求丢弃。正确请求,分配一个编号n,编号n主要用于对客户端的请求进行排序。然后广播一条<<PRE-PREPARE, v, n, d>, m>消息给其他副本节点。v:视图编号,d客户端消息摘要,m消息内容。<PRE-PREPARE, v, n, d>进行主节点签名。n是要在某一个范围区间内的[h, H],具体原因参见 垃圾回收 章节。

副本节点i收到主节点的PRE-PREPARE消息,需要进行以下交验:

a. 主节点PRE-PREPARE消息签名是否正确。

b. 当前副本节点是否已经收到了一条在同一v下并且编号也是n,但是签名不同的PRE-PREPARE信息。

c. d与m的摘要是否一致。

d. n是否在区间[h, H]内。

非法请求丢弃。正确请求,副本节点i向其他节点包括主节点发送一条<PREPARE, v, n, d, i>消息, v, n, d, m与上述PRE-PREPARE消息内容相同,i是当前副本节点编号。<PREPARE, v, n, d, i>进行副本节点i的签名。记录PRE-PREPARE和PREPARE消息到log中,用于View Change过程中恢复未完成的请***作。

主节点和副本节点收到PREPARE消息,需要进行以下交验:

a. 副本节点PREPARE消息签名是否正确。

b. 当前副本节点是否已经收到了同一视图v下的n。

c. n是否在区间[h, H]内。

d. d是否和当前已收到PRE-PPREPARE中的d相同

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的PREPARE消息,则向其他节点包括主节点发送一条<COMMIT, v, n, d, i>消息,v, n, d, i与上述PREPARE消息内容相同。<COMMIT, v, n, d, i>进行副本节点i的签名。记录COMMIT消息到日志中,用于View Change过程中恢复未完成的请***作。记录其他副本节点发送的PREPARE消息到log中。

主节点和副本节点收到COMMIT消息,需要进行以下交验:

a. 副本节点COMMIT消息签名是否正确。

b. 当前副本节点是否已经收到了同一视图v下的n。

c. d与m的摘要是否一致。

d. n是否在区间[h, H]内。

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的COMMIT消息,说明当前网络中的大部分节点已经达成共识,运行客户端的请***作o,并返回<REPLY, v, t, c, i, r>给客户端,r:是请***作结果,客户端如果收到f+1个相同的REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给主节点。记录其他副本节点发送的COMMIT消息到log中。
?

如果主节点作恶,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续。备份节点应当有职责来主动检查这些序号的合法性。

如果主节点掉线或者作恶不广播客户端的请求,客户端设置超时机制,超时的话,向所有副本节点广播请求消息。副本节点检测出主节点作恶或者下线,发起View Change协议。

View Change协议

副本节点向其他节点广播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的编号, C 2f+1验证过的CheckPoint消息***, P 是当前副本节点未完成的请求的PRE-PREPARE和PREPARE消息***。

当主节点p = v + 1 mod |R|收到 2f 个有效的VIEW-CHANGE消息后,向其他节点广播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息***。 O 是主节点重新发起的未经完成的PRE-PREPARE消息***。PRE-PREPARE消息***的选取规则:

副本节点收到主节点的NEW-VIEW消息,验证有效性,有效的话,进入v+1状态,并且开始 O 中的PRE-PREPARE消息处理流程。
?

在上述算法流程中,为了确保在View Change的过程中,能够恢复先前的请求,每一个副本节点都记录一些消息到本地的log中,当执行请求后副本节点需要把之前该请求的记录消息清除掉。

最简单的做法是在Reply消息后,再执行一次当前状态的共识同步,这样做的成本比较高,因此可以在执行完多条请求K(例如:100条)后执行一次状态同步。这个状态同步消息就是CheckPoint消息。

副本节点i发送<CheckPoint, n, d, i>给其他节点,n是当前节点所保留的最后一个视图请求编号,d是对当前状态的一个摘要,该CheckPoint消息记录到log中。如果副本节点i收到了2f+1个验证过的CheckPoint消息,则清除先前日志中的消息,并以n作为当前一个stable checkpoint。

这是理想情况,实际上当副本节点i向其他节点发出CheckPoint消息后,其他节点还没有完成K条请求,所以不会立即对i的请求作出响应,它还会按照自己的节奏,向前行进,但此时发出的CheckPoint并未形成stable。

为了防止i的处理请求过快,设置一个上文提到的 高低水位区间[h, H] 来解决这个问题。低水位h等于上一个stable checkpoint的编号,高水位H = h + L,其中L是我们指定的数值,等于checkpoint周期处理请求数K的整数倍,可以设置为L = 2K。当副本节点i处理请求超过高水位H时,此时就会停止脚步,等待stable checkpoint发生变化,再继续前进。
?

在区块链场景中,一般适合于对强一致性有要求的私有链和联盟链场景。例如,在IBM主导的区块链超级账本项目中,PBFT是一个可选的共识协议。在Hyperledger的Fabric项目中,共识模块被设计成可插拔的模块,支持像PBFT、Raft等共识算法。
?

?

Raft基于领导者驱动的共识模型,其中将选举一位杰出的领导者(Leader),而该Leader将完全负责管理集群,Leader负责管理Raft集群的所有节点之间的***日志。
?

下图中,将在启动过程中选择集群的Leader(S1),并为来自客户端的所有命令/请求提供服务。 Raft集群中的所有节点都维护一个分布式日志(***日志)以存储和提交由客户端发出的命令(日志条目)。 Leader接受来自客户端的日志条目,并在Raft集群中的所有关注者(S2,S3,S4,S5)之间***它们。

在Raft集群中,需要满足最少数量的节点才能提供预期的级别共识保证, 这也称为法定人数。 在Raft集群中执行操作所需的最少投票数为 (N / 2 +1) ,其中N是组中成员总数,即 投票至少超过一半 ,这也就是为什么集群节点通常为奇数的原因。 因此,在上面的示例中,我们至少需要3个节点才能具有共识保证。

如果法定仲裁节点由于任何原因不可用,也就是投票没有超过半数,则此次协商没有达成一致,并且无法提交新日志。

?

数据存储:Tidb/TiKV

日志:阿里巴巴的 DLedger

服务发现:Consul& etcd

集群调度:HashiCorp Nomad
?

只能容纳故障节点(CFT),不容纳作恶节点

顺序投票,只能串行***ly,因此高并发场景下性能差
?

Raft通过解决围绕Leader选举的三个主要子问题,管理分布式日志和算法的安全性功能来解决分布式共识问题。

当我们启动一个新的Raft集群或某个领导者不可用时,将通过集群中所有成员节点之间协商来选举一个新的领导者。 因此,在给定的实例中,Raft集群的节点可以处于以下任何状态: 追随者(Follower),候选人(Candidate)或领导者(Leader)。

系统刚开始启动的时候,所有节点都是follower,在一段时间内如果它们没有收到Leader的心跳信号,follower就会转化为Candidate;

如果某个Candidate节点收到大多数节点的票,则这个Candidate就可以转化为Leader,其余的Candidate节点都会回到Follower状态;

一旦一个Leader发现系统中存在一个Leader节点比自己拥有更高的任期(Term),它就会转换为Follower。

Raft使用基于心跳的RPC机制来检测何时开始新的选举。 在正常期间, Leader 会定期向所有可用的 Follower 发送心跳消息(实际中可能把日志和心跳一起发过去)。 因此,其他节点以 Follower 状态启动,只要它从当前 Leader 那里收到周期性的心跳,就一直保持在 Follower 状态。

Follower 达到其超时时间时,它将通过以下方式启动选举程序:

根据 Candidate 从集群中其他节点收到的响应,可以得出选举的三个结果。

共识算法的实现一般是基于***状态机(Replicated state machines),何为 ***状态机

简单来说: 相同的初识状态 + 相同的输入 = 相同的结束状态 。不同节点要以相同且确定性的函数来处理输入,而不要引入一下不确定的值,比如本地时间等。使用replicated log是一个很不错的注意,log具有持久化、保序的特点,是大多数分布式系统的基石。

有了Leader之后,客户端所有并发的请求可以在Leader这边形成一个有序的日志(状态)序列,以此来表示这些请求的先后处理顺序。Leader然后将自己的日志序列发送Follower,保持整个系统的全局一致性。注意并不是强一致性,而是 最终一致性

日志由有序编号(log index)的日志条目组成。每个日志条目包含它被创建时的任期号(term),和日志中包含的数据组成,日志包含的数据可以为任何类型,从简单类型到区块链的区块。每个日志条目可以用[ term, index, data]序列对表示,其中term表示任期, index表示索引号,data表示日志数据。

Leader 尝试在集群中的大多数节点上执行***命令。 如果***成功,则将命令提交给集群,并将响应发送回客户端。类似两阶段提交(2PC),不过与2PC的区别在于,leader只需要超过一半节点同意(处于工作状态)即可。

leader follower 都可能crash,那么 follower 维护的日志与 leader 相比可能出现以下情况

当出现了leader与follower不一致的情况,leader强制follower***自己的log, Leader会从后往前试 ,每次***endEntries失败后尝试前一个日志条目(递减nextIndex值), 直到成功找到每个Follower的日志一致位置点(基于上述的两条保证),然后向后逐条覆盖Followers在该位置之后的条目 。所以丢失的或者多出来的条目可能会持续多个任期。
?

要求候选人的日志至少与其他节点一样最新。如果不是,则跟随者节点将不投票给候选者。

意味着每个提交的条目都必须存在于这些服务器中的至少一个中。如果候选人的日志至少与该多数日志中的其他日志一样最新,则它将保存所有已提交的条目,避免了日志回滚***的发生。

即任一任期内最多一个leader被选出。这一点非常重要,在一个***集中任何时刻只能有一个leader。系统中同时有多余一个leader,被称之为脑裂(brain split),这是非常严重的问题,会导致数据的覆盖丢失。在raft中,两点保证了这个属性:

因此, 某一任期内一定只有一个leader
?

当集群中节点的状态发生变化(集群配置发生变化)时,系统容易受到系统故障。 因此,为防止这种情况,Raft使用了一种称为两阶段的方法来更改集群成员身份。 因此,在这种方法中,集群在实现新的成员身份配置之前首先更改为中间状态(称为联合共识)。 联合共识使系统即使在配置之间进行转换时也可用于响应客户端请求,它的主要目的是提升分布式系统的可用性。

区块链的共识机制

一、区块链共识机制的目标

区块链是什么?简单而言,区块链是一种去中心化的数据库,或可以叫作分布式账本(distributed ledger)。传统上所有的数据库都是中心化的,例如一间银行的账本就储存在银行的中心服务器里。中心化数据库的弊端是数据的安全及正确性全系于数据库运营方(即银行),因为任何能够访问中心化数据库的人(如银行职员或黑客)都可以破坏或修改其中的数据。


而区块链技术则容许数据库存放在全球成千上万的电脑上,每个人的账本通过点对点网络进行同步,网络中任何用户一旦增加一笔交易,交易信息将通过网络通知其他用户验证,记录到各自的账本中。区块链之所以得其名是因为它是由一个个包含交易信息的区块(block)从后向前有序链接起来的数据结构。


很多人对区块链的疑问是,如果每一个用户都拥有一个独立的账本,那么是否意味着可以在自己的账本上添加任意的交易信息,而成千上万个账本又如何保证记账的一致性? 解决记账一致性问题正是区块链共识机制的目标 。区块链共识机制旨在保证分布式系统里所有节点中的数据完全相同并且能够对某个提案(proposal)(例如是一项交易纪录)达成一致。然而分布式系统由于引入了多个节点,所以系统中会出现各种非常复杂的情况;随着节点数量的增加,节点失效或故障、节点之间的网络通信受到干扰甚至阻断等就变成了常见的问题,解决分布式系统中的各种边界条件和意外情况也增加了解决分布式一致性问题的难度。


区块链又可分为三种:


公有链:全世界任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化“的,因为没有任何人或机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制鼓励参与者竞争记账,来确保数据的安全性。


联盟链:联盟链是指有若干个机构共同参与管理的区块链。每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。这类区块链被认为是“部分去中心化”。


私有链:指其写入权限是由某个组织和机构控制的区块链。参与节点的资格会被严格的限制,由于参与的节点是有限和可控的,因此私有链往往可以有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击、并且能够做到身份认证等金融行业必须的要求。相比中心化数据库,私有链能够防止机构内单节点故意隐瞒或篡改数据。即使发生错误,也能够迅速发现来源,因此许多大型金融机构在目前更加倾向于使用私有链技术。

二、区块链共识机制的分类

解决分布式一致性问题的难度催生了数种共识机制,它们各有其优缺点,亦适用于不同的环境及问题。被众人常识的共识机制有:


l PoW(Proof of Work)工作量证明机制

l PoS(Proof of Stake)股权/权益证明机制

l DPoS(Delegated Proof of Stake)股份授权证明机制

l PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法

l DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法

l SCP (Stellar Consensus Protocol ) 恒星共识协议

l RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法

l Pool验证池共识机制


(一)PoW(Proof of Work)工作量证明机制


1. 基本介绍


在该机制中,网络上的每一个节点都在使用SHA256哈希函数(hash function) 运算一个不断变化的区块头的哈希值 (hash sum)。 共识要求算出的值必须等于或小于某个给定的值。 在分布式网络中,所有的参与者都需要使用不同的随机数来持续计算该哈希值,直至达到目标为止。当一个节点的算出确切的值,其他所有的节点必须相互确认该值的正确性。之后新区块中的交易将被验证以防欺诈。


在比特币中,以上运算哈希值的节点被称作“矿工”,而PoW的过程被称为“挖矿”。挖矿是一个耗时的过程,所以也提出了相应的激励机制(例如向矿工授予一小部分比特币)。PoW的优点是完全的去中心化,其缺点是消耗大量算力造成了的***浪费,达成共识的周期也比较长,共识效率低下,因此其不是很适合商业使用。



2. 加密货币的应用实例


比特币(Bitcoin) 及莱特币(Litecoin)。以太坊(Ethereum) 的前三个阶段(Frontier前沿、Homestead家园、Metropolis大都会)皆***用PoW机制,其第四个阶段 (Serenity宁静) 将***用权益证明机制。PoW适用于公有链。


PoW机制虽然已经成功证明了其长期稳定和相对公平,但在现有框架下,***用PoW的“挖矿”形式,将消耗大量的能源。其消耗的能源只是不停的去做SHA256的运算来保证工作量公平,并没有其他的存在意义。而目前BTC所能达到的交易效率为约5TPS(5笔/秒),以太坊目前受到单区块GAS总额的上限,所能达到的交易频率大约是25TPS,与平均千次每秒、峰值能达到万次每秒处理效率的VISA和MASTERCARD相差甚远。


3. 简图理解模式



(ps:其中A、B、C、D计算哈希值的过程即为“挖矿”,为了犒劳时间成本的付出,机制会以一定数量的比特币作为激励。)


(Ps:PoS模式下,你的“挖矿”收益正比于你的币龄(币的数量*天数),而与电脑的计算性能无关。我们可以认为任何具有概率***件的累计都是工作量证明,如淘金。***设矿石含金量为p% 质量, 当你得到一定量黄金时,我们可以认为你一定挖掘了1/p 质量的矿石。而且得到的黄金数量越多,这个证明越可靠。)


(二)PoS(Proof of Stake)股权/权益证明机制


1.基本介绍


PoS要求人们证明货币数量的所有权,其相信拥有货币数量多的人攻击网络的可能性低。基于账户余额的选择是非常不公平的,因为单一最富有的人势必在网络中占主导地位,所以提出了许多解决方案。


在股权证明机制中,每当创建一个区块时,矿工需要创建一个称为“币权”的交易,这个交易会按照一定比例预先将一些币发给矿工。然后股权证明机制根据每个节点持有代币的比例和时间(币龄), 依据算法等比例地降低节点的挖矿难度,以加快节点寻找随机数的速度,缩短达成共识所需的时间。


与PoW相比,PoS可以节省更多的能源,更有效率。但是由于挖矿成本接近于0,因此可能会遭受攻击。且PoS在本质上仍然需要网络中的节点进行挖矿运算,所以它同样难以应用于商业领域。



2.数字货币的应用实例


PoS机制下较为成熟的数字货币是点点币(Peercoin)和未来币(NXT),相比于PoW,PoS机制节省了能源,引入了" 币天 "这个概念来参与随机运算。PoS机制能够让更多的持币人参与到记账这个工作中去,而不需要额外购买设备(矿机、显卡等)。每个单位代币的运算能力与其持有的时间长成正相关,即持有人持有的代币数量越多、时间越长,其所能签署、生产下一个区块的概率越大。一旦其签署了下一个区块,持币人持有的币天即清零,重新进入新的循环。


PoS适用于公有链。


3.区块签署人的产生方式


在PoS机制下,因为区块的签署人由随机产生,则一些持币人会长期、大额持有代币以获得更大概率地产生区块,尽可能多的去清零他的"币天"。因此整个网络中的流通代币会减少,从而不利于代币在链上的流通,价格也更容易受到波动。由于可能会存在少量大户持有整个网络中大多数代币的情况,整个网络有可能会随着运行时间的增长而越来越趋向于中心化。相对于PoW而言,PoS机制下作恶的成本很低,因此对于分叉或是双重支付的攻击,需要更多的机制来保证共识。稳定情况下,每秒大约能产生12笔交易,但因为网络延迟及共识问题,需要约60秒才能完整广播共识区块。长期来看,生成区块(即清零"币天")的速度远低于网络传播和广播的速度,因此在PoS机制下需要对生成区块进行"限速",来保证主网的稳定运行。


4.简图理解模式




(PS:拥有越多“股份”权益的人越容易获取账权。是指获得多少货币,取决于你挖矿贡献的工作量,电脑性能越好,分给你的矿就会越多。)


(在纯POS体系中,如NXT,没有挖矿过程,初始的股权分配已经固定,之后只是股权在交易者之中流转,非常类似于现实世界的股票。)


(三)DPoS(Delegated Proof of Stake)股份授权证明机制


1.基本介绍


由于PoS的种种弊端,由此比特股首创的权益代表证明机制 DPoS(Delegated Proof of Stake)应运而生。DPoS 机制中的核心的要素是选举,每个系统原生代币的持有者在区块链里面都可以参与选举,所持有的代币余额即为投票权重。通过投票,股东可以选举出理事会成员,也可以就关系平台发展方向的议题表明态度,这一切构成了社区自治的基础。股东除了自己投票参与选举外,还可以通过将自己的选举票数授权给自己信任的其它账户来代表自己投票。


具体来说, DPoS由比特股(Bitshares)项目组发明。股权拥有着选举他们的代表来进行区块的生成和验证。DPoS类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表, 然后由这些代表负责生成和验证区块。 持币者若想称为一名代表,需先用自己的公钥去区块链注册,获得一个长度为32位的特有身份标识符,股东可以对这个标识符以交易的形式进行投票,得票数前101位被选为代表。

代表们轮流产生区块,收益(交易手续费)平分。DPoS的优点在于大幅减少了参与区块验证和记账的节点数量,从而缩短了共识验证所需要的时间,大幅提高了交易效率。从某种角度来说,DPoS可以理解为多中心系统,兼具去中心化和中心化优势。优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。缺点:投票积极性不高,绝大部分代币持有者未参与投票;另整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。


DPoS机制要求在产生下一个区块之前,必须验证上一个区块已经被受信任节点所签署。相比于PoS的" 全民挖矿 ",DPoS则是利用类似" 代表大会 "的制度来直接选取可信任节点,由这些可信任节点(即见证人)来代替其他持币人行使权力,见证人节点要求长期在线,从而解决了因为PoS签署区块人不是经常在线而可能导致的产块延误等一系列问题。 DPoS机制通常能达到万次每秒的交易速度,在网络延迟低的情况下可以达到十万秒级别,非常适合企业级的应用。 因为公信宝数据***对于数据交易频率要求高,更要求长期稳定性,因此DPoS是非常不错的选择。



2. 股份授权证明机制下的机构与系统


理事会是区块链网络的权力机构,理事会的人选由系统股东(即持币人)选举产生,理事会成员有权发起议案和对议案进行投票表决。


理事会的重要职责之一是根据需要调整系统的可变参数,这些参数包括:


l 费用相关:各种交易类型的费率

l 授权相关:对接入网络的第三方平台收费及补贴相关参数。

l 区块生产相关:区块生产间隔时间,区块奖励。

l 身份审核相关:审核验证异常机构账户的信息情况。

l 同时,关系到理事会利益的事项将不通过理事会设定。


在Finchain系统中,见证人负责收集网络运行时广播出来的各种交易并打包到区块中,其工作类似于比特币网络中的矿工,在***用 PoW(工作量证明)的比特币网络中,由一种获奖概率取决于哈希算力的抽***方式来决定哪个矿工节点产生下一个区块。而在***用 DPoS 机制的金融链网络中,通过理事会投票决定见证人的数量,由持币人投票来决定见证***选。入选的活跃见证人按顺序打包交易并生产区块,在每一轮区块生产之后,见证人会在随机洗牌决定新的顺序后进入下一轮的区块生产。


3. DPoS的应用实例


比特股(bitshares) ***用DPoS。DPoS主要适用于联盟链。


4.简图理解模式





(四)PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法


1. 基本介绍


PBFT是一种基于严格数学证明的算法,需要经过三个阶段的信息交互和局部共识来达成最终的一致输出。三个阶段分别为预备 (pre-prepare)、准备 (prepare)、落实 (commit)。PBFT算法证明系统中只要有2/3比例以上的正常节点,就能保证最终一定可以输出一致的共识结果。换言之,在使用PBFT算法的系统中,至多可以容忍不超过系统全部节点数量1/3的失效节点 (包括有意误导、故意破坏系统、超时、重复发送消息、伪造签名等的节点,又称为”拜占庭”节点)。



2. PBFT的应用实例


著名联盟链Hyperledger Fabric v0.6***用的是PBFT,v1.0又推出PBFT的改进版本SBFT。PBFT主要适用于私有链和联盟链。


3. 简图理解模式




上图显示了一个简化的PBFT的协议通信模式,其中C为客户端,0 – 3表示服务节点,其中0为主节点,3为故障节点。整个协议的基本过程如下:


(1) 客户端发送请求,激活主节点的服务操作;

(2) 当主节点接收请求后,启动三阶段的协议以向各从节点广播请求;

(a) 序号分配阶段,主节点给请求赋值一个序号n,广播序号分配消息和客户端的请求消息m,并将构造pre-prepare消息给各从节点;

(b) 交互阶段,从节点接收pre-prepare消息,向其他服务节点广播prepare消息;

(c) 序号确认阶段,各节点对视图内的请求和次序进行验证后,广播commit消息,执行收到的客户端的请求并给客户端响应。

(3) 客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果;



(五)DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法


1. 基本介绍


DBFT建基于PBFT的基础上,在这个机制当中,存在两种参与者,一种是专业记账的“超级节点”,一种是系统当中不参与记账的普通用户。普通用户基于持有权益的比例来投票选出超级节点,当需要通过一项共识(记账)时,在这些超级节点中随机推选出一名发言人拟定方案,然后由其他超级节点根据拜占庭容错算法(见上文),即少数服从多数的原则进行表态。如果超过2/3的超级节点表示同意发言人方案,则共识达成。这个提案就成为最终发布的区块,并且该区块是不可逆的,所有里面的交易都是百分之百确认的。如果在一定时间内还未达成一致的提案,或者发现有非法交易的话,可以由其他超级节点重新发起提案,重复投票过程,直至达成共识。



2. DBFT的应用实例


国内加密货币及区块链平台NEO是 DBFT算法的研发者及***用者。


3. 简图理解模式




***设系统中只有四个由普通用户投票选出的超级节点,当需要通过一项共识时,系统就会从代表中随机选出一名发言人拟定方案。发言人会将拟好的方案交给每位代表,每位代表先判断发言人的计算结果与它们自身纪录的是否一致,再与其它代表商讨验证计算结果是否正确。如果2/3的代表一致表示发言人方案的计算结果是正确的,那么方案就此通过。


如果只有不到2/3的代表达成共识,将随机选出一名新的发言人,再重复上述流程。这个体系旨在保护系统不受无法行使职能的领袖影响。


上图***设全体节点都是诚实的,达成100%共识,将对方案A(区块)进行验证。



鉴于发言人是随机选出的一名代表,因此他可能会不诚实或出现故障。上图***设发言人给3名代表中的2名发送了恶意信息(方案B),同时给1名代表发送了正确信息(方案A)。


在这种情况下该恶意信息(方案B)无法通过。中间与右边的代表自身的计算结果与发言人发送的不一致,因此就不能验证发言人拟定的方案,导致2人拒绝通过方案。左边的代表因接收了正确信息,与自身的计算结果相符,因此能确认方案,继而成功完成1次验证。但本方案仍无法通过,因为不足2/3的代表达成共识。接着将随机选出一名新发言人,重新开始共识流程。




上图***设发言人是诚实的,但其中1名代表出现了异常;右边的代表向其他代表发送了不正确的信息(B)。


在这种情况下发言人拟定的正确信息(A)依然可以获得验证,因为左边与中间诚实的代表都可以验证由诚实的发言人拟定的方案,达成2/3的共识。代表也可以判断到底是发言人向右边的节点说谎还是右边的节点不诚实。


(六)SCP (Stellar Consensus Protocol ) 恒星共识协议


1. 基本介绍


SCP 是 Stellar (一种基于互联网的去中心化全球支付协议) 研发及使用的共识算法,其建基于联邦拜占庭协议 (Federated Byzantine Agreement) 。传统的非联邦拜占庭协议(如上文的PBFT和DBFT)虽然确保可以通过分布式的方法达成共识,并达到拜占庭容错 (至多可以容忍不超过系统全部节点数量1/3的失效节点),它是一个中心化的系统 — 网络中节点的数量和身份必须提前知晓且验证过。而联邦拜占庭协议的不同之处在于它能够去中心化的同时,又可以做到拜占庭容错。


[…]


(七)RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法


1. 基本介绍


RPCA是Ripple(一种基于互联网的开源支付协议,可以实现去中心化的货币兑换、支付与清算功能)研发及使用的共识算法。在 Ripple 的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。


Ripple 的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为 UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。共识过程如下:


(1) 每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。

(2) 每个验证节点把自己的交易候选集作为提案发送给其他验证节点。

(3) 验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。

(4) 验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤(3)、步骤(4),直到阈值达到80%。

(5) 验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(last closed ledger),即账本最后(最新)的状态。


在Ripple的共识算法中,参与投票节点的身份是事先知道的,因此,算法的效率比PoW等匿名共识算法要高效,交易的确认时间只需几秒钟。这点也决定了该共识算法只适合于联盟链或私有链。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。



2. 简图理解模式


共识过程节点交互示意图:



共识算法流程:



(八)POOL验证池共识机制


Pool验证池共识机制是基于传统的分布式一致性算法(Paxos和Raft)的基础上开发的机制。Paxos算法是1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现。Raft则是在2013年发布的一个比Paxos简单又能实现Paxos所解决问题的一致性算法。Paxos和Raft达成共识的过程皆如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。而Pool验证池共识机制即是在这两种成熟的分布式一致性算法的基础上,辅之以数据验证的机制。