DPOS共识算法—缺失的白皮书

这是一份缺失的白皮书以及对委托权益共识算法(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已经成功地经历了这种环境,并展示了保持共识时,比任何其他链处理更多的交易时的能力


原始链接:https://lilymoana.github.io/DPOS.html 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是共识算法背景分布式系统集群设计中面临着一个不可回避的问题,一致性问题对于系统中的多个服务节点,给定一系列操作,如何试图使全局对局部处理结果达成某种程度的一致?这个一致性问题大致有如下的场景:节点之间通讯不可靠的,延迟和阻塞节点的处理可能是错误的,甚至节点自身随时可能宕机节点作恶举例说明,就比如有两家电影院同时售卖总量一定的电影票,在这样的场景下,要如何设计方式来保证两家电影院协调同步不出现超卖或者错卖的问题呢?共识算法,就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程比如上述的买票问题,就可以有如下的设计:1.每次卖票打电话给其他电影院,确认当前票数2.协商售卖时间,比如一三五A卖,二四六B卖3.成立个第三方存票机构,它统一发票通过以上的设计,可以看出一个很重要的解决一致性算法的解决思路,即:将可能引发不一致的并行操作进行串行化,就是现在计算机系统里处理分布式一致性问题基础思路和唯一秘诀著名的共识设计理论FLP 不可能性原理  共识算法的理论下限提出该定理的论文是由 Fischer, Lynch 和 Patterson 三位作者于 1985 年发表,该论文后来获得了 Dijkstra(就是发明最短路径算法的那位)奖。FLP 原理认为对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。三人三房间投票例子三个人在不同房间,进行投票(投票结果是 0 或者 1)。三个人彼此可以通过电话进行沟通,但经常会有人时不时地睡着。比如某个时候,A 投票 0,B 投票 1,C 收到了两人的投票,然后 C 睡着了。A 和 B 则永远无法在有限时间内获知最终的结果。如果可以重新投票,则类似情形每次在取得结果前发生带入到计算机领域就是说,即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。即可靠性的下限是0%CAP  分布式系统领域的重要原理CAP 原理最早由 Eric Brewer 在 2000 年,ACM 组织的一个研讨会上提出猜想,后来 Lynch 等人进行了证明• C(一致性):所有的节点上的数据时刻保持同步,即数据一致• A(可用性):每个请求都能在一定时间内接受到一个响应,即低延迟• P(分区容错):当系统发生分区时仍然可以运行的定理:任何分布式系统只可同时满足二点,没法三者兼顾。即数据一致,响应及时,可分区执行不可能同时满足。举个例子:一个分布式网路上,某一个节点有一组依赖数据A,当网络无延迟,无阻塞时,依赖于X的操作可正常进行。但网络无延迟阻塞在现实世界中是没法100%保证的,那么当网络异常时,必然会产生分布式系统的分区和孤岛,那当一个执行操作在A分区之外时,如果要保证P,即当系统发生分区时仍可运行,就需要在分布式系统中多个节点有X的备份数据,以应对分区情况。则这时候就需要在C,A之间做出选择。假如选择C,即要保证数据在分布式网络中的一致性,那么就需要在X每次改动时,需要将全网节点的X数据同步刷新成最新的状态,那么在等待数据刷新完成之前,分布式系统是不可响应X的依赖操作的,即A的功能缺失假如选择A,即要突出低延迟的实时响应。那么在响应的时候,可能全节点的X数据并没有同步到最新的状态,则会导致C的缺失。上面看上去有些绕,那么你只要记住这句话,CAP原理在分布式网络系统的应用讨论,其实就是讨论在允许网络发生故障的系统中,该选择一致性还是可靠性?如果系统重视一致性,那么可以基于ACID原则做系统设计即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。ACID 原则描述了对分布式数据库的一致性需求,同时付出了可用性的代价。• Atomicity:每次操作是原子的,要么成功,要么不执行;• Consistency:数据库的状态是一致的,无中间状态;• Isolation:各种操作彼此互相不影响;• Durability:状态的改变是持久的,不会失效相应的有一个BASE原则,(Basic Availiability,Soft state,Eventually Consistency)则强调了可用性。经典的共识算法设计业内,针对节点异常的情况,会有两种分类1.故障的,不响应的节点,成为非拜占庭错误2.恶意响应的节点,称为非拜占庭错误Paxos 最早的共识算法  非拜占庭算法的代表Paxos有三种角色:• proposer:提出一个提案,等待大家批准为结案。客户端担任该角色;• acceptor:负责对提案进行投票。往往是服务端担任该角色;• learner:被告知结案结果,并与之统一,不参与投票过程。即普通节点系统运行由proposer驱动,当合法提案在一定时间内收到1/2以上投票后达成共识。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值