区块链 101:超越区块链(第二部分)

本文介绍了Kaspa使用的GHOSTDAG协议,该协议通过使用有向无环图(DAG)结构和贪婪最重观察子树(GHOST)规则,在保留所有有效区块的同时,解决了传统工作量证明(PoW)中浪费算力的问题。GHOSTDAG协议通过选择链来确定交易的执行顺序,并处理非选择区块中的非冲突交易,从而实现了更高的吞吐量。

这是关于区块链的一系列文章的一部分。如果你是第一次看到这篇文章,我强烈建议从本系列文章的开头开始阅读。

上次,我们偏离了主线,讨论了 Hedera,一个用于共识的基础数据结构不是区块链,而是 Hashgraph 的网络

实际上,Hashgraph 只是一个 有向无环图 (DAG) 的花哨说法,这是一种众所周知且非常有用的图类型。

但 Hedera 的方法也具有颠覆性,因为它抛弃了 区块 的概念,转而支持 事件。所以我想我们可以问自己,是否存在一个中间点:保留区块,但使用 DAG 而不是区块链。

嗯,严格来说,区块链就是一个 DAG,其中每个节点都只有一个祖先。不过,将其与链表进行比较,在语义上可能更准确。也许是哈希链表?

有趣的是,这实际上是我在学习区块链系统时问自己的第一个问题之一。不过,不久之后我意识到,由于一些强大的原因,这在技术上是一项非常艰巨的任务,所以我当时停止了追求这个想法。

几年后,事实证明人们确实在尝试 DAG 的概念——但也许不是我预想的方式。

所以今天,我想向你展示一种使用带有区块作为节点的 DAG(如果你愿意,可以称之为 BlockDAG)的方法,以及他们如何使用它来发展我们的一位老朋友:工作量证明

系好安全带,让我们直接进入正题!

分叉

让我们从与上一篇文章几乎相同的思路开始:回到 最基本的

在本系列文章中,我们已经广泛讨论了分叉,但现在,我希望我们从稍微不同的角度重新审视它们。

工作量证明中,当两个矿工在大致相同的时间找到一个有效的区块时,网络会 暂时分裂 成两条竞争链。这两个区块都是完全有效的,因为它们包含合法的交易,并代表诚实的计算工作。但最终,一条链会变得更长,导致另一条(较短的)链被网络放弃。

这是 浪费的。所有投入到被丢弃区块中的计算努力?消失了。

所以你的意思是所有的工作都白费了?

是的。虽然交易最终会进入另一个区块,但我们不禁想到可能有另一种方法——一种避免必须抛弃所有这些宝贵努力的方法。

这是其他共识机制出现的部分原因,它们试图创建更有效的算法,以及其他因素。

这样的替代方案确实存在。面对传统工作量证明的低效率,我们可以采取一种 不同的立场。如果我们不丢弃任何区块呢?如果我们能够 利用 其中包含的所有信息呢?

挑战

当然,这不是一项简单的任务。

重要的是要考虑 为什么 传统的工作量证明选择丢弃较短的竞争链。这背后有非常好的理由。

如果我们设计的系统能够保留这些分支分叉,那么我们将面临几个问题,即:

  • 我们如何处理不同分支中的 冲突交易
  • 当同一笔交易可能出现在多个区块中时,我们如何防止 双重支付
  • 当我们同时接受多个“真相”时,我们如何维持 一致的状态
  • 但最重要的是,当交易分散在不同分支中时,我们如何 对交易进行排序

中本聪选择拥有一个单一的获胜链,只是为了避免所有这些复杂情况。这是一个干净且确定性的解决方案——但代价是浪费了大量的计算。

然而,自那以后,技术已经发展了很多。而 Kaspa 的人们着手保留区块,并同时解决所有这些挑战。

认识 Kaspa

Kaspa 是一个相对年轻的区块链,在撰写本文时只有近 4 年的历史。但不要让它的年龄欺骗你——它建立在一些非常复杂的基础之上。

像比特币一样,它使用 UTXO 模型 和工作量证明共识,所以我们在这里处于熟悉的领域。

