DAG(Directed Acyclic Graph),中文译作“有向无环图”,作为一种新的底层账本结构被重新提出来。“有向”指有方向,“无回”指没有回路。在第一篇文章里我们通过讨论区块链提炼了两个关键词:账本结构共识机制。这篇文章将着重从结构上介绍一下DAG和区块链的关系。在后续的文章里将依次介绍与这种结构相对应的共识机制。

 1  DAG长什么样

我都非常熟悉Merkle树的这种数据结构,比特币每个区块的内部就是用Merkle树来记录交易信息的,见图片1。

图片1  区块结构

来源:邹均 张海宁 唐屹 李磊,《区块链技术指南》,机械工业出版社

可以看出来,Merkle树属于一种有向树结构,树里的每个顶点只能指向一个之前的顶点,整个数据有个明显流动方向。DAG结构则可以允许每个顶点指向多个之前的顶点,整个数据流也有一个明显的方向。另一种数据结构为有向图,与DAG不同的是有向图允许有数据回流,整个结构的数据流不是很明显。三者之间的区别见图片2。

图片2 有向树、DAG图和有向图示意

来源:有向无环图,https://baike.baidu.com/item/%E6%9C%89%E5%90%91%E6%97%A0%E7%8E%AF%E5%9B%BE/10972513?fr=aladdin

 2  区块链是一种特殊的DAG结构

在对DAG的结构有一个直观的认识之后,我们来梳理一下为什么认为区块链是一种特殊的DAG结构?

在《从区块链到DAG(一)--区块链的账本结构和共识机制》一文中讲到,区块链是否分叉和出块速度以及广播速度有关。当出块速度超过广播速度的时候,会出现多个区块同时在广播的情况,分叉也就产生了,分叉越多安全性越差。比特币为了减少分叉,在性能和安全性中找到的平衡点为:每十分钟出一个块。现在我们假定每次出块的时间足够长,长到不会出现前一个区块还没广播结束就有新区块挖出的情况。那么这个区块链的结构就是一条单链,如图3。

图片3 单链结构

来源:From Blockchains to BlockDAGs, https://www.youtube.com/watch?v=tk38AAV_whw

实际上,由于网络延迟等原因难免出现分叉的情况,所以实际的区块链结构会如图片4所示,再通过账本共识只取其中一条有效的主链(黄色),剩下的区块(红色)里的交易信息都是无效的,不会被采纳。

图片4 结合账本共识的区块链结构

来源:From Blockchains to BlockDAGs, https://www.youtube.com/watch?v=tk38AAV_whw

现在先抛开账本共识,即先不考虑如何选取有效的主链,单从底层网络结构上看,一个典型的区块链结构如图片5所示,一个典型的DAG结构如图6所示。

图片5 区块链结构

来源:From Blockchains to BlockDAGs, https://www.youtube.com/watch?v=tk38AAV_whw

图片6 DAG结构

来源:From Blockchains to BlockDAGs, https://www.youtube.com/watch?v=tk38AAV_whw

可以看到,两种结构唯一的不同就是DAG的区块可以指向之前的多个区块,而区块链的只能指向之前的唯一的区块。具体来说区块链的区块头只能包含一个区块的哈希值,指向唯一的父区块;而DAG结构下区块的区块头可以包含多个区块的哈希值,指向不同的前代区块。如图片7所示。

图片7 区块链和DAG结构的区块头指向

来源:DAG的妙用(三)——比特币协议的扩展,https://mp.weixin.qq.com/s/KeQDVQMJLQlyXQcywfE8sQ

现在我们引入分叉系数k,指代网络可以允许的分叉个数。当k=0的时,整个网络不允许分叉,如图3。这种不允许分叉的网络就是区块链。比如前一篇文章里提到的比特币符合这个定义;以太坊虽然有叔区块的分叉,但是这些叔区块仅仅用作判断主链权重的计数,他们最后是不会被添加到主链上的(叔区块记录的交易信息不计入主链),所以以太坊也符合这个定义。DAG网络的k值一定是大于0的整数。所以从结构上DAG是区块链结构的拓展,区块链是一种特殊的、简化的DAG。

 3  DAG结构对性能的影响

简单来说,我们可以把DAG看成一种允许分叉的网络结构允许的分叉个数由分叉系数k决定。那么一个允许分叉的网络到底意味着什么?意味着出块的速度可以超过广播速度。这一方面导致单位时间内打包的交易变多了;另一方面当一个区块A在被全网广播的时候,另一个分叉区块B也在被全网广播,最后一些节点只会确认A,另一些节点只会确认B,所以DAG允许网络中的节点在同一时间记录的不一样的信息。这两方面综合起来就使DAG呈现出高并发,弱同步的特点。DAG是一种异步记账,这种记账方式可以极大的提高网络处理信息的速度,即TPS。而区块链是一种强同步记账的网络,它要求网络中的每个节点在同一时间记录相同的信息。然而这一要求往往限制住了区块链网络处理信息的能力,使TPS比较低。

那么问题来了,这种允许分叉的异步记账网络要用什么样的共识?在上一篇文章中我们提到共识机制分为出块共识账本共识。DAG的出块共识可以和区块链一样,比如也采用POW,由于允许分叉,所以出块时间可以被设置的非常短。出块共识也可以和区块链不一样比如IOTA项目,直接取消了打包出块这一过程,只要发生交易就立刻写入网络(DAG图中的每个方块不是区块而是一笔笔的交易),由此获得超高速处的交易处理的能力。

