雷锋网(公众号:雷锋网)按:本文发表于Steem,作者是dantheman。译者是万云首席技术官奚海峰,首发公众号万云BaaS。奚海峰曾任IBM研究院工程师和高级咨询顾问,Sempra Commodities 主管架构师及 Tudor Investment 软件开发主管。在美国12年间,获得了包括“IBM 研究成就奖”在内的多次嘉奖,在一流国际会议和杂志上发表过多篇学术论文,并且持有美国发明专利。雷锋网已获授权转载。

这篇“缺失的白皮书”是对委托权益证明(DPOS)的分析,目的是为DPOS的工作原理及其鲁棒性根源提供一个分析。DPOS的早期描述可以在bitshares.org找到。不过,那个描述还包含了许多不属于实际共识过程的内容。

所有区块链本质上都是一种由交易驱动的确定性状态机。共识是商定确定性交易顺序和过滤无效交易的过程。有许多不同的共识算法都可以产生等效的交易排序,但DPOS已经通过在多个区块链上经年累月的可靠运行证明自身是健壮、安全和有效的。

像所有共识算法一样,块生产者可能导致的最大损害是审查。所有块的有效性必须基于确定性的开源状态机逻辑。

DPOS算法概要

DPOS算法分为两部分:选择一组块生产者和调度生产。选举过程确保利益相关方最终得到控制,因为当网络不能顺利运行时,利益相关方的损失最大。选举方法对实际运行中如何达成共识几乎没有影响,因此,本文将重点介绍如何在块生产者被选择之后达成共识。

为了帮助解释这个算法,我想假设3个块生产者A,B和C。因为共识(的达成)需要2/3+1多数来解决所有情况,这个简化的模型将假设生产者C是打破僵局的那个人。在现实世界中,将有21个或更多的块生产者。像工作量证明一样,一般规则是最长链胜出。任何时候当一个诚实的对等节点看到一个有效的更长链,它都会从当前分叉切换到更长的这条链。

我将举例说明在大多数想得到的网络条件下DPOS如何运行。这些例子应该可以帮助您理解为什么DPOS稳健且难以破坏。

正常操作

在正常操作模式下,块生产者每3秒钟轮流生成一个块。假设没有人错过自己的轮次,那么这将产生最长链。块生产者在被调度轮次之外的任何时间段出块都是无效的。

少数分叉

不超过节点总数三分之一的恶意或故障节点可能创建少数分叉。在这种情况下,少数分叉每9秒只能产生一个块,而多数分叉每9秒可以产生两个块。这样,诚实的2/3多数将永远比少数(的链)更长。

离线少数的多重生产

(离线的)少数人可以试图产生无限数量的分叉,但是他们的所有分叉都将比多数人的那条链短,因为少数人在出块速度上注定比多数人来的更慢。

网络碎片化

网络完全有可能碎片化,导致没有任何分叉拥有多数块生成者。在这种情况下,最长的链将倒向最大的那个少数群体。当网络连通性恢复时,较小的少数群体会自然切换到最长的那条链,明确的共识将恢复。

有可能存在这样三个分叉,其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。块生产者总数为奇数,因此不可能长时间保持平局。稍后我们还会讲到生产者“洗牌”,它使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。

在线少数的多重生产

在这种场景下,少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者(C)可以选择基于B产生的任何一种方案继续构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。少数不良生产者企图广播再多的替代块也无关紧要,它们作为最长链的一部分永远不会超过一轮。

最后不可逆块

在网络碎片化的情况下,多个分叉都有可能持续不断增长相当长的时间。长远来看最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。这可以通过观察来自2/3+1多数块生产者的确认来决定。

在下图中,块B已被C和A所确认,这代表了2/3+1多数确认,由此我们可以推断没有其它链会比这个更长 – 如果2/3的生产者是诚实的。

请注意,这个“规则”类似于比特币的6块确认“规则”。一些聪明人也许可以谋划一系列事件使得两个节点(应该是“交易”?)出现在不同的最后不可逆块上。这种边缘案例要求攻击者能完全控制通信延迟,并且在几分钟内两次--而不是一次--使用该控制。即便这真的发生了,那么最长链(胜出)的长期规则仍然适用。我们估计这种攻击的可能性足够接近0,且经济后果无关紧要,因此不足为虑。

