一文看懂区块链共识机制 | 内有赠书福利

SocialLending  2018-11-28  区块链/区块链Blockchain栏目  

  

  这一期,我们将推出《深入解析区块链共识机制》。

  毋庸置疑,共识是区块链运行的核心。

  从社群共识到系统共识设置,共识机制决定着激励方式,同时也决定着上层技术未来的搭建。今天,我们将打破POW、POS、DPOS等一系列冰冷的专业词汇,用更加通俗易懂的语言,从区块链共识的前世发端开始讲起,给大家深入介绍区块链共识机制。

  为了感谢广大读者和用户一直以来对Social Lending蜂巢星球的支持,只要您转发本文至朋友圈,截图发到微信后台,即有机会领取由张小猛著,机械工业出版社出版的畅销区块链读本《破冰区块链——原理,搭建与案例》。

  第三篇:《深入解析区块链共识机制》

  1、拜占庭将军问题及其分析

  拜占庭将军问题(The Byzantine Generals Problem),是由莱斯利·兰波特在其同名论文《拜占庭将军问题(The Byzantine Generals Problem)》中提出的分布式对等网络通信容错问题。

  关于拜占庭帝国的模型有很多版本,这里给大家讲一个比较容易理解的版本。

  5-15世纪,曾经有一个国家叫作“拜占庭帝国”。这个帝国有9名将军各自带领自己的军队,正在包围一座城池,准备攻陷这座城池。这座城池非常的坚固,攻克这个城池,必须要9个军队的同时发动攻击。就算是缺少一个军队的情况下发动进攻都可能导致进攻失败。

  因此,将军们必须达成要么“全军一起进攻”要么“全军一起撤退”的共识策略。无论怎么样的共识策略,都是以少数服从多数的。

  但是由于各军队处于包围城池的状态,因此不能用集中谈话的方式达成共识,而是通过本军队向各军队发送传令,表示“攻击”还是“撤退”信号。全部的传令发送和接收完成后,每个军队都可以结合自己的传令和其他另外8个军队的传令,通过少数服从多数的方式去做最终的决定。例如,如果“攻击”是5票,“撤退”是4票的话,全军一齐发动攻击。

  

  这里面是否会有问题呢?

  假如,这里面的有这样一个将军,如果这个将军对拜占庭帝国恨之入骨,一心希望这次作战失败。而此时,各个军队的传令都到达了你的手里,这个时候“攻击”是4票,“撤退”是4票,你的投票将最终决定是要“进攻”还是“撤退”。这个叛徒将军将会发送什么样的指令从而导致作战失败呢?

  这位叛徒将军有可能会这么做:

  对其中4个军队发送“攻击”的传令,给剩下的4个军队发送“撤退”的传令。通过这样的方式,收到“撤退”传令的4个部队,以“少数服从多数”的原则将结果判断为“全军撤退”。而收到“攻击”传令的4个部队,以“少数服从多数”的原则将结果判断为“全军攻击”,但由于不能全军一起进攻,导致战斗力不足,从而使得整个作战计划最终失败。

  

   在分布式计算中,不同的计算机通过相互通讯达成共识,并按照达成的共识策略展开行动。然而,有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的网络也可能导致信息损坏,使得网络中不同的成员信息不一致,从而使得全体协作策略的结论出现差异,破坏系统一致性。这个难题被称为“拜占庭容错”。

  实际上,拜占庭将军问题还有更深层次的问题:

  问题一: 如果每个将军向其他八个将军发送一条指令,也就是在任何一个时间又总计最多有80次的指令传输,并且每个将军分别收到8个指令,可能每一个指令都写着不同的进攻时间或者撤退时间。这个问题本质上是时间和空间的障碍,导致信息传递的不准确或不及时。

  问题二: 部分将军会答应超过一个的指令,故意背叛进攻发起人,所以他们将重新广播超过一条甚至更多的指令(信息包),由此产生许多甚至无数的杂音。这个问题是信息过量或信息干扰导致的判断错误率提升的问题。

   有了以上两个问题,整个网络系统可能由于不可信的信息和攻击时间不一致,导致网络信息运作非常不畅。针对问题,有人提出了两种解决方法,一个是口头协议算法;另一个是书面协议算法。

  

  口头协议算法的核心思想是:要求每一个被发送的消息都能被正确投递,信息接收者明确知道消息发送者的身份,并且信息接收者知道信息中是否缺少信息。采用口头协议算法,当叛徒数少于1/3时,拜占庭将军问题可以很容易得到解决。然而,口头协议算法最大的问题是消息不能溯源。

  为解决消息无法溯源的问题,有人提出了书面协议算法。该算法要求签名,不可伪造,一旦被篡改即可发现,同时任何人都可以验证签名的可靠性。

  就算是书面协议算法,也不能完全解决拜占庭将军问题,因为该算法没有考虑信息传输延迟、签名体系难以实现的问题。且签名消息记录的保存,也难以摆脱中心化机构。

  拜占庭假设是对现实网络世界的一种模型化。在现实网络世界中由于各种各样的问题导致网络可能出现不可预料的问题。拜占庭容错协议必须处理这些失效,并且还要使这些协议满足所要解决的问题所要求的规范。

  

  2、比特币的区块链共识机制解决方案

  区块链的厉害之处,就是类似与拜占庭将军问题,都会有一套回避策略,并且这套回避策略都已经融入到了区块链的基本技术里面了。

  具体来说,在每一个区块链的框架中都会有一套比较严格的“增加新指令(新区块)的规则”。这个规则这就是我们通常所说的“分布式共识机制”或者“共识机制”,而与这套机制相应的会是一套共识算法。根据共识机制在处理速度和成本方面的不同,目前主流的共识机制有多种类型。

  比特币的采用了“工作量证明”——挖矿,并且工作量证明是基于计算一个随机哈希算法。哈希算法唯一做的事情就是获得一些输入,然后进行计算,并得到一串固定长度位的随机数字和字母的字符串。它为发送信息加入成本,同时,为了降低指令信息传递的速率,并加入了一个随机元素,以保证在一个时间只有一个将军,可以进行广播。

  回到上文提到的两个问题,我们简单总结一下:

  (1)问题一的解决方案

  区块链对于第一个问题的解决方案是利用分布式存储技术和点对点传输技术,将整个网络系统内的所有交易信息汇总为一个统一的、分布式存储的、接近实时同步更新的电子总账。分布式共同账本解决了空间上的障碍问题;而近乎实时的对所有账本备份的更新和核对则解决了时间上的障碍问题。

  (2)问题二的解决方案

  区块链对于第二个问题的解决方案是区块链系统的任何一个节点在发送每一笔新添加的记录时需要附带一条额外的信息。对区块链系统的任何一个节点来说这条额外的信息的获得都是有成本的,并且只能有一个节点可以获得。这样就解决了区块链系统的任何一个节点新添加额外信息时的信息多且乱而无法达成一致的问题。在这里,区块链系统的任何一个节点获得那条附带的额外的信息的过程就是著名的工作量证明机制PoW。

  采用工作量证明机制的区块链,为了挖到区块必须通过挖矿解决计算难题。最先解开难题的矿工将获得发现区块相应的奖励。而解答难题的答案的正确与否也是通过其他矿工确认的。。如果想要进行信息篡改,必须要对该时间点以前的所有区块全部进行重新计算。我们前面讨论过,这几乎是无法实现的。

  共识机制和共识算法

  我们来总结一下,共识机制就是在信息传递有时间和空间障碍或者信息有干扰或者延迟的P2P网络中,网络参与者为了对某个单一信息达成共识而遵循的机制。而为了实现这个共识机制,P2P网络中支撑这个机制所采用的算法,我们称之为共识算法。

  在区块链中,为了能够对各个节点生成的区块的正确性进行验证并把验证结果共享给整个区块链,都必须有相应的共识算法。

  

  3、工作量证明机制详解

  工作量证明机制的基本原理

  共识机制主要解决区块链系统的数据如何记录和如何保存的问题。工作量证明机制就是要求区块链系统的节点通过做一定难度的工作得出一个结果的过程。依赖机器进行数学运算来获取记账权,资源消耗相比其他共识机多、可监管性弱,同时每一次达成共识,需要全网共同参与,运算性能效率比较低,容错性方面允许全网50%节点出错,优点是完全去中心化,节点自由进出。当然现在由于随着大规模的矿池的诞生,POW算力有日趋中心化,存在一些人对POW机制中的中心化问题出了怀疑。

  工作量证明机制的工作过程

  区块链系统中某节点生成了一笔新的交易记录,并且该节点将这笔新的交易记录向全网广播。全网各个节点收到这个交易记录并与其他所有准备打包进区块的交易记录共同组成交易记录列表。在列表内先对所有交易进行两两的哈希计算;再对以获得的哈希值进行哈希计算获得Merkle树和Merkle树的根值;把Merkle树的根值及其他相关字段组装成区块头。

  各个节点将区块头的80字节数据加上一个不停地变更的区块头随机数一起进行不停地哈希运算(实际上这是一个双重哈希运算);不停地将哈希运算结果值与当前网络的目标值做对比,直到哈希运算结果值小于目标值,就获得了符合要求的哈希值,工作量证明也就完成了。

  工作难度的控制问题

  分布式的区块链系统是一个动态变化的系统(硬件的运算速度的增长,节点参与网络的程度的变化)。系统的不断变化必然带来系统的算力的不断变化。而算力的变化又会导致通过消耗算力(工作)来获得符合要求的哈希值的速度的不同。最终的结果会是区块链的增长速度会有巨大的不同。这是一个很大的问题。为了解决这个问题,区块链系统自动根据算力的变化对工作难度进行调整。也就是采用移动平均目标的方法来确定,难度控制为每小时生成区块的速度为某一个预定的平均数。

  在区块链系统中一个符合要求的哈希值是由N个前导零构成,零的个数取决于网络的难度值。以比特币区块链为例,为了使区块的形成时间控制在大约十分钟左右,区块链系统采用了固定工作难度的难度算法。难度值每2016个区块调整一次零的个数。

  新的难度值是根据前2015个区块(理论上应该是2016个区块,由于当初程序编写时的失误造成了用2015而不是2016)的出块时间来计算。

  难度 = 目标值 * 前2015个区块生成所用的时间 / 1209600 (两周的秒钟数)

  这样通过规定的算法,区块链系统就保证所有节点计算出的难度值都一致,区块的形成时间大约一致在十分钟左右。

  

  工作量证明机制的特点

  (1)结果不可控制。其依赖机器进行哈希函数的运算来获得结果;计算结果是一个随机数;没有人能直接控制计算的结果。

  (2)计算具有对称性。就是结果的获得和结果的验收需要的工作量是不同的。计算出结果所需要的工作量远远大于验收结果所需要的工作量。

  (3)计算的难度自动控制。为了使区块的形成时间控制在大约十分钟左右,区块链系统自动控制了每一个符合要求的哈希获得为大约在十分钟左右。

  工作量证明机制的优缺点

  (1)工作量证明机制的优点:

  方法简单易行。

  系统达成共识容易,节点间信息交换量较少。

  系统可靠性强,篡改的成本巨大。

  (2)工作量证明机制的缺点:

  消耗大量的算力,从而需要耗费大量的能源。

  区块的确认时间较长,并难以缩短。

  新创立的区块链区块较少,容易受到集中性的算力攻击。

  区块链容易产生分叉,稳定的区块链需要多个确认,并且难以改进;。

  算力日趋集中与去中心化需求之间存在矛盾。

  干货回顾

区块链十年,围观密码朋克们创造的新世界

区块链从哪儿来?到哪儿去?

  

  点击阅读原文,一键购买

版权信息
作者:破冰区块链
来源:SocialLending

关于我们

联系我们

作者进驻

手机版

Copyright © 2013 比特巴 www.btb8.com
始建于2013年,提供比特币 区块链及数字货币新闻、技术教程、测评、项目周报、人物等资讯
本页面提供的是区块链新闻资讯,区块链(Blockchain)是比特币的一个重要概念,它本质上是一个去中介化的数据库。