DAG的账本共识要比区块链复杂得多。要如何预防节点作恶?当出现两个相互矛盾的交易时要怎么筛选?如何防止“双花”?随着底层网络结构的复杂化,账本共识也被赋予更高的要求。在后续的文章中将会重介绍。

参考资料:

[1] 邹均 张海宁 唐屹 李磊,《区块链技术指南》,机械工业出版社

[2] From Blockchains to BlockDAGs, https://www.youtube.com/watch?v=tk38AAV_whw

[3] DAG的妙用(三)——比特币协议的扩展,https://mp.weixin.qq.com/s/KeQDVQMJLQlyXQcywfE8sQ

[4] Jeff Zhou:DAG高速异步区块链技术,https://www.jianshu.com/p/45d73e0e74ec

————  e n d ————

历史文章

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

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

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

从区块链到DAG(二)--DAG的基本结构相关推荐

  1. 第10讲 | 深入区块链技术(二):P2P网络

    在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们 ...

  2. 蚂蚁区块链投票案例(二)---投票合约设计开发

    文章目录 摘要 背景 案例场景 用例分析 系统管理员注册 添加小区.添加房屋 编辑房屋 发起投票 统计投票 业主注册 业主实名认证 客房关系认证 投票 合约设计 设计原则 合约设计 合约开发 命名规则 ...

  3. 陀螺产业区块链第十二季 | “铭镜”智慧农牧区块链可信溯源平台

    区块链,一种由多方共同维护.分布式储存的记账技术,可通过信任机制的重构拓宽协作关系的纵深度,在推动产业变革.创建数字经济等方面有着关键作用.目前,在全球范围内,已有多个国家政府表明将积极发力区块链领域 ...

  4. 区块链开发(二)部署和运行第一个以太坊智能合约

    区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月22日 本文首发8BTC 网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境 ...

  5. 区块链学习笔记二之区块链的加密技术

    概述 区块链最常见的用途是消除交易双方的中间环节.举个例子来说,学位认证的过程.当你投递简历到企业时,企业一般需要验证你的学位在类似于学信网等第三方验证平台可查,这相当于依托第三方验证平台验证你的过往 ...

  6. 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》

    以太坊:下一代智能合约和去中心化应用平台 以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有 ...

  7. 【区块链】(二)之传统网络协议

    最近在研究区块链,广义的区块链技术,包含点对点网络设计.加密技术应用.分布式算法的实现.数据存储技术的使用方面.也就是说,区块链是点对点传输.我们现在的网络使用的大多是TCP/IP协议,除此之外还有一 ...

  8. 区块链测试(二):区块链测试

    区块链实质上就是一个分布式系统软件.因此,在质量管理上,系统软件和分布式系统是区块链测试的两个大方向.目前业界主要有公有链.联盟链以及私有链三种模式,不管哪种运转模式,对于区块链这种底层平台软件,测试 ...

  9. 两军问题和拜占庭将军问题的区块链解读(二)

    转自:https://www.jianshu.com/p/29db1b94c677 拜占庭将军问题是区块链技术中另一个经常被提到的模型.本篇将尽量用通俗的语言解释拜占庭将军问题的本质以及背后的经典算法 ...

  10. 区块链技术与应用2——BTC-数据结构

    文章目录 比特币-数据结构 1. 区块链(block chain) 2. 默克尔树(Merkle tree) 3.哈希指针的问题 比特币-数据结构 1. 区块链(block chain) 哈希指针: ...

最新文章

  1. 使用好的工程实践交付可交付产品
  2. JavaScript工作原理(二):V8引擎和5招高效代码
  3. 使用Swagger创建Api
  4. 崂山白花蛇草水:旧款变爆款老字号“有预谋”
  5. LeetCode 1374. 生成每种字符都是奇数个的字符串
  6. 冲啊电竞er,纵享游戏人生,你还需要一副索尼耳机!
  7. 我有一个网站,想提高点权重
  8. Kettle增量同步变动数据
  9. C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
  10. spring boot 设置启动时初始化DispatcherServlet
  11. 3dmax su 简单_sketchup导入3Dmax技巧
  12. 网络编程基础及代码实现
  13. android 分区 PT,Android:pt 、sp、dp之间的换算
  14. 统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。
  15. dva处理_Dva搭建项目
  16. 2009年计算机统考考研试题及参考答案
  17. Wi-Fi Mesh协议(1)
  18. 《Python编程从入门到实践》习题06
  19. chrome94+版本出现的跨域问题及解决方案
  20. ANSYS接触类型概述

热门文章

  1. GitHub Git GitLab 在Idea中使用Git
  2. mysql 判断一年有多少个星期一
  3. 趣味linux教程,趣味Linux/Ubuntu
  4. CSGO(KZ模式)服务器搭建教程(windows系统)包含申请全球服务器操作方法
  5. Tinkpad x13 突然检测不到外接显示屏
  6. matlab中hold all,matlab中的hold
  7. Python的星号-----用途及使用方法
  8. Ae:文本图层 - 动画制作工具属性
  9. win10下程序无法录音或使用麦克风
  10. 垂直同步、绘制效率、显示器刷新频率与帧率(转)