「火星社群」|火币研究院首席分析师胡智威:一文了解DAG技术
12月18日20:00,火币区块链研究院胡智威做客「火星币优」数字资产研究学习群,做了主题为“DAG技术解析”的分享,核心观点如下:
1.按照火币研究院对于区块链技术的划分方法,DAG技术也主要属于区块链技术栈上的账本层上面。
2.由于DAG自身这种异步、高并发的特性,在应用场景上,DAG比较多的是运用在IoT等场景中,发挥出其不需要进行打包区块运算、可支持高并发的特性。
3.DAG是从数据账本层面的一种改进,打破了原有区块的概念束缚,的确有其技术创新之处。但正如区块链无法解决所有世界上的问题一样,DAG也无法解决所有区块链的问题。
以下为胡智威分享内容:
DAG技术解析
在具体谈DAG之前,我们先来回顾下区块链。可以说,区块链是一种分布式账本技术,而分布式账本技术却不局限于“区块链”这一种具体技术体现形式。
所以为了改进原有技术、满足更多的实际业务应用场景,更多的分布式账本技术正在被探索和应用当中。甚至我们之前开玩笑说,传统IT领域里的ending定律正在反向的体现在区块链领域里:“所有能实现分布式账本的技术,都会被用来实现分布式账本”,DAG就是其中之一。
DAG(Directed AcyclicGraph,有向无环图)是一种数据结构,表示的是一张有向图,并且在这个图中,从任意顶点出发都无法回到该点(无环)。
实际上,DAG这种数据结构,在传统的技术领域里已有比较多的应用。甚至在以太坊里其实也用到了相关的结构。在以太坊的PoW哈希计算时,用的Ethash算法就需要利用DAG的结构来存储相关数据。
所以我们这里先把今天讨论的范围限定一下:只讨论把将前后账本交易以DAG形式进行组织的项目,并在后面简称为DAG项目。
基于DAG的分布式账本技术在近年来被提出后,被很多人认为有希望替代狭义上的区块链技术,而很多基于DAG技术的项目在设计时的目标是保留区块链的优点并且改进区块链的缺点。
和传统线性区块链结构不同,DAG的这种交易记录之间形成的是一个有向无环图的关系结构。这里,我们借用IOTA的图展示如下:
其中的方框都代表是一个交易,而箭头指向的是后一笔交易对前一笔交易的引用或确认。
对比传统的区块链网络,每个区块中有很多笔交易,矿工打包好后统一发送;而在 DAG 网络中并没有“区块”的概念,网络的最小单元是“交易”。
相当于传统的区块有点类似于火车车厢,人(交易)装满后只能等待下一个车厢进站,并寄希望于能挤上下一节车厢;而DAG会灵活很多,因为是按人(交易)作为基本单元,底层可以支持实现随到随走。
所以不少观点也认为,DAG其实已不算传统意义上的“区块链”,因为已经不是区块+链的底层数据结构。
按照火币研究院对于区块链技术的划分方法,DAG技术也主要属于区块链技术栈上的账本层上面。
DAG的这个概念在今年比较火,不过从我们的数据统计上来看近期也和整个市场一样有所降温。
我们也自己写了一个爬虫从Reddit上统计了DAG被提及的词频,并与Blockchain、Cryptocurrency进行了对比。
可以看到虽然大的趋势上这几个概念都和数字资产市场走势比较吻合,但去年年底到今年年初的时候,相对的,DAG一直保持了较高的热度水平。当然随着近期市场整体表现不佳,以上这几个概念的热度都有所降低。不过,群友今天的热情程度,看来已经远超过这些冰冷的数据了。
典型项目
和DAG相关的项目目前也比较多,在这里我整理了一下。不过区块链技术发展迅速,难免挂一漏万。所以如果有群友有更多信息,欢迎提出我们一起讨论。
目前比较典型的DAG项目(排名没有先后)至少包括以下这些:IOTA、Byteball、Nano、Mixin、TrustNote、DAGX、Dagger、Hashgraph、HyCon、Nerthus、CyberVein等等。
由于DAG自身这种异步、高并发的特性,在应用场景上,DAG比较多的是运用在IoT等场景中,发挥出其不需要进行打包区块运算、可支持高并发的特性。
实现难点及解决方案
然而DAG的开发也不是那么容易,在实现时需要重点考虑的问题包括共识、智能合约等,下面我们来具体讨论一下。
首先我们来看下共识方面。使用DAG时在安全方面要对一些情况进行重点关注,包括双花、影子链等问题。
对于双花问题:DAG 异步通讯的特性一定程度上提高了双花攻击的可能性。例如,攻击者在网络的两个不同的位置添加了两笔冲突的交易(双花),交易在网络中不断向前验证,直到它们出现在同一笔交易的验证路径上,网络才会发现冲突,这时这两笔交易汇聚成的共同祖先节点才能判断哪一笔交易是双花攻击。
而如果将交易路径控制的过短又会存在类似“Blowball”的问题:当极端情况下绝大多数交易都较为“懒惰”(Lazy Tip)、只参考早期交易时,交易网络会形成一个以少数早期交易为核心的中心拓扑。这对依赖于交易的不断增加而提高网络可靠性的共识来说,也不是一件好事。
影子链问题其实是双花问题的进一步升级。由于存在双花的潜在问题,当攻击者可以构建出足够数量的交易后,就可能从真实的网络数据中分叉出一个欺诈性分支(影子链),其中包含着双花交易,然后将这个分支合并到DAG网络中,特定情况下这个分支有可能取代原有交易数据。
而这些问题本质上都可以归为共识问题。因为隐藏在双花、影子链问题背后的,其实是共识机制的设计。共识机制是使得各个节点达成一致性的一种过程;从区块链交易层面来看,即使得交易获得全局性的排序。
解决方法
这种共识的解决办法目前也比较多,第一种思路比较直接,是引入一些中心化的验证机制,例如主链或见证者等等,来保证安全性。这里我们以IOTA和Byteball这2个为例来具体说明一下。
IOTA项目中采用了马尔科夫链蒙特卡洛(Markov chain Monte Carlo,以下简称MCMC)的方式来解决该问题。IOTA为交易引入了累积权重(Cumulative Weight)的概念用来记录该笔交易被引用的次数,目的是表示其交易的重要性。MCMC算法通过对累积权重进行加权随机游走,选择目前网络中已存在的交易作为新增交易的参考。即被参考越多的交易路径越容易被算法选中。游走策略在1.5.0版本中也进行了优化,可将交易拓扑的“宽度”控制在一个合理范围内,使得网络更加安全。
但在平台启动初期,由于参与节点和交易数量均有限,所以很难避免一个恶意机构通过大量节点发送出海量的恶意交易使得整个网络受到影子链的攻击。因此就需要一个权威的仲裁机构来判定交易的有效性。在IOTA中,这一节点为Coordinator,它会定期对目前交易数据网络(Tangle)进行快照;包含在快照中的交易即被确认为有效交易。但Coordinator并不会一直存在。随着整个网络的运行和成长,IOTA会在未来某一时间取消掉Coordinator。
Byteball改进方案的特色在于其对于见证人(witness)和主链的设计。因为DAG的结构带来了很多偏序关系的交易,而要避免双花则需要对这些交易建立一个全序关系,形成一个交易主链。主链上较早的一笔交易作为有效交易。而由知名用户或机构担任的见证人通过不断的发送交易确认其他用户交易,从而形成主链。
但这种方式也有一些潜在的“副作用”。尽管DAG从理论上来说TPS比较高,不过对于分布式账本来说,另一个指标CTPS(确认交易速率)更值得关注。而CTPS可能会因为这种中心化的确认方式而受到影响。具体的,欢迎关注我们之前做的研究报告: https://www.jianshu.com/p/b206b94d99d7
另一种方式是采用一种比较适合DAG的共识机制。
其中一些项目通过PoW、异步拜占庭共识来解决一致性问题,另有一些项目采用创新型的协议例如SPECTRE等。
另外,有一些项目是在共识机制上,还加入了TEE(可信执行环境)来增强安全程度。
另一个DAG在实现时需要关注的重点是可编程性/智能合约的实现。
回顾历史我们可以看到DAG的发展其实和狭义上区块链技术的进展是有类似之处的,即早期的一些DAG项目和狭义的第一代区块链都是以支付作为其主要手段的,而当DAG实现智能合约等较强可编程功能支持后,可认为其进入第二代的阶段。
DAG由于其自身特性,对于智能合约的确定性实现存在一定困难。
不过不少项目也在探索解决方式。例如可以先实现一个非图灵完备的智能合约或可编程脚本。
或者采用类似Layer2的分层理念,将智能合约跑在一个更高层次的子链或侧链上;底层仍然使用DAG来做Layer1的扩展。
结束语
今天想和大家分享的差不多是以上内容。最后,综上我们可以看到, DAG是从数据账本层面的一种改进,打破了原有区块的概念束缚,的确有其技术创新之处。但正如区块链无法解决所有世界上的问题一样,DAG也无法解决所有区块链的问题。
对于区块链扩展性的提高,我们不应仅仅依赖于包括DAG在内的某一技术点,例如账本、共识等等的概念调整,而应综合使用多种技术。