区块链技术非常热门,但随着越来越多人使用比特币、以太坊等区块链,使得效率低下的问题越来越突出。尤其是2017年6月以来,ICO市场爆炸式增长,人们疯狂的购买以太坊用于投资ICO,导致以太坊网络经常严重延迟。有些人为了能加快以太坊上的转账,甚至将手续费(Gas费用)调高到几百美金。这已经严重违背了区块链作为去中心化支付手段的初衷。

为此,扩容已经成了当前区块链技术发展的重要议题。并出现了分片、侧链、DPoS等扩容解决方案。

除了这些对现有区块链改进的方案之外,还出现了一项受到广泛关注的技术:有向无环图,即Directed Acyclic Graph(DAG)。

网上关于DAG的资料并不很多,仅有的一些资料也非常学术性,较难理解。本文尝试用较易理解的方式来解释下什么是DAG技术。

我们知道,区块链技术是一种链式数据库结构,每个区块就像铁链一样,环环相扣。

DAG其实与数组、排列、区块链一样,也是一种数据结构。

但与区块链不同,DAG将最长链共识改成最重链共识。传统区块链上,新发布的区块会加入到原先的最长链之上,并且以所有节点都认为最长的链为准,依次无限蔓延。而DAG中,每个新加入的单元,不仅仅只加入到长链里的一个区块,而是加入到之前的所有区块。假设当你发布新交易时,前面有两个有效区块,那么你的区块会主动同时链接到前面两个之中,DAG 中的每个新单元,验证并确认其父单元,以及父单元的父单元,慢慢可达创世单元,并将其父单元的哈希包含到自己的单元里面。随着时间递增,所有交易的区块链相互连接,形成图状结构,如若要更改数据,那就不仅仅是几个区块的问题了,而是整个区块图的数据更改。DAG这个模式相比来说,要进行的复杂度更高,更难以被更改。下图是一个网状的DAG结构:

最著名的应用DAG技术的项目是IOTA,IOTA改进了DAG,并提出了Tangle(缠绕)方案。即要验证新的交易前,只要直接验证之前的两个交易,这也使得在这两个交易之前所有被验证过的交易得到间接验证。在IOTA的Tangle中,有一个权重积分的概念,所谓权重积分是指它自身的权重与它验证过的所有交易的自身权重之和。在DAG 结构中,交易总是自己创建并发布。从理论上看,攻击者总是可以建构比它要推翻掉的那个交易权重更高的交易用以双花。

看了以上文字后,是否有点晕了,没关系,下面,我通过图形来形象的解释一下:

首先来看区块链,区块链是一种链式数据结构,如下图:

而DAG的数据结构则可以用下图来表示:

在上图中,1和2号是创世节点;第3个节点产生时,只需要确认1号和2号的交易;第4个节点产生时,只需要确认2号和3号,以此类推。

上图是已经经过拓扑排序后的图,比较好理解。它也可以表示成网络图结构,如下图:

如果还没搞懂,那我们再用服装缝制工艺来表示区块链和DAG数据结构(虽然比方不是很合适,但便于普通人理解):

下图是平针针法,就好像区块链,是一个单链的结构。

下图是回针针法,每次产生新的节点(针眼)后,需要往回走一针,就好比DAG,需要有之前的两个节点同时进行确认。

DAG不是区块链技术,但是现在通过DAG技术实现的去中心化网络仍旧被归在区块链板块中。目前比较流行的除了上文提到的IOTA外,还有ByteBall(字节球),xDAG,以及SPECTRE。这些项目都在基础的DAG结构上做了优化处理。

DAG技术才刚刚起步,有很多不完善的地方,但我相信该技术的发展前景会非常良好。目前IOTA的TPS(每秒交易次数)可以达到600-900笔,已经超过paypal的交易能力。随着应用的人更多,执行效率会更高。这是DAG技术与区块链技术最大的不同:区块链技术的效率会随着应用的增加而降低,而DAG却恰恰相反。

(本文尽量用浅显的比方解释DAG,不当之处望谅解,我们正在做相关产品开发,有兴趣可关注)

http://www.bcfans.com/zhuanlan/kuankecaijing/23777.html

