DAG(Directed acyclic graph),有向无环图,是计算机领域一个常用的数据结构,因为独特的拓扑结构所带来的一些特性,经常被用到处理动态规划,导航中寻求最短路径,数据压缩等场景中。
第一次提出DAG跟区块链结合是在Nxt社区,可以发现DAG最初出现就是为了解决区块链的效率问题。例如比特币的效率一直比较低,基于工作量证明共识下的出块机制是一个原因,由于链式的存储结构,整个网络中同时只能有一条链,导致出块无法并发执行。社区有人提出DAG的拓扑结构来存储区块,这个时候更多还是类似侧链的解决思路,不同的链条存储不同类型的交易,这样降低出现双花的可能,在之后某个节点需要合并的时候,几个分支再归并到一个区块。
DAG不是把所有数据打包成区块,再用区块链接区块,而是每个用户都可以提交一个数据单元,这个数据单元里可以有很多东西,比如交易、消息等等。数据单元间通过引用关系链接起来,从而形成具有半序关系的DAG,因此可以支持极大的并发量和极高的速度。DAG在交易吞吐量方面理论上没有限制。再者,传统区块链在节点储存方面也有较大限制,除非在使用轻客户端的情况下,节点一般需要同步全网的所有交易,才能使用智能合约等功能,而节点需要同步的数据正在快速的增加。DAG在储存方面也有优势,用户只需要维护自己跟自己有关的交易单元以及其父辈等即可,在单节点上无需拥有全网交易数据。
然而,就DAG架构本身而言,也存在一个很大的隐患——不能完全保证交易状态的原子性和统一性。从时间上来讲,可能存在特定节点(比如远程节点)确认某笔交易的时间无法估计;从节点上来讲,全网络节点中的某个节点可能无法更新某一时刻的交易信息,即该节点没有被广播到某一时刻的交易信息。这些情况对于很多商业形态来说是一个极大隐患。
为了解决这一问题,CyberVein对现有的DAG架构进行了改进——在DAG架构中加入了智能合约。
在CyberVein中,除了普通的交易单元外,还有合约单元。与普通交易单元不同的是,合约单元引入了时间戳和直系父辈的概念。时间戳将用UTC记录该单元被广播时间,使对智能合约的操作形成一个操作流。一个用户可能由于网络距离而在不同时间段接收到针对同一个智能合约的合约单元,而时间戳可以让合约单元串联,从而保证的数据库结果的一致性。而直系父辈是指,保留原有单元中的关联父辈单元的前提下,再关联一个当前智能合约在网络中的最后一个合约单元。
CyberVein的DAG架构是呈网状结构的,因此CyberVein的架构中存在多个智能合约。CyberVein中智能合约的交互就像传统区块链中的“跨链”,而CyberVein所提出的时间戳和直系父辈概念则是新型交互式智能合约的重要技术和逻辑保障。
领取专属 10元无门槛券
私享最新 技术干货