承接上一篇结尾提出的问题,接下来的文章会着重介绍DAG的账本共识SPECTRE协议。从上一篇(《从区块链到DAG(二)--DAG的基本结构》)可以看出,DAG的整个网络并不是线性的。SPECTRE协议顺应了这种结构所以并没有提出选择主链的概念,而是着眼于解决冲突交易和防止恶意攻击。这里需要声明一下,所有讨论账本共识有效有个大前提:网络中大多数节点都是诚实的。我们不考虑集中超过51%算力的这种恶意攻击,因为无论用什么账本共识这样的攻击都会奏效。

 1.  SPECTRE如何解决冲突交易

SPECTRE通过区块间的投票来排除冲突的交易,如图1。

图片1 一个简单的DAG网络的投票过程

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》

区块X里记录的交易信息是交易x先于交易y发生,记为x<y ;区块Y里记录的交易信息是交易y先于交易x发生,记为y<x,这两个交易相互冲突。

投票过程:

区块X和区块Y分别投票给自己。

区块X之后产生的区块我们称之为X的未来区块,回溯这些未来区块发现6,7,8只能回溯到X,所以这三个区块都投票给X,标记为蓝色。同理,回溯区块Y的未来区块发现9,10,11只能投票给Y,标记为红色。

未来区块12既回溯到X又能回溯到Y,它会投出与上一轮投票一样的结果X。图中虚线部分是上一轮的投票,按少数服从多数的原则可知,投票的结果是X。

X或Y之前产生的区块我们称为X或Y的过去区块,这些区块会分别统计自己对应的未来区块的投票,然后跟投给得票较多的那个选项。由此,区块1~5都投给X,交易x<y认定有效,y<x被丢弃。

 2.  “最长链共识”与SPECTRE的关系

图片2展示了当SPECTRE应用在区块链结构上的情况。

图片2:SPECTRE在“单链”上的应用

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》

从“最长链共识”来看,链5->6->7->8长于9->10->11,所以蓝色区块会被选入账本。

现在我们换个思考方式,按照SPECTRE的原则对两笔冲突交易投票,比如6<10和10<6:

区块6,7,8投给6<10,因为6投给自己,6的未来区块7、8只能回溯到6。6的过去区块5根据自己的未来区块投票,5的未来区块有6、7、8都投票给6<10,所以5也投票给6<10。以此类推,区块9~11都会投给10<6。

区块1~4都是6和10的过去区块。以4为例,它的未来区块中5、6、7、8投票给6<10, 9、10、11投票给10<6,投给6<10的票数更多,所以4也会投票给6<10。同理,剩下的1~3也会投给6<10。最终投给6<10的区块占多数,投给10<6的区块被弃用,10<6被判断为无效信息。

从上述分析可以看出,SPECTRE和“最长链共识” 能够得到一个一致的结果。“最长链共识”其实就是SPECTRE在区块链结构下的简化版,SPECTRE是“最长链共识”在DAG结构下的拓展。在了解了SPECTRE的投票机制可以解决冲突交易后,我们来看看这种账本共识要怎么解决“双花”攻击和censorship攻击。

 3.  “双花”攻击

图片3展示了一次不成功的“双花”攻击,这种攻击一共分为三个阶段。

图片3 一次不成功的“双花”攻击

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》

在第一阶段攻击者秘密准备了一个区块Y,Y包含了交易y<x。而后攻击者继续秘密生产区块13和14,这些新生产的区块一定会引用攻击区块,但是其中的一部分也会引用诚实节点的区块,例如13;目的是为了在后续的投票过程中“策反”这些诚实区块使他们投票给Y,比如诚实区块4,在第一阶段结束时4的未来区块只有13,14,4会投票给Y。但是这种“策反”在SPECTRE的投票规则里是无效的,因为诚实节点总是比做恶的节点多,总体上看诚实节点的出块效率会高于做恶节点,所以即使短时间内“策反”成功了,在后续过程中还是可以给修正回来。

第二阶段开始后,正常的交易x<y被记录在区块X中,攻击者的目的是等x<y被几个区块确认纳入账本以后,把通过这比交易获得的代币兑换成法币或者某种服务牟利;而后再释放出自己的攻击区块,使整个账本回滚并认定x<y这笔交易被无效,回滚后原本已经转出兑换的代币又重新回到自己的账户,可以反复使用,即“双花”(同一笔钱花掉两次)。

但是在SPECTRE投票中这种攻击是不会成功的。在第二阶段攻击者继续秘密生产区块15、16、17,诚实节点由于不知道这些秘密区块所以诚实节点产生的区块不会引用它们。

在第三阶段,攻击者继续生产区块并把之前秘密生产的所有区块上传到网络中,企图让自己的攻击区块合法化,回滚整个账本。此时分析图片可知:

