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

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 ————

历史文章

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

猜你喜欢

转载自blog.csdn.net/NewBlockChain/article/details/106855285
DAG