DAG (Directed Acyclic Graph) 是计算机科学和数学中的一个重要概念。顾名思义,DAG 是一个有向无环图,意味着它由节点和有向边组成,且不存在任何从一个节点开始并回到该节点的闭环。
1. 基本定义:
- 有向图 (Directed Graph) :图中的每条边都有明确的方向,从一个节点指向另一个节点。
- 无环 (Acyclic) :图中不存在任何闭环或循环。
2. 特点:
- 由于其无环的特性,DAG 有明确的起点和终点。
- 每个节点可以有任意数量的后续节点,但不会回到先前的节点。
- 在 DAG 中,存在至少一种节点的顺序,使得每一条有向边都从顺序的前面的节点指向顺序的后面的节点。
3. 应用:
- 计算机科学:DAG 常用于表示信息的依赖关系,如在编译器优化、数据处理管道、任务调度等领域。
- 区块链技术:一些新的分布式账本技术(如 IOTA 和 Hedera Hashgraph)使用 DAG 替代传统的链式结构,以实现更高的吞吐量和更低的延迟。
- 拓扑排序:由于 DAG 的无环特性,它们常用于拓扑排序,这是一种线性化有向图的方法,使得对于任意两个节点 U 和 V,如果存在从 U 到 V 的路径,那么 U 总是在 V 之前。
4. DAG 与区块链:
-
速度与吞吐量:
- DAG:由于其并行性,DAG 可以快速处理大量并发交易,这可能导致更高的吞吐量和更短的确认时间。
- 传统区块链:交易必须等待被添加到下一个块中,并且在大多数情况下还需要等待多个确认,这可能导致较低的吞吐量和较长的确认时间。
-
去中心化程度:
- DAG:理论上,由于每个交易都参与验证,DAG 可能更为去中心化。然而,某些 DAG 实现可能仍然依赖于一组特定的节点来维持网络的安全性。
- 传统区块链:尽管区块链的目标是去中心化,但在实践中,如比特币或以太坊,矿工的集中可能导致中心化的趋势。
-
交易作为节点:在 DAG-based 的区块链系统中,每个交易都被视为 DAG 中的一个节点。
-
验证关系:当某个节点(交易)加入 DAG 时,它必须选择一或多个先前的交易并验证它们。这意味着,为了加入系统,新的交易必须证明它已经查看并验证了先前的交易。这种验证行为用有向边来表示,指向它验证的交易。
-
并行添加:由于这种结构,多个交易可以几乎同时加入 DAG,因为它们可能验证不同的先前交易。这与传统区块链不同,后者在任何时刻只能添加一个新块。
-
权重与确认:随着时间的推移,新的交易会验证旧的交易,增加它们的权重或确认数。在某些 DAG 系统中,当交易达到某个权重阈值时,它被视为"完全确认"。
-
无需全局共识:由于每个交易都对先前的交易进行了验证,因此不需要像传统区块链中那样的全局共识过程。随着更多的交易加入并验证,系统逐渐达到了分散的共识。
5. 与传统区块链的主要差异:
- 结构:传统区块链是一个线性结构,每个新块都依次添加到前一个块之后。而 DAG 是一个图结构,允许交易并行加入。
- 共识机制:在传统的区块链中,矿工或验证者通过某种共识机制(如 PoW 或 PoS)来达成共识。而在 DAG 中,共识是通过交易验证其他交易的方式分散地达成的。
- 速度与效率:DAG 的结构允许更高的交易吞吐量,因为多个交易可以并行处理。传统区块链由于其线性结构,通常受到吞吐量的限制。
6. DAG 区块链项目:
- IOTA:也许是最知名的使用 DAG 的区块链项目。它使用了一个名为 "Tangle" 的 DAG 结构。在 Tangle 中,每个新交易都需要验证两个先前的交易。IOTA 主张其网络设计适用于物联网(IoT)中的微交易。
- Nano (之前称为 RaiBlocks) :使用 DAG 结构来实现快速、无费用的交易。每个账户在 Nano 网络上都有其自己的链,这种结构称为"block-lattice"。
- Hedera Hashgraph:虽然技术上不是一个纯粹的 DAG,但它使用类似的概念。Hashgraph 使用投票算法来达成共识,并声称能提供无需授权的、高速的和安全的交易。
- Byteball:使用 DAG 替代传统的区块链来记录交易。Byteball 系统中的每个新交易都引用一个或多个先前的交易。