生产者法定人数不足

在缺乏明晰的生产者法定人数这种不太可能的情况下,少数人还是可以继续出块。利益相关方可以在这些块里包括更改投票的交易。这些投票可以选出一组新的生产者,并将出块参与率恢复到100%。一旦如此,少数链将最终超过所有其他以低于100%参与率运行的链。

在此过程中,所有观察者都会知道,在一条参与率超过67%的链形成之前,网络状态是不定的。那些选择在此条件下进行交易的人所冒的风险与选择接受不到6个确认的人相似。他们知道存在这样一些小的可能性,即:共识也许最终在一个不同的分叉上建立起来。在实践中,这种情况比接受少于3个比特币交易确认的块要安全多了。

多数生产者舞弊

如果多数生产者变得腐败,那么他们可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走。这种情况下,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。这种行为不会持续很长时间,因为利益相关方最终会投票替换生产者。

交易作为权益证明(TaPoS)

当用户为一个交易签名时,他们是在对区块链状态的一定假设下这样做的。这个假设是基于他们对最近几个块的看法。如果最长链的共识发生改变,则潜在会使签名者之前的假设失效。

就TaPoS而言,所有交易都包含最近一个块的散列,如果该块在链历史中不存在则这些交易被认为是无效的。任何在孤儿分叉上给交易签名的人,都会发现该交易无效且无法迁移到主分叉。

该过程的一个附带作用是可以抵御试图产生替代链的长期攻击。每个利益相关方在每次交易时都直接对区块链做出确认。随着时间推移,所有的块都是由所有利益相关方确认过的,这在一条伪造链里是无法复制的。

确定性生产者洗牌

在上面所有例子中,我们展示的都是块生产者按循环调度出块。实际上,每出N个块(N是生产者数量),块生产者集合都会洗牌一次。这种随机性确保块生成者B不会总是忽略块生成者A,每当形成多个拥有相同数量生产者的分叉时,平局最终都会被打破。

结论

在每一个我们能想到的自然网络分裂的情况下,委托权益证明都是强健的,甚至在面对相当数量生产者舞弊的情形时也是安全的。不像其它共识算法,当大多数生产者不合格时,DPOS还是可以继续工作。在此过程中,社区可以投票替换掉不合格的生产者,直到恢复100%参与率。我还不知道有任何其它算法可以在如此高强度和变化多端的失败条件下依然保持强健。

说到底,DPOS引人注目的安全性来自于其选择块生产者和验证节点质量的算法。运用赞成投票的过程可以确保一个人即使拥有50%的有效投票权也不能独自挑选哪怕一个生产者。DPOS旨在优化拥有强壮网络连接的诚实节点100%参与(共识过程)的名义条件。这使得DPOS有能力在平均只有1.5秒的时间内以99.9%的确定性确认交易,同时以优雅和可检测的方式降级 – 从降级中恢复正常也不过是小事一桩。

其它共识算法以网络条件差的不诚实节点为名义条件展开设计,这样设计的最终结果就是性能更差、延迟更高、通信开销高的网络,而且这个网络在33%节点失效的情况下会完全停摆。

在BitShares成功运行三年以及在Steem运行一年期间,我们经历了各种各样的网络条件和软件错误。DPOS成功穿行于其间,在处理了比任何其它区块链更多交易的同时持续达成共识,展现了非凡的能力。

本文作者:伊莉

本文转自雷锋网禁止二次转载,原文链接

