KT小白笔记|第06课 共识机制(上)

时间:2018年10月31日 

讲师:Ulord技术团队/优得学院 梁博士 

主题:共识机制


     本节课主要讲解区块链技术中的各种共识机制,包括PBFT算法PoW算法PoS算法DPoS算法

      区块链可大致分为公有链、联盟链、私有链。其中PoW、PoS及DPoS算法适用于公有链;PBFT算法则适用于私有链及联盟链。以下一一详细介绍。


一、实用拜占庭容错算法(Practical Byzantine Fault Tolerance;简称 PBFT算法)


(一)拜占庭将军问题(Byzantine Generals Problem) 

      1982年,Leslie Lamport 提出拜占庭将军问题(Byzantine Generals Problem),主要是用来解释一致性问题的一个虚构模型。 

      故事起源于古代东罗马帝国的帝都,一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为「进攻」或「撤离」两种。如果一部分军队进攻而另一部分军队撤离的话,将可能会导致攻城失败,因此每一位将军必须通过投票来达成一致的策略,亦即所有军队一起进攻或所有军队一起撤离。 

      每位将军将自己选定的策略透过信使分别通知其他的将军,因此每位将军根据自己的投票和其他所有将军送来的资讯就可以知道共同的投票结果而决定行动策略。不过由于这些将军中可能存在叛徒,而这些叛徒又努力地尝试向不同将军发送不同的消息,扰乱大家达成一致的决定。这就是着名的拜占庭将军问题(Byzantine Generals Problem)。


(二)实用拜占庭容错算法(PBFT算法)

      1999年,Miguel Castro及Barbara Liskov(2008年图灵奖得主)提出PBFT算法,解决了传统拜占庭容错算法效率不高的问题,并将算法的复杂度大大降低(从指数级降至多项式级),使得拜占庭容错算法在实务上能够广泛被应用,提供高效能的运算使得系统可以每秒处理上千个请求,并且采用密码学技术,如ISA签名算法、消息验证编码、摘要,来确保消息在传递过程中无法被窜改及破坏。

      PBFT算法是一种基于严格数据证明的算法,至少需要经过三个阶段的信息交换和通过局部共识来达成最终的一致结果。简单来说,PBFT 实际上是对于每一个收到信息的节点,都会广播至其他人,就是说不断重复进行信息交换,相互验证,让可信的节点之间能够确认正确的信息,並且识出有问题的节点。


(三)运作流程:

      PBFT 算法至少通过三个阶段达成一致性的协议,包括请求(Request)、预准备(Pre-Prepare)、回复(Reply)。根据不同的协议设计,也可能同时包含准备(Prepare)、确认(Commit)的程序。

以上图及拜占庭将军的故事举例简单说明:

1. PBFT算法最少有4个参与者,上图中以 C代表元帅、0代表司令、1代表1号将军、2代表2号将军、3代表3号将军。

2.胜利条件:大部份(2/3)的军队都共同发起"进攻"。

3.步骤:

      step1. 元帅命令司令"进攻"(C 发送「请求」到 0);

      step2. 司令收到"进攻"命令后,分别传递给所有的将军(0 发送「预准备」给1、2、3);

      step3. 1号将军收到司令和2号将军的"进攻"的通知,但迟迟没有收到3号将军的回应,就将3号将军忽略,并认为"进攻"是正确的,就下令"进攻",同时把"进攻"命令传递给其馀将军(1收到0和2的「准备」,但并没有收到3;1 发送「准备」给2和3,同时发送 「确认」 给0);

      step4. 2号将军收到司令和1号将军的"进攻"通知,但迟迟没有收到3号将军的回应,就将3号将军忽略,并认为"进攻"是正确的,就下令"进攻"。并把"进攻"命令传递给其馀将军(2收到0和1的「准备」,但并没有收到3;2 发送「准备」给1和3,同时发送 「确认」 给0);

      step5. 3号将军收到司令、1号将军、2号将军的"进攻"通知,没有把"进攻"要求传递给其他将军,而是临阵逃跑。(3没有发送「准备」给0、1及2,而且没有发送 「确认」 给0);

      step6. 最后,所有的将军亲自向元帅汇报执行的情况(司令、1号将军、2号将军),而3号将军并没有回复,所以将其视为逃跑或阵亡。所以,元帅认为大部份军队都"进攻",而且胜利了,不过同时也发现3号将军有问题。

    在以上这个过程,如在 N ≥ 3F + 1 的情况下,N为节点总数,F为有问题的节点总数。

      即使其中一位将军逃跑了,没执行"进攻",但最后仍取得胜利,但对国家造成危害(其中一个节点失效对系统造成的危害),也会得知哪位将军有问题。在 PBFT 的共识机制下,虽然出现有问题的节点,但这是容许的,不影响最终一致性的结果,这就是所谓 PBFT 算法的流程。 


