跳转至

区块 DAG(Directed Acyclic Graph,有向无环图)

区块 DAG 是一种用于区块链的网状数据结构,与传统链式结构不同,它允许多个交易并行处理,提升系统扩展性和吞吐量。

一句话概括:DAG 是面向未来的新一代区块链,从单链进化到网状、从区块粒度细化到交易粒度、从单点跃迁到并发写入,是区块链从容量到速度的一次革新。

区块 DAG 是一种颠覆传统区块结构的创新方案,通过网状拓扑实现并行处理和高吞吐量,适用于物联网、高频交易等场景。

我们通过一个具体的例子深入理解 DAG(有向无环图)在区块链中的工作原理。假设我们有一个基于 DAG 的轻量级支付系统(类似 IOTA 的 Tangle),以下是详细的操作流程:

场景设定

目标:用户 A 向用户 B 发送 10 元,用户 C 向用户 D 发送 5 元。

系统要求:

  1. 交易无需矿工打包,直接广播网络;
  2. 每笔新交易必须验证之前的两笔交易(防止双花);
  3. 交易通过引用历史交易达成共识。

交易1(Tx1)

  • 发送方:用户A \(\rightarrow\) 用户B
  • 金额:10元
  • 引用:无(初始交易)
  • 签名:A 的私钥签名

交易2(Tx2)

  • 发送方:用户C \(\rightarrow\) 用户D
  • 金额:5元
  • 引用:无(初始交易)
  • 签名:C 的私钥签名

此时 DAG 中有两个独立交易,彼此无关。

交易3(Tx3)

  • 发送方:用户B \(\rightarrow\) 用户E
  • 金额:8元
  • 引用:必须引用 Tx1 和 Tx2(验证前两笔交易的有效性)
  • 签名:B 的私钥签名

验证逻辑:B 需要证明自己拥有 Tx1 中收到的 10 元(余额足够支付 8元),系统检查 Tx3 是否同时引用 Tx1 和 Tx2(防止用户恶意跳过验证)

  1. 广播:Tx3 被发送到网络中的所有节点;
  2. 验证:每个节点检查 Tx3 是否签名有效(B 的签名);检查 Tx3 引用的 Tx1 和 Tx2 是否已经被确认(未被双花)
  3. 确认:如果验证通过,Tx3 被标记为"已确认",并成为后续交易的引用基础。

假设用户 A 尝试作弊:

  • 交易4(Tx4):A 发送同一笔 10 元给用户 F,并引用 Tx1 和 Tx3;
  • 问题:Tx1 已经被 Tx3 引用,但 Tx4 试图再次使用 Tx1 的余额。

系统如何解决?

  1. 拓扑排序:节点根据时间戳对交易排序,Tx4 必须晚于 Tx3;
  2. 共识规则:如果一个交易引用的 UTXO(未花费交易输出)已被其他交易使用,则后续交易无效;
  3. 结果:Tx4 被标记为"无效",拒绝加入 DAG。

最终交易之间的引用关系形成如下网状结构:

graph TB
    Tx1[Tx1 A->B]
    Tx2[Tx2 C->D]
    Tx3[Tx3 B->E]

    Tx3 --> Tx1
    Tx3 --> Tx2
  • 方向性: Tx3 引用了 Tx1 和 Tx2,但 Tx1 无法反向引用 Tx3;
  • 无环性:不存在循环引用,确保数据一致性。

Q&A

双花防护机制

DAG 通过以下规则防止双花:

  1. UTXO 消费标记:每笔交易引用 UTXO 后,立即将其标记为"已消费";
  2. 拓扑排序验证:节点按时间顺序处理交易,确保后续交易无法引用已处理的 UTXO;
  3. 冲突检测:若两个交易尝试引用同一 UTXO,后发生的交易会被拒绝。

评论