有向无环图(DAG)技术白话解读相关推荐

  1. 数据驱动应用(三):异构数据服务(基于有向无环图DAG)

    概述 主要概念 数据服务(Data Service):对异构数据源,基于有向无环图,提供异构数据的查询和推送能力. 指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量.例如: ...

  2. 后端 绘制有向无环图(DAG图)

    因为公司的某个系统比较古老,里面的 job 的管理几乎都是直接通过操作数据库来实现的,对于一般的操作还可以忍受,但是每次想知道 job 之间的依赖关系的时候,就会相当难受,于是便脑袋很抽地一定要写一个 ...

  3. Apache Spark中的有向无环图DAG

    Apache Spark中的有向无环图DAG 由DATAFLAIR TEAM ·更新· 2018年11月21日 1.目的 在本Apache Spark教程中,我们将了解Apache Spark中的DA ...

  4. 大数据工作流任务调度--有向无环图(DAG)之拓扑排序

    拓扑排序(Topological Sorting) 回顾基础知识: 1.图的遍历: 图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次.注意树是一种特 ...

  5. C#实现有向无环图(DAG)拓扑排序

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...

  6. 有向无环图DAG 拓扑排序 代码解释

    目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...

  7. `Computer-Algorithm` 有向无环图DAG

    Contents 有向无环图 定义 性质 应用 最小路径点覆盖 最小路径重复点覆盖 路径独立集 至少新添加几条边,使得DAG成为SCC 有向无环图 定义 性质 + let HHH be the set ...

  8. 有向无环图(DAG)拓扑排序的两种方法

    如下图的DAG: 第一种: (1)从AOV网中选择一个没有前驱的顶点并且输出它: (2)从AOV网中删除该顶点,并且上去所有该顶点为尾的弧: (3)重复上述两步,直到全部顶点都被输出,或者AOV网中不 ...

  9. 有向无环图(DAG)的温故知新

    当我们学习数据结构的时候,总是觉得很枯燥,而当我们解决实际问题的时候,又往往因为对数据结构了解的匮乏而束手无策.从问题中来,到问题中去,在某一点上的深入思考并且不断的实践积累,或许是个笨办法,但笨办法 ...

  10. java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

最新文章

  1. 数据库mysql爆满怎么搞_MySQL 磁盘满了,怎么办??
  2. 8.36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要一次搬完。问:男、女、小孩各多少?
  3. COVID-19研究助理
  4. 在Python中使用OpenCV裁剪图像
  5. Linux core dumps 的生成
  6. 使用truss、strace或ltrace诊断软件的疑难杂症
  7. 爱发php企业发卡网源码_企业级发卡平台源码,界面友好,支付通道齐全,运营级发卡平台源码...
  8. 数学最重要 :一个经济博士的总结(常春藤)Ph.D
  9. Kotlin教程(一):走进Kotlin的世界
  10. Python全栈工程师 (exercises)
  11. 管理中的计算机应用0206,绩效管理那些事
  12. MISC之常用编码总结
  13. 专升本英语——菜鸟学习笔记【知识点齐全-轻松学习】!!!
  14. Chromium网页Layer Tree绘制过程分析
  15. python冒号排序教程
  16. Java 利用Graphics2D 合并图片(png格式可设置透明)
  17. debian 安装wine
  18. 一图看完北京互联网公司分布!中关村、后厂村、望京互联网公司扎堆圣地。
  19. Allegro PCB对某个网络进行高亮以及取消高亮
  20. 【Redis详细安装教程】

热门文章

  1. matlab显示函数表达式_MATLAB在绘图时的用法——线形图
  2. List中的FindAll
  3. Unity杂谈:敌人视野感知的实现
  4. 将文件固定到任务栏右边(还在为找不到文件烦恼的请进)
  5. h2数据库表结构转mysql_H2数据库使用 详解
  6. mysql row函数的使用方法_php row()函数介绍与使用方法详解
  7. java有箭头函数吗_深入理解箭头函数
  8. Oracle 清空表的方式
  9. php上传图片卡_如何利用PHP实现上传图片功能详解
  10. 关于springmvc的helloworld的压测报告