Y的未来区块13~19只能回溯到Y故而投票给Y。

X的未来区块6~10只能回溯到X,故而投票给X。X的过去区块1~5分别通过统计各自的未来区块,可以得出大部分未来区块都投的X,所以它们也会跟投X。区块4在第一阶段被“策反”的投票正是在这里给修正了回来,因为在4的16个未来区块中,有9个投给X(区块X加上区块5~12),比投给Y的7个多(区块13~19),所以4最终会投票给X。

区块11和12既能回溯到X又能回溯到Y,所以他们分别投出与前一轮投票一致的结果,根据少数服从多数的原则,前一轮投票也是投给X的区块占大多数,所以11、12最终也会投给X。

综合所有区块的投票,投给X的占绝大多数,最终账本会记录x<y而抛弃y<x,”双花“攻击没有奏效。

 4.  censorship攻击

相比广为熟知的“双花”攻击,censorship 攻击(审查攻击)要显的陌生很多。与“双花”攻击不同,censorship的攻击者会持续的产生区块并立刻把这些区块在网络中公开,见图片4。

图片4 一次不成功的censorship攻击

来源:Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,《SPECTRE:Serialization of Proof-of-work Events: Confifirming Transactions viaRecursive Elections》

在当前阶段,攻击者持续产生区块12~16,但是这些区块和区块X是没有关联的,它们即不会引用X,也不会回溯到X;这意味着这些区块将来是有可能被“策反”投票给Y的。

在未来的某个时刻,攻击者上传一个包含冲突交易的区块Y,Y的未来区块都会投票给Y,例如17、18。而与X不相关的过去区块16这时候会被“策反”投票给Y,因为16的大部分未来区块也都投票给了Y。那些与X不相关的、有“策反”可能的区块降低了网络的安全性,诚实的矿工在验证交易时会发现网络中有很多与X无关的区块,这会使X这笔交易的可信度降低,可能会增加确认交易的时间。因为无论是区块链还是DAG,新的交易都需要引用过去的交易来完成验证(通过区块头记录的哈希值来引用之前的区块),这些过去的交易得是可以信任的。(参考《从区块链到DAG(二)--DAG的基本结构》)

在SPECTRE的投票规则中,就算面对censorship攻击,交易也可以立刻得到确认。16~18都投票给Y。区块2~9都是只能回溯到X的区块,所以它们投票给X。区块1,12~15都投票给X,因为分别统计它们各自所属的未来区块的投票,都是投给X的占多数。区块10和11既能回溯到X又能回溯到Y,按照上一次投票的结果跟投,以少数服从多数原则可知它们都会投票给X。最终投给X的区块更多,攻击失效。

 5.  SPECTRE的不足之处

从上面的分析可以看出,SPECTRE可以很好的排除冲突交易,抵御攻击。如果一个项目只是向比特币一样用作支付作用的话,SPECTRE已经足够。但是如果要集成智能合约功能SPECTRE就无法胜任了,因为它只能对冲突交易做一个相对排序(判断冲突交易间的先后顺序),但无法给所有的区块做一个绝对排序。

智能合约的语言得是图灵完备的,就像我们编写一段计算机程序一样,需要按严格的顺序执行各种运算,所以具备智能合约功能的网络都有一个特征:网络中的交易可以按时间先后做线性排序(时序性)。

但为什么区块链的账本共识没有考虑时序性排序?因为区块链的底层账本结构天然的带有时序属性。区块链结构不允许分叉,每个区块一定要等前一个区块被确认以后才能加入账本(具体内容参考《从区块链到DAG(一)--区块链的账本结构和共识机制》),所以一条链上的区块和这些区块所记录的交易自然而然的就能按时间先后排出顺序。区块链的账本共识只需专注考虑如何排除冲突交易和防止恶意攻击即可。

图片5 本系列文章提炼的几个概念之间的关系

如图片5所示,底层账本结构和共识机制是组成主网的两大要素,而时序性是智能合约功能的必备要求。对区块链来说,时序性被天然的集成在了底层账本的链式结构中;但是对允许分叉的DAG来说,时序性只能通过账本共识来实现。SPECTRE无法用作智能合约正是因为它没有时序性,下一篇将介绍一种可以满足时序性要求的DAG共识。

参考资料:

[1] GHOST, DAG, SPECTRE, PHANTOM和CONFLUX技术原理,https://www.jianshu.com/p/8734e06d558f

[2] Yonatan Sompolinsky, Yoad Lewenberg, and Aviv Zohar,SPECTRE:

Serialization of Proof-of-work Events: Confifirming Transactions via

Recursive Elections

————  e n d ————