(四)PBFT算法优点

      1.具备容错性

    能够容纳接近1/3的失效节点误差,能够在失效节点数量不超过 (N-1)/3 的情况下,保证安全性和活跃性。

      2. 不用靠发币维持系统运作

    由于 PBFT 中各参与者都是由业务的监管方或者参与方构成,所以系统出块、安全性、稳定都共同保证。

      3. 共识效率佳

    可以满足较高频率的交易量,各节点达成共识的延时大约为2至5秒钟,基本达到了商用的实时处理要求。

    PBFT算法共识效率高,可满足高频交易量的需求,这些优点非常适合联盟链的应用场景,因此PBFT算法成为使用最多的联盟链采用的共识算法。

(五)PBFT算法缺点

      PBFT仍然是依靠一个节点一票,少数服从多数的方式来实现拜占庭容错,适用于联盟链。 但是在公有链中,由于节点数目广大,这样就会存在很大的问题。另外,当有 1/3 以上的节点停止工作后,系统将无法提供服务。

      所以公有链中没有采用PBFT算法,一般采用的是PoW算法(工作量证明机制)、PoS算法(权益证明机制)和DPoW算法(股份授权证明机制)的共识算法来实现一致性。




二、工作量证明机制(Proof of Work;简称 PoW算法)

      PoW算法是最常见的共识机制,意味着工作量越多收益越大,也就是寻找及猜测唯一nonce(随机数值)的过程,这个过程也俗称挖矿。谁能最快的猜出这个唯一的数值,谁就拥有信息公示或信息记账的权力。其中,Nonce是一个在加密通信中只能使用一次的随机数值。


(一)寻找nonce(随机数值)流程

首先,对区块的交易信息进行运算,产生一哈希值得到一个256位的字符串,命名为A1。

在A1的字符串后面加上一nonce(随机数值),命名为A2。

再对A2字符串做哈希运算得到一256位的字符串,称为A3。

如果A3的前四位都是0的话,就可以向网路进行提交,而第一个提交该nonce随机数者就拥有了记账的权力。


(二)实例


1.给定一个基本的字符串“Hello, world”。

2.在字符串后添加一nonce(随机数值),并对其进行SHA256运算,若运算结果为以0000开头,则验证通过。

而且若是第一个获得该nonce随机数并且在网路提交,让全体验证通过,则就具有了记账的权力。


(三)PoW协议


首先,向所有的节点广播新的交易,

然后每个节点把收到的交易放到区块链的块中,

在每一轮中,一个随机选中或按照一定规则选出来的节点广播它所保有的块,

其它节点在验证块中所有的交易正确无误后接受该区块,

其它节点将该区块的哈希值放入下一个他们创建的区块中,表示已经承认这个区块的正确性。

挖矿算力最快或被选中的节点将具有记账的权力去广播它所保有的或计算的区块,同时获得相应的收益。而其他的节点只进行验证其正确性。

     节点们认定最长的链为合法的链,并且持续去扩大这条链。如果两个节点同时广播各自挖出的区块,其他节点以自己最先收到的区块为准,开始挖矿,但同时会保留另一个区块。因此,若节点先收到A的区块,并在其上开始挖矿,同时也会保留B的区块,以防止B的区块所在的分支,日后成为较长的分支。

      平均每十分钟有一个节点找到一个区块,如果两个节点在同一时间找到区块,则网路将根据后续节点来决定哪个区块能构建总账。



(四)不利条件原理(The Handicap Principle)

      以色列生物学家扎哈维(A.Zahavi)提出了「不利条件原理」(The Handicap Principle),该原理可以用来解释工作量证明(PoW)的过程。

      这个原理指出,当两动物有合作的动机时,为了打消对方的疑虑,必须向对方表达友好的同时附上自己的代价,使得自己背叛对方时不得不付出昂贵的代价。在我们的人际关系交往中,在达成同一个目标时,很多善良的人都是宁愿自己吃点亏,体现的就是这个道理。例如历史上,国家和国家之间签订盟约,为了表示本国对盟约的诚意,经常会将太子送至他国做为人质。

      区块链技术中,也是利用这种方式来协调各个节点间的劳动成果,借用的就是不利条件原理的概念。

      比特币的工作量证明中,产生一个新区快是建立在耗时耗力的巨大代价上。所以当新区快诞生后,某个矿工可以选择忽视它,自己继续寻找新区快,或者选择接受该区块,并在该区块之后继续自己的挖矿。

      在比特币中,以最长链为合法的链。假设这个矿工选择忽视该区块而自己继续寻找新区快,就必须说服足够多的其他矿工,沿着他的路线走;相反的,若是选择接受该区块,不仅不须付出额外的辛苦,而且可以继续进行自己更新区块的挖矿。比特币通过不利原理约束了节点的行为,形成全网的良性建设。


(五)PoW优缺点

      PoW的优点是完全的去中心化,节点可以自由的进出。缺点是挖矿会造成大量的资源浪费,而且共识达成的周期比较长,不适合实务中很多的应用。比特币的区块生成周期,是每10分钟生成一个区块,区块生成时间非常长,速度太慢。



你可能感兴趣的:(KT小白笔记|第06课 共识机制(上))