缺失的白皮书:DPOS共识算法工作原理及鲁棒性根源分析相关推荐

  1. DPOS 共识算法 - 缺失的白皮书

    原文:https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper 网络上已经有了好几个版 ...

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

    这是一份缺失的白皮书以及对委托权益共识算法(DPOS)的分析!这篇文章的目的就是提供一个分析,为什么DPOS可以行的通以及是什么使得它很强大!一篇早期对于DPOS介绍的文章可以在bitshares.o ...

  3. 详解DPoS共识算法

    一.DPoS 的诞生 想象这样一家公司:公司员工总数有1000人,每个人都持有数额不等的公司股份.每隔一段时间,员工可以把手里的票投向自己最认可的10个人来领导公司,其中每个员工的票权和他手里持有的股 ...

  4. 网站排名算法——Reddit 排名算法工作原理

    Reddit是个社交新闻站点,其口号是"提前于新闻发生,来自互联网的声音".用户(也叫redditors)能够浏览并且可以提交互联网上内容的链接或发布自己的原创帖子.其他的用户可对 ...

  5. DPOS共识算法-by BM

    这是缺失的白皮书,关于DPOS,Delegated proof of stake,委托权益共识算法的解析1.本文将分析DPOS是如何工作的,以及说明算法的有效性.一份更早的关于DPOS的介绍可以在 h ...

  6. 分布式共识的工作原理,Part-1:分布式系统的定义及属性

    分布式系统经常让人觉得云山雾罩,主要是因为相关知识点比较零散不成体系.但别担心,我很清楚这个有点尴尬的情况.我自学分布式计算的时候,就有很多次完全摸不着头脑.现在,经历过很多次尝试和死磕之后,我终于有 ...

  7. 共识算法POW原理及实现

    POW简介 Proof of Work,工作证明. POW共识算法主要是通过计算难度值来决定谁来出块.POW的工作量是指方程式求解,谁先解出来,谁就有权利出块.方程式是通过前一个区块的哈希值和随机值n ...

  8. 分布式共识的工作原理,Part-2:共识问题与 FLP 不可能定理

    Part-1:分布式系统的定义及属性 在分布式系统中,达成共识意味着什么 目前,我们已经知道分布式系统有以下特性: 进程的并发性 全局时钟缺失 组件可能出错 消息需时传递 接下来我们会聚焦分布式系统中 ...

  9. vue的matcher_vue-router工作原理概述和问题分析

    工作原理简要流程图 hashchange --> match route --> set vm._route --> render() --> render matched c ...

最新文章

  1. iOS 直播专题2-音视频采集
  2. Spark读取普通RDD加载为DataFrame
  3. c语言数码管编写程序,跪求单片机0~99数码管显示用C语言编写的程序
  4. java监控对话框是否关闭_java – 检查是否可以安全地关闭对话框
  5. [Java基础]Stream流终结操作之forEachcount
  6. 适配器模式(PHP实现)
  7. 79-Spark Standalone架构设计要点分析
  8. C#使用GET、POST请求获取结果
  9. AutoCAD2010安装教程
  10. 小孔子内容管理系统第一次更新
  11. 智能风控模型之数据源类型
  12. dwc3并不是一种数据传输协议,你错了
  13. 64位 regsrv win10_64位WINDOWS 10系统下安装Eplan 2.8及注册过程
  14. 生成树个数(基尔霍夫矩阵)
  15. android表情编码与解码
  16. 适配器(Adapter)模式
  17. 岁末忆今朝,辞旧话新潮——心灵与技术的聚合
  18. 基于Python的疫情数据爬虫及可视化
  19. 误码率matlab怎么计算,关于误码率的问题 急!!!!!
  20. (1分钟速通面试) 矩阵分解相关内容

热门文章

  1. 用数据帮公司省1000万!看看你会不会错过机会
  2. 年薪不过27w全额退款丨BAT百万讲师打磨出完美匹配企业需求的大数据课程
  3. delphi CopyMemory、FillMemory、MoveMemory、ZeroMemory
  4. 京东购物成功订单已开具个人发票不能报销怎么申请更换重新开具企业发票用于报销?
  5. 计算共形几何是计算机科学和,科学网—计算共形几何概览 - 顾险峰的博文
  6. 使用python制作聊天框解谜游戏_Python实现小黑屋游戏的完整实例
  7. 【北行★户外】7月19日周六 闲游 密云水库、 白云峡谷、捧河湾 、千尺瀑 捞虾拾贝、戏水,一日休闲小穿越活动
  8. python设计俄罗斯方块游戏流程图_python实现俄罗斯方块游戏(改进版)
  9. CreateMutex创建互斥内核对象
  10. 过程控制实验,QY-GCKZ11