历史文章

  • 公链性能由什么决定——被误解的TPS

  • 从区块链到DAG(一)--区块链的账本结构和共识机制

  • 从区块链到DAG(二)--DAG的基本结构

希望大家可以关注微信公众号更加方便交流。公众号的文章也会率先更新~

从区块链到DAG(三)--DAG共识之SPECTRE协议相关推荐

  1. 云小课 | 区块链关键技术之一:共识算法

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:区块链是一种去中心 ...

  2. 区块链学习札记三: “链”是什么?

    区块链学习札记三 :"链"是什么? 区块链的存储是一种链式存储,区块按照生成的时间顺序前后链接,区块的链接基于区块存储内容的哈希值构建.区块生成后会在区块链系统的各个节点(个人或组 ...

  3. 广州欧米区块链科技×浙江墨客奇迹区块链科技丨达成战略合作共识

    近日,深圳欧米布洛格科技有限责任公司(下称欧米科技)与浙江墨客奇迹区块链科技有限公司达成合作共识,赋予欧米科技黑猫3D全身款IP图片使用权,并完成战略合作协议的签订. 在广告媒介和网络出版等方面,双方 ...

  4. 央行、外管局、银行业协会牵头银行区块链联盟,三驾马车齐攻国际金融市场...

    文丨互链脉搏·黑珍珠号 未经授权,不得转载! 11月20日,恒生电子股份有限公司官方消息,恒生电子区块链运营总监任珊日前表示,由中国银行业协会牵头,11家头部银行以及4家科技公司共同参与的" ...

  5. 区块链技术开发三个优势

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链技术开发公司目前的开发空间之大难以述清,尤以对产业转型中的应用较为广泛,但由于区块链技术开发公司目前尚正处风口,武 ...

  6. 区块链前世今生和三个感性故事

    区块链前世今生 比特币起源       说到区块链不得不说比特币,比特币是在什么样的背景下产生的?2008年全球金融危机,世界各国央行滥发货币通货膨胀.就当时有人用"中本聪"的化名 ...

  7. 他找到了区块链世界的灵魂:共识无价

    文  | 棘轮 比萨 2018年12月6日,全球学术界.科技圈与区块链行业,都被一则消息震惊: 5天前,著名美籍华裔物理学家.丹华资本创始人张首晟猝然离世,享年55岁. 张首晟曾提出拓扑绝缘体理论.量 ...

  8. 【区块链】(三)之拜占庭将军问题

    区块链的最早应用是比特币,而比特币的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络构成比特币系统.区块链发源于比特币技术.在中本聪的白皮书里," ...

  9. 区块链百科合集之共识机制

    原文发布时间 2021-01-06 原"能链科技"现已更名"零数科技" 科技的发展总是超乎人们想象 区块链技术不仅已成为时代浪潮里的坚实着陆地 更是未来可以承载 ...

  10. 什么是区块链――区块链的分布式数据库、共识机制

    从狭义上来说,区块链就是一种分布式的数据库,数据结构上就是按时间顺序将数据区块相连的一条链表,链上的每个节点就是一个区块,区块一般通过二叉树(如Merkle Tree)将每笔交易数据打包在一起,形成一 ...

最新文章

  1. 数单词 (AC自动机模板题)
  2. C可变参数详解及其函数设计
  3. 『数据中心』降低PUE值4种方法
  4. QML基础类型之vector4d
  5. VS2015 定时服务及控制端
  6. [数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制
  7. 阿里毕玄:推荐给Java程序员的7本好书
  8. Oracle 19c 新特性:自动化索引 Automatic indexing 实践
  9. 广实1592: 1.6-06:校门外的树
  10. 团队冲刺第二阶段04
  11. Kaldi(A1)语音识别原理
  12. 【安全牛学习笔记】初识sql注入漏洞原理
  13. CAD中怎么将Z轴归零?CADZ轴归零教程
  14. Oracle密码过期改密失败
  15. ting56 下载 有声小说 超禁忌游戏
  16. ibm 的java实现_IBM Java Toolbox for 实现IBM i 消息通信
  17. 8086/8088CPU内部结构
  18. GDOI2018滚粗记
  19. 数据挖掘工具主要有哪几种?
  20. Java解析pmml格式机器学习模型

热门文章

  1. cout与cerr区别
  2. 统计|如何理解多元回归下的多重可决系数
  3. 怎样修改word页面页码
  4. 【论文学习】Multi-modal Knowledge Graphs for Recommender Systems
  5. 视频剪辑的工作前景是什么?
  6. C语言实现约瑟夫环问题
  7. 用MATLAB设计FIR滤波器
  8. Neyman-Pearson 奈曼-皮尔逊决策分析
  9. 设置Android app背景图片(Android studio)
  10. layim之初始化配置