但是 比特币 不同,比特币每 10 分钟产生一个区块,Kaspa 每 产生一个区块。是的,你没看错——每秒一个区块,使用工作量证明。

随着最新的更新,我认为实际上甚至不止每秒一个区块。

是的,我知道你在想什么。感觉很奇怪。工作量证明的整个要点是找到一个新区块需要 时间和精力。因此,很自然地会问自己,这怎么会最终不会变成彻底的混乱。

GHOSTDAG 协议

为了使事情顺利进行,Kaspa 的人们提出了一种他们称为 GHOSTDAG 协议 的共识算法。

嗯…… 差不多了

GHOST 代表 贪婪最重观察子树(Greedy Heaviest Observed Sub-Tree)。我并不认为仅凭这个缩写就能轻易理解它的含义。所以为了澄清,它本质上是一种为分叉选择提供偏好机制的方法,通过选择“较重的那一个”,通常以计算工作量来衡量。这听起来应该很熟悉!

而 DAG,嗯…… 你已经知道它是什么意思了!

为了在深入细节之前给你一个大致的了解,发生的情况是,每个有效的区块都会被保留,但在交易排序方面,区块并 被认为是相等的。这实际上是核心秘诀。

但是这是如何运作的呢?首先,Kaspa 中的区块可以引用 多个父区块

哦耶

当然,这会导致一个类似网络的结构,最终成为我们的 DAG。你可以想象,这本身并没有真正实现任何目标,除了制造比平时更大的混乱。

在你的收件箱中获取弗兰克·曼戈内的故事

免费加入 Medium,以获取这位作家的更新。

然而,一旦我们应用 GHOST 规则,事情就开始变得有意义了。这是问题的核心,所以让我们一步一步地分解它。

GHOST

我们现在有一个充满区块的 DAG,我们需要的是一种确定 实际执行哪些交易 以及以什么 顺序 执行交易的方法。我们不能只执行所有交易——这会导致冲突、双重支付和各种问题。这并不是我们感兴趣的系统类型。

完全按照我们设计的方式!

GHOST 通过引入 选定链 的概念来解决这个问题,选定链是 DAG 中的一个线性子图(所以是一条 )。

可以把它想象成在一个高度复杂的道路网络中找到主干道。

假设我们拥有以巨型 DAG 形式存在的网络当前状态。要确定选定链,我们将遵循以下步骤:

  • 从 DAG 的 尖端(或 末端)的一个区块开始。换句话说,是最新的区块之一。
  • 然后,通过父引用确定的所有可能路径,向后遍历 DAG,直到到达创世区块(第一个区块!)。
  • 计算所述路径的总 权重,并选择 最重 的路径。
  • 具有 最重子 DAG 的 DAG 尖端将成为 选定链 的一部分。

好吧,这肯定是一大堆。而且如前所述,几乎是 不可行的。所以让我们稍微分解一下,好吗?

区块权重

首先,我们应该如何理解 最重子 DAG?我们如何衡量 累积工作?以及在同一条线上,我们如何衡量在 单个区块 中花费的工作?

我们已经知道,挖掘一个区块就是找到一些 nonce,它会产生一个满足一些 特殊条件区块哈希。例如,我们可以要求哈希的二进制表示的前 6 位是 1,就像这样:

1111110000000010011110010000110001101010011000010100101110100011001101001101000110101101010010100001100000110101001101110011011111100100110010100110011010011100100111100101100110100000100000101100001101010011001100010000110110100000101010011100100010010010

有趣的事实:这是字符串“Kaspa GHOSTDAG 共识机制”的 SHA-256。我必须摆弄一段时间的输入——证明了这是一个不容忽视的问题!

但通常,我们所做的是将哈希解释为一个正整数,并简单地检查其值是否低于某个 阈值。这很容易检查,事实上,这个阈值有一个名称:它被称为区块的 难度目标

难度目标越低,你就需要投入更多的 工作 才能找到一个有效的区块。也就是说,这些值是 成反比 的。

太棒了——我们现在有了一种衡量 工作 的方法。下一步是什么?

子 DAG 权重

如前所述,下一步涉及计算 DAG 所有尖端的子 DAG 的 累积权重

