进入链接地址,观看BM亲自教学Dpos机制视频:http://mp.weixin.qq.com/s/k_aRDnTEHW6qXGof_hB3Gg
此视频介绍主要的目的是:
向各方解释EOS.IO的股份授权证明机制、区块生成、安全性、拜占庭容错机制、以及DPoS、BFT的一些新的功能特征。
那么一开始我就假设大家关于这方面知识非常有限、如拜占庭容错机制。
我从定义我们的目标开始,我们的目标是要将权利去中心化,从而确保在区块的交易记录中没有中心化的确认制度。
我们同时也要确保每个人都对相同的事件顺序达成一致,一旦对于事件的发生顺序达成一致意见,并且避免了中心化的确认制度,那么接下来就可以使区块链达到一致的共识状态了。
那么在共识算法中,我们要着重寻找一些关键点,那就是,如何知道首次确认的延迟时间,以及从最终确认到不可逆转的延迟时间,从而你就知道了什么时候整个过程就不可逆转了,而且每个人都对此达成一致。
那么在拜占庭容错机制中,理想的情况是:你对这点是确认的 其它人对这点也是确认的,那么我们就都达成一致了。
那么,如果大家有任何不同意见,比如说如果两个不同的团体认为他们的意见和其它人不一致,那就可能会导致拜占庭问题,一半的将军发动了攻击而另一半没有,那这样的话,此次战役就输掉了。
所以,你可以说拜占庭容错问题是:如果你可以制作一个加密证明,证明在那个状态下谁是拜占庭将军,为了达到这个目标,拜占庭容错机制的目标是,确保如果有两组成员一致认为,其他人想的都不一样,那么就达成了两种不同的共识状态,这就是拜占庭将军问题。
为了避免这种情况发生,你就需要有加密证据证明,哪一方是错误的,这就是拜占庭容错机制,那么如果你有了这些加密证据,你就可以用很多方式来惩罚那些牵涉到其中的一方,你可以切断他们的资金,你可以把他们从社区中开除。
那么你可以有很多种办法,把这些人从当前的区块生产者团队中开除,如果出现了这种拜占庭问题中的区块生产者,那么这种机制就是迫使每个人
在这个共识的基础上去约束自己的行为, 与其他人合作,因为如果你采取不合作态度,导致大家意见不能达成一致的话,那么这就是你行为不当的证据了。
所以,我现在要从股份授权证明机制开始讲起,比特股和Steem采用的都是这个机制,我现在要把这其中的选举过程略过。
现在,我们假设我们已经选出了20多个区块生产者,一旦这些区块生产者被选上了,他们就开始轮流生产区块,那么我们这里就得到了像这样的区块链。
我现在将要使用比特股和Steem作为例子开始,然后再说说EOS.IO有什么不同,按照规定,每个区块生产者每三秒钟生产一个区块,在这段时间里,只有一个区块生产者在生产区块,在Steem和比特股的区块生产过程中,每一轮都有21个区块生产者按照随机顺序生产区块。
比如说第一轮中的顺序是ABC,那么下一轮中,其顺序可能就是B-C-A
等等,由此下去。
如果这其中出了什么状况,比如说,可能B生产者不能生产区块了,在这种情况下,整个区块生产过程就出现了一个断层,在这里面没有产生任何区块,这就是一种常见的问题。
但是有许多可能的原因会导致这种问题,另外一件可能发生的事情是,B仍然能够在C后面生产区块,但是B的区块不能及时给到下一个生产者,那么下一个区块生产者还会在C后面生产区块。
然后是第三个区块生产者,他能打破这种混乱的局面,所以DPoS的规则就是系统中最长的链,就是共识链。
那么我们可以这样说的原因是,如果我们一共有21个区块生产者去不断生产区块,那么区块链的发展速度就取决于在这个链中一共有多少个区块生产者,如果所有的区块生产者们都以最快速度生产区块,那么每隔两秒钟就可以产生一个区块,如果只有一半的区块生产者在链上生产区块,那么这个区块链就会更短,它就不会增长得那么快,那么通过采用最长链的规则。
就像比特币一样,你就知道我们的共识在哪里,因为显然共识方在这里就是大多数人认同的一方,这个原则同时也适用于大规模网络分叉,把整个网络分叉成4个子链的情况,其中总有一条链是最长的。
让我们看看这里这条链,你会看见另外一个区块,在这个基础上在这里建立,你不用一定要把下一个区块接到这里来,因为这两个链的长度相同,下一个区块在这一点加入进来了,这一个链更长。它从这里分叉走了,并且分叉到了这里,那么这就是DPoS,这是这个最长链原则,这就是使得链最终连贯起来的模式。
在这个模式下,即使只有一个诚实的区块生产者在生产区块,整个系统也能正常运转,是的哪怕只有一个诚实的区块生产者,因为哪怕只有这一个区块生产者,他也可以使选举过程运转,改变整个区块生产者团队,选举出新的区块生产者,直到最终整个链又可以全速运转,这是一个非常好的机制,因为它可以保证整个系统可以持续运作下去。
Steem引入了一个概念,称为不可逆转区块概念,那么在我们这个区块链中,其他三分之二的区块生产者都在其基础上继续生产区块,所以我们就可以确认了区块B,只要我们知道了在B的后面建立了区块C和A,我知道现在已经有了三个区块我可以···所以我就不能再回过头去修改B了,即使在一开始的区块A后面有很长的分叉节点,我也不能回过头去修改B了,因为B后面三分之二的区块生产者已经达成了共识。
唯一使其成为可能的情况是,有人做出一些违规行为,那么这种机制就保护了所有的节点免受这些恶意行为的损害,因为他们可以跟随最初已形成共识的那条链继续生产,只要三分之二的区块生产者们是诚实的,那么系统中就不会出现这种违规行为,那么这种机制是为了解决哪种攻击呢?
这解决了很多远程攻击,在这些攻击中,有人取得了以前曾经被用来制造其它替代链的密钥,这些密钥被用来帮助所有人来确定当前最正确的是哪条链,但是我们现在已经有了一致共识,我们就不需要再回到那个阶段,那么这种分叉就标志着攻击行为。
这种机制不会解决新节点启动问题,但是任何新节点启动都需要从某处下载EOS软件,当下载程序时,下载方的服务器就会被自动视为可信赖的服务器,告诉他们与软件相关的CheckPoint和其它相关信息,那么还有很多其它方式,我们可以用来认证一个区块链是不是一个正当的区块链。
但是在EOS系统里面,我们的方式是大多数用户使用一个新链,他们会使用服务供应商的服务,就像Steemit一样,他们所有的任务都会被同步,所以会经常有这样一种情况,他们会有一个最近的区块,他们也会有他们信赖的对应的同步任务合作者,通过各种不同的步骤来认证他们是在一个正当的区块链上。
但是通常来说,白板上我创建的这些额外的区块和分叉,他们需要三分之二的区块生产者们一起参与其中确认了之后,才能让其真正生效,在这些分支中,我们有了99%的参与度,这个参与度也是和Steem还有比特股一样的,即使三分之二的区块生产者都同意并一起参与这个过程,他们也不能很快的创造出一条比当前正在高速运行的链更长的链,他们赶不上这个速度。
所以说,有了DPoS这个系统是非常安全的,因为我们之前有了一个不可逆转区块,那么这个区块就是一个门槛,在这个门槛之下你就不需要,在当时的情况下去回滚了,所以这给整个系统带来了更高的效率。
所以Steem和比特股,他们每个区块的pending状态,也就是每个区块从产生到其变得不可逆转的这个期间,平均来说会持续45秒钟,这段时间能够让21位区块生产者生产14个区块并确定其不可逆,这段时间的存在就对不同区块链间的通信产生了影响。