Kaspa 网络:个人对 Kaspa 白皮书的技术解读
今天,让我们来谈谈 Kaspa 的白皮书。我想从技术角度分享一下我对它核心想法的理解。我们将专注于协议的实现部分,不讨论货币的价值和其他无关的事项。
目录
几年前推出的 Kaspa 可以看作是扩展了比特币最长链共识机制的区块链,它允许多个块并行创建和合并。这些块及其交易随后通过节点间的共识进行排序,以确保 Kaspa 的一致性和安全性。这是通过 “GhostDAG” 协议实现的,该协议是作为比特币的扩展解决方案发明的。GhostDAG 基本利用了比特币的机制,包括工作量证明(Proof-of-Work)等,但最明显的不同是以不同的方式链接块。
有一个主要问题:当同时挖掘多个区块时,每一位矿工如何选择之前参与证明的链?选择的这条链应该包含哪些块?这些矿工选择的链是否共享块?
了解 Kaspa 的 BlockDAG
让我们来聊一下这个主要问题。在比特币中,最长链共识要求每个块都有一个单一的前驱块,形成一条线性链。相比之下,Kaspa 将这一概念扩展为一个由互连块组成的有向无环图(BlockDAG)。块通过从时间最近的块指向创世块的有向箭头链接。块头包含对其直接前驱块的多重引用,表示为哈希列表。为了确定 BlockDAG 顶端的新挖掘区块(比如图中的 M 区块),系统必须确保 BlockDAG(从 M 到创世块的方向)保持有效、安全和准确。
GhostDAG 协议
蓝色和红色块
在这里我们提供一些重要的背景信息。GhostDAG 协议定义了两种类型的块集:蓝色和红色。蓝色块包括由合作节点挖掘的块,形成具有最高累计权重的主 DAG。而红色块则被认为是由可疑或恶意节点挖掘的。为了找到一个靠谱的BlockDAG用于挖掘新挖掘块,它必须主要由蓝色块组成。我们也可以将这个 BlockDAG 为 Kaspa 主链。在任何给定时间内,只有一个全球蓝色集代表主链。但是挖掘节点找到的主链可能会有些许的不同,主要的部分是一致的。
问题:那么,挖掘节点如何确定主链(全球蓝色集)呢?
贪心算法
GhostDAG 协议的目标是将整个Kaspa视为一个大的 DAG, 将主链识别为整个网络中的最大 k 簇子 DAG。虽然在实践中找到整个网络中的最大子 DAG 是具有挑战性的,但 GhostDAG 算法 采用了一种贪心方法,从当前挖掘的块开始,选择可以找到的最大的蓝色块簇,作为挖矿时会用到的 BlockDAG。
让我们更详细地谈谈 GhostDAG 贪心算法。
考虑 M 块作为正在挖掘的块。该过程首先通过评估每个前驱块的分数来找到从 M 到创世块的合适路径。块的分数由其前驱块的数量决定。路径是 M - K - H - D - 创世块。然后,沿着这条路径递归地添加区块进入蓝色块集,从创世块开始,将其前驱块添加到蓝色集。请注意,如果某个前驱块的反锥(当前块无法到达的块集合)包含太多其他蓝色块,则不会将该前驱块添加到集中。这减少了将潜在红色块添加到主链的机会。所以,从当前矿工这里找到的主链,包括创世块、C、D、E、H、I、K 和 M。大家找到的主链都会有些不同。例如,如果 J 想挖掘一个块,它将找到其版本的主链。并用于他的创建区块的过程中。
贪心算法为先前的块及其交易建立了一个顺序,帮助所有矿工找到相同的主链(尽管可能略有不同)。这个总排序规则作为所有矿工的参考。每个矿工使用此规则来处理其挖掘块中的交易,丢弃任何冲突的交易。通过遵循此规则,可以确保所有并行操作的新挖掘块之间的一致性,防止任何新块包含冲突交易。
安全性考虑
让我们简要讨论一下使用 BlockDAG 的工作量证明共识机制的安全性。从最重的子 DAG(主链)派生的排序规则使攻击者难以插入恶意交易并导致双重花费。即使是大规模攻击,例如 51% 攻击,也会被减轻,因为恶意链必须在累计工作量证明方面比合法主链更长且更重。
整个 GhostDAG 协议旨在鼓励蓝色集的扩展并限制红色集。例如,挖掘激励会激励参与的挖矿者创建可以包含在蓝色集中的块从而获得奖励和交易费用。虽然红色块仍然可以被挖掘并集成到网络中,但它们不是主链的一部分,只会获得有限的奖励。并且会随着时间的推进而被排除在外。
未解决的问题
我仍然需要探索一些未解决的问题,例如:
- 主链设计如何影响 Kaspa 网络的去中心化?它会蓝色块的高度中心化么?
- 如果挖矿能力趋于集中,Kaspa 代币如何保持未来小额支付用例的稳定性?
- 在大规模传播 Kaspa 时,资源消耗的会有些什么问题吗?
我们之后再继续讨论 Kaspa。