我们这样做的原因是,我们仍然需要一个 单一事实来源:我们需要从我们的 DAG 中导出一个有意义的 事件历史,并避免冲突和双重支付。

我们通过为每个可能的链分配一个 分数 来做到这一点,我们使用的指标是 累积权重,它只是单个子 DAG(或更准确地说,路径)中区块的各个权重的总和。

如果你想要一个更 数学化 的视角,我们所做的是推导出与尖端相关的所有可能子 DAG 集合的 拓扑排序,这使我们能够选择拓扑的上限。

或者用简单的英语来说:我们有一个基于 累积权重 的区块 总排序

当把所有东西放在一起时,结果最终与传统工作量证明中的结果相同:工作量 最多的链仍然获胜。然而,在这种情况下,每个区块 都有助于权重计算。从这个意义上说,我们可以说没有工作是真正浪费的。

这几乎是它的主要部分!我们获得了一种确定 选定链 的确定性方法,这条链将被我们解释为网络中的 事件历史

重要的是,我们在这里停下来,专注于一个小细节。如果我们必须为 每个新区块 都进行这种子 DAG 计算,那么由于不断增长的 DAG 的庞大规模,这将Simply 成为一个不可行的过程。

因此,算法 缓存 通向创世的路径的权重是绝对必要的。这是该策略成功的关键!

我想还有一个小小的剩余部分需要解决:非选定 区块中的所有这些交易会发生什么?我们能以某种方式使用它们吗?

非选定区块

请记住,我们没有丢弃这些区块——它们是 完全有效工作,仍然是 DAG 的一部分,并有助于整体安全性。

在这里,GHOSTDAG 做了一些非常聪明的事情:它也处理非选定区块中的所有交易,只要它们与选定路径中的交易不冲突!

哇哦

事实上,它甚至更进一步:如果两个非选定区块之间的两个交易发生冲突,它只会处理 总排序 中排在前面的区块中的交易。因为请记住——我们有一种方法可以按 累积工作 对区块进行排序。

从本质上讲,我们有一种方法可以对 DAG 中的每个区块进行排序!

这样,每个矿工都可以获得对其工作的奖励,并且他们的大多数交易仍然可以包含在整体历史中。

此外,如果我们假设同一高度的大多数区块将具有非冲突的交易(类似于 Aptos 方法),那么就会发生一些美好的事情:可以处理已挖掘区块中的 大多数交易

只有在非选定区块中的每个交易都与选定链冲突的极端情况下,我们才会有效地仅执行选定链中的区块——因此它会退回到区块链的行为。

这有多酷?

总结

我不知道你怎么想,但我发现这真是太棒了。

通过摆脱区块链结构,我们似乎可以充分利用工作量证明。GHOSTDAG 确实有一些很棒的优势,例如:

  • 没有工作被浪费,每个有效的区块都有助于网络的安全性和历史记录,
  • 交易始终明确排序,
  • 以及巨大的吞吐量,因为可以同时处理多个区块。

所有这一切都遵循着相同的旧原则:工作量最大的链仍然获胜。

但有所转折!

所以你明白了。两个协议以非常不同的方式使用 DAG,但主要 替换 区块链结构。

Kaspa 和 Hedera 并不孤单。一些其他协议,如 TaraxaBlockDAG(这很有趣,因为它就像称区块链为“区块链”)也在尝试使用 DAG。

老实说,我不知道这是否会成为未来,但我喜欢的是,区块链领域完全充满了酷炫和创新的想法,不断突破可能的界限。

依我拙见,这就是它如此吸引人的原因!

话虽如此,我们旅程的下一个目的地将再次带我们回到熟悉的领域,我们将探索另一个区块链。你知道,没有疯狂的底层结构。然而,下一个区块链带来了非常酷的想法,并且可能与我们迄今为止所见 不同

我说的是我个人最喜欢的:Polkadot。我们将在下一篇文章中开始分解它!

  • 原文链接: medium.com/@francomangon...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Frank Mangone
Frank Mangone
Software developer based in Uruguay. Math and Cryptography enthusiast.