导读:区块链作为独立技术的概念在2015年开始普及。在此之前,它就是众所周知的比特币技术的数据结构。随着比特币的流行,我们将比特币里面用到技术和概念分类为区块链1.0。随着以太坊作为分布式应用程序的平台运行,人们开始将以太坊分类为区块链2.0。现在市场正在争夺谁来命名区块链3.0,而很多人认为DAG技术是区块链3.0的最佳选择 !那到底什么是DAG技术?与传统区块链相比其有具有什么优势?
DAG(Directional Acyclic Graph ),一般译为有向无环图,或定向非循环图。其是计算机领域一个常用的数据结构,因为独特的拓扑结构所带来的一些特性,经常被用到处理动态规划,导航中寻求最短路径,数据压缩等场景中。
第一次提出DAG跟区块链结合是在Nxt社区,当时Nxt社区提出,改变区块的链式存储结构,变成区块DAG。在区块打包时间不变的情况下,网络中可以并行的打包N个区块,网络中的交易就可以容纳N倍。比如小编上一篇写的RaiBlocks浅析,RaiBlocks使用“区块点阵”技术,每个账户都有自己的区块链(账户链),账户链记录本账户的交易/余额历史。当多个账户同时发起交易时,对于每一笔交易而言,只需要交易的发送端和接收端两者之间进行结算 ,所以交易是非常轻量级的,一个交易只需要单个UDP数据包,并且各个交易独立处理。同时,虽然每个账户都拥有单独的链,但是整个账本却可以用DAG的形态来表示 。一个交易通过一定的机制进行验证后即被认为是合法的交易被添加到DAG中 ,确保整个DAG账本的不可篡改。这种基于多链和DAG账本的模式使得RaiBlocks可以提供无限的即时交易以及无限的可扩展性。
虽然DAG技术与区块链的初步结合给传统区块链的效率问题带来了极大的提升,但可以发现这个时候DAG跟区块链的结合还是停留在侧链的思路,不同类型的交易可以并行在不同的链条进行,达到提升性能的目的,其依然没有跳出区块这个范畴。但看看不管是比特币还是以太坊,我们总会提到出块速度这样的概念,比特币每十分钟才出一个块,6个出块确认就要一个小时,以太坊好很多,但是出块速度也要十几秒。为什么一定需要区块呢?于是,之后对于DAG技术就提出了无区块的概念,目前比较盛行的项目有IOTA和Byteball。
IOTA和Byteball均采用DAG的结构设计,有相当大的相似性。在DAG中交易不会分组为块,而是直接连接。每个新交易通过引用的方式确认一个或多个以前的交易,并把自己连接到DAG上。在DAG中,由于不必序列化大小有限的区块中的交易并将它们全部放在单个通道中,对交易吞吐量没有理论限制。基于DAG的结构可以并行处理大量事务,并且更加灵活的适应当前负载。另外,DAG中不需要通过昂贵的PoW来封装区块,使得系统的社会成本降低从而为外部世界创造价值。
我们可以看出,相较传统区块链,DAG具有以下优势:1.交易速度快,吞吐量大; 2.几乎无交易费,对小额支付友好; 3.不需要专门矿工参与; 4.可扩展性强。
最后,不得不提的是DAG的见证人机制,这在小编看来略微有点诟病。由于DAG不必序列化区块,所以只能通过在DAG中寻找一条主链来定义交易之间的绝对次序。DAG中的主链通过多数见证人(witness)投票确认,粗略的来说DAG中包含数量最多的,被多数见证人确认单元的链即为主链。见证人是非匿名长期参与社区并拥有良好信誉的人,或是主动维护网络健康发展的组织,或者自身利益与DAG账本的正确性密切相关的人。而在当前情况下,无法完全保证每个见证人都做出正确的判断,只能安全的假设多数见证人是诚实的。这一部分不管是DPOS、POS、PBFT,相信大家最终都会在效率、安全性上寻求一种平衡。
DAG技术作为有可能成为区块链3.0的候选之一,已被越来越多的区块链项目所接受。同时,各个项目研发人员也不断尝试在DAG技术之上有所创新。像高通博士杨嗣超之前就有提出一种R-DAG(有规则的DAG)技术,有兴趣的技术朋友可以去了解一下,相信之后也会有更多的科创人员就DAG技术进行各方面的实验创新。