这是一份缺失的白皮书以及对委托权益共识算法(DPOS)的分析!这篇文章的目的就是提供一个分析,为什么DPOS可以行的通以及是什么使得它很强大!一篇早期对于DPOS介绍的文章可以在bitshares.org看到,不过这篇介绍中也包含了很多不属于真正共识处理的其他方面。
翻译作者:许莉
原文地址:DPOS Consensus Algorithm
所有的区块链基本上都是一个确定性的状态机,根据交易来行动。共识就是对交易顺序的确定性达成一致以及过滤无效交易的过程。也有很多不同的共识算法能够产生相同的交易顺序,但是通过多年来在多个区块链上的可靠运行,DPOS被证明了是很强大、安全和高效的。
DPOS共识算法摘要
DPOS共识算法分为两个部分:选举一群区块生产者和调度生产。选举过程是为了保证利益相关者最终掌握控制权,因为当网络没有正常运行时利益相关者损失的最多。区块生产者是如何选举出来对于共识是如何达成的几乎没有影响。因此,本文主要讲解当一个区块生产者被选举出来之后共识是如何达成的。
为了解释这个算法,我假设有3个区块生产者:A、B、C。因为共识的达成需要2/3+1多数来解决所有情况,这个简单的模型假设区块生产者C是决胜者。在现实世界中会有21个区块生产者或者更多。就像工作量证明,一般规则就是最长的链胜出。任何时候一个诚实的对端看见一个有效的长链都会将自己从当前的分支切换到最长链上。
正常流程
在正常流程下区块生产者会轮流每3秒钟来生产一个区块。假设每次轮流到的人都产生了自己该产生的区块,那么将会产生最长链。区块生产者在不属于自己产生区块之外的其他任何时间间隙产生的区块都是无效的。
少数者分支
最多允许1/3的节点可以是恶意的或者存在故障,创造了一个少数者分支。这种情况下少数者分支只会每9秒钟产生一个区块,而多数者分支则会每9秒钟生产2个区块。再一次,诚实的2/3多数者将永远会比少数者分支的链要长。
未连接的少数者双重生产
这个少数者可以尝试产生无数的分支,但是所有的分支上的链都会比多数者的链要短,因为少数者被限制区块的生产要比多数者慢。
网络分片
网络完全有可能碎片化,在网络碎片化时没有任何分支拥有多数区块生产者。在这种情况下,最长的链将会在最大的少数者上产生。当网络的连通性恢复之后小一些的少数者会自动的切换到最长链上,明确的共识也随之恢复。
有可能会出现3个分支中2个链长一点的分支,链的长度是一样的。这种情况下当第三个(链短一点的分支)分支上的区块生产者重新加入到网络时就会打破这种平衡。区块生产者的数量是奇数所以这种情况不会维持太长时间。后面我们也会对区块生产者重新洗牌,让生产区块的顺序随机化,来保证即使两个分支拥有相同数量的区块生产者,分支也将会在不同的长度爆发生长,导致一个分支接管另一个分支。
连接的少数者双重生产
在这种场景下少数者B在属于他的时间间隙生产2个或者更多其他的区块。下一个预订的区块生产者(C),也许会选择在任何一个由B生产的区块上生产链。当C生产出一个区块之后,它将会变成一个最长链,所有选择B1的节点都会切换到最长链的分支上。不论少数恶意区块生产者尝试传播多少其他的区块都没有关系,这些区块在最长链中存在的时间永远不会超过一个回合的时间。
最后不可逆区块
在网络分片事件中是有可能存在多个分支继续生长了一段延长时间。在长期来看,最长的链将会胜出,但是观测者要求有个方法可以确定的知道一个区块绝对是增长最快的链中的一部分。这个可以根据看到区块生产者们的超过2/3的确认消息就能确定。
在下图中,区块B被C和代表着多数2/3+1确认的A确认过,因此我们可以推测只要2/3的区块生产者都是诚实的那么就没有其他的链会比这个链更长。
注意这个“规则”与比特币的6个块确认是相似的。一些聪明的人可以设计出一系列的事件让两个不同的节点在出现在不同的最后不可逆区块上。这种边缘案例要求攻击者能够完全掌控通信延时,并且需要在几分钟之内,不是一次,而是两次使用这个控制力。如果这种事情发生了,那么长期来看,最长链的规则依然有效。我们估计这种攻击事件发生的概率基本为0,而且就算发生了,对于资金基本上造成的影响小到你都不用去担心。
缺少区块生产者法定数
虽然可能性比较小,但是也可能存在区块生产者的法定数不明确,这种情况对于少数者还是有可能继续生产块的,在这些块中利益相关者可以包含更改投票的交易。然后这些投票可以选择一群新的区块生产者,让区块生产的参与率恢复到100%。一旦这种情况发生,少数者链将会最终超过其他参与率低于100%的链。
在这个过程中所有的观察者都将会知道网络状态一直在变化指导区块生产参与率达到了67%。那些选择在这种情况下进行交易的人冒的风险大概跟没有得到6个块确认的交易差不多。他们是在知道有很小的可能性存在共识可能最终选择了一条不同的分叉进行操作的。在现实中这种情况比接收一个少于3个确认的比特币区块要安全的多。
多数区块生产者腐败
如果多数的区块生产者都变得腐败,那么他们就可以产生无数的分叉,每个都将以2/3多数确认进行着。在这种情况下,最后不可逆区块算法就会恢复成最长链算法。那么被最大的多数者所认可的链将会成为最长链, 谁是最大的多数者由剩下少数诚实的节点来决定。这种行为不会维持较长的时间,因为利益相关者最终会选择投票替换这些区块生产者。
交易作为权益证明(TaPoS)
当用户签名一个交易的时候,他们是在对区块链的状态有个确定猜想下进行签名的。这个猜想建立在他们对近期区块的看法。如果最长链的共识发生了改变,那么可能会使签名者在他们认可交易时产生的猜想无效化。
由于TaPoS, 当一个区块在链的历史中不存在,所有的交易包括最近一个区块的hash值都被认为是无效的。任何在孤儿分支对交易签名的人将会发现交易是无效的,而且是无法迁移到主分支上的。
这个处理的一个附带作用就是安全性,可以抵御试图产生替代链的长期攻击。各利益相关方每次在交易的时候都会直接确认区块链。随着时间的流逝,所有的区块都被所有的利益相关者确认,而这一点是无法在伪造的链中被复制的。
确定的区块生产者洗牌
在所有的列子中我们展示了区块生产者的循环调度。在现实中一群区块生产者会在N个块(N代表的区块生产者的数量)之后会被洗牌一次。这种随机性保证区块生产者B不会总是忽略区块生产者A,也确保每当有多个相同数量的区块生产者的分叉出现时,僵局都能被打破。
总结
DPOS在任何能够想得到的自然网络中断情况下还是稳健的,即使面对大多数的区块生产者舞弊也是安全的。不像一些竞争算法,DPOS在多数区块生产者出现故障的时候也可以正常工作。在这个期间,社区可以投票来选择新的区块生产者来代替这些出现故障的区块生产者直到区块生产者的参与率达到100%。我知道没有其他的共识算法可以在如此高频率且多变的失败环境下还能如此稳健。
DPOS从选择一个选举区块生产者的共识算法而最终获得重要的安全性,并认证节点的高质量和唯一性。使用投票同意的处理机制确保了即使是拥有50%投票权的人,也无法依靠自己的权利选择哪怕一个区块生产者。DPOS旨在优化具有强大网络连接,且名义上诚实节点参与率为100%条件下的性能。这让DPOS有能力在平均1.5s内拥有99.9%的确定性来确认一笔交易,同时以优雅的方式,能在降级服务中恢复。
其它的共识算法设计来支持较差网络的,和面对非诚实的节点。这将导致最终的可选设计只能是更慢的网络性能,更高的延迟,高通信开销,并且在33%的节点故障时将导致整个网络挂掉。
在BitShares3年,Steem一年的成功运营中,我们经历了各种网络条件和软件bug。 DPOS已经成功地经历了这种环境,并展示了保持共识时,比任何其他链处理更多的交易时的能力