为什么分片很棒:揭开技术特性的神秘面纱

本文深入探讨了分片技术在以太坊中的重要性,强调其在实现区块链可扩展性、安全性和去中心化方面的优势。文中明确区分了分片与其它技术(如传统区块链、高TPS链和多链生态系统)的不同安全特性,并详细描述了分片的工作原理及其面临的挑战,如数据可用性和计算验证的有效性。文章结构清晰、逻辑严谨,适合对区块链技术有一定了解的读者。

为什么分片技术很棒:揭示技术特性

为什么分片技术很棒:揭示技术特性

特别感谢 Dankrad Feist 和 Aditya Asgaonkar 的审阅

分片是以太坊扩展性的未来,它将是帮助生态系统支持每秒数千笔交易并允许世界上大部分人群以负担得起的成本定期使用该平台的关键。然而,这也是以太坊生态系统乃至更广泛的区块链生态系统中一个比较被误解的概念。它指的是一组非常具体的理念,具有非常特定的属性,但它常常与具有不同且通常更弱的安全属性的技术混淆。本文旨在准确解释分片提供的特定属性,其与其他分片技术的区别,以及为了实现这些属性,分片系统必须做出的牺牲。

__

可扩展性三难问题

描述分片的最佳方法是从塑造和启发解决方案的问题陈述开始:可扩展性三难问题

可扩展性三难问题指出,区块链试图具备三种属性,而如果你坚持“简单”技术,则只能获得这三种中的两种。这三种属性是:

  • 可扩展性:链可以处理比单个常规节点(想象:一台普通消费者笔记本)能验证的更多交易。
  • 去中心化:链可以在不依赖一小群大型中心化参与者的基础上运行。这通常解释为不应对一组你不能只用一台消费者笔记本加入的节点有任何信任(甚至诚实行事者的多数假设)。
  • 安全性:链能够抵御参与节点的大比例试图对其攻击(理想情况下为50%;超过25%都可以,5%绝对不可以)。

现在我们可以看看三类仅获得这三者中两者的“简易解决方案”:

  • 传统区块链 - 包括比特币、PoS/分片之前的以太坊、莱特币和其他类似链。这些依赖于每个参与者运行一个完整节点来验证每一笔交易,因此它们具备去中心化和安全性,但没有可扩展性。
  • 高TSP链 - 包括DPoS家族,但也包括许多其他。这些依赖于少量节点(通常为10-100)在彼此之间维持共识,用户必须信任这些节点的多数。这是可扩展和安全的(使用上述定义),但它并不可去中心化。
  • 多链生态系统 - 这是通过让不同的应用在不同的链上运行并使用跨链通信协议相互之间对话的“扩展”一般概念。这是去中心化和可扩展的,但它不安全,因为攻击者仅需要在许多链中的一个获得共识节点的多数(通常小于1%的整个生态系统)来打破那条链,并可能造成涟漪效应,对其他链中的应用造成巨大损害。

分片是一种可以获得三者的技术。一个分片区块链是:

  • 可扩展的:它可以处理远超单个节点交易的数量
  • 去中心化的:它可以完全依靠消费者笔记本生存,完全不依赖“超级节点”
  • 安全的:攻击者无法用少量资源针对系统的小部分进行攻击;他们只能试图主导并攻击整个系统

接下来将描述分片区块链如何做到这一点。

通过随机抽样实现分片

最容易理解的分片版本是通过随机抽样实施的分片。通过随机抽样的分片的信任属性较弱于我们正在以以太坊生态系统为基础构建的分片形式,但它使用了更简单的技术。

核心理念如下。假设你有一个具有大量(例如10000个)验证者的权益证明链,并且你有大量(例如100个)需要验证的区块。没有单个计算机足够强大,能够在下一组区块到来之前验证这些区块中的所有区块。

因此,我们所做的是随机分配验证工作的任务。我们随机打乱验证者列表,然后将打乱列表中的前100个验证者分配给验证第一个区块,第二个100个验证者分配给验证第二个区块,依此类推。分配给验证某个区块(或执行其他任务)的随机选定的验证者组称为委员会

当验证者验证一个区块时,他们发布一个签名证明他们确实这么做了。其他人现在不用验证100个完整的区块,而只需验证10000个签名 - 这是一项小得多的工作,特别是使用BLS 签名聚合。每个区块的广播不再通过同一个P2P网络,而是在不同的子网络中广播,每个节点只需加入相应于它们负责的(或出于其他原因感兴趣的)区块的子网。

考虑一下,如果每个节点的计算能力增加2倍会发生什么。由于每个节点现在可以安全地验证2倍数量的签名,因此你可以减少最低质押存款的大小来支持2倍数量的验证者,因此你可以制作200个委员会而不是100个。因此,你可以在每个时隙验证200个区块,而不是100个。此外,每个独立区块 可以是2倍更大。因此,你有2倍数量的2倍大小的区块,或者总共4倍的链容量。

我们可以引入一些数学术语来谈论正在发生的事情。使用大O符号,我们用“O(C)”来指代单个节点的计算能力。传统区块链可以处理大小为O(C)的区块。如上所述的分片链可以并行处理O(C)个区块(记住,每个节点验证每个区块间接的成本为O(1),因为每个节点只需验证固定数量的签名),每个区块的容量为O(C),因此分片链的总容量为O(C 2)。这就是我们称这种类型的分片为平方分片的原因,这种效果是我们认为从长远来看,分片是扩展区块链的最佳方式的关键原因。

常见问题:分割到100个委员会与分割到100个独立链有什么区别?

有两个关键区别:

  1. 随机抽样防止攻击者将权力集中在一个分片上。在100链的多链生态系统中,攻击者只需要约0.5%的总质押就可以造成破坏:他们可以把51%的重点集中在单个链上攻击。而在分片区块链中,攻击者必须拥有接近30-40%的_全部_质押才能做到同样(换句话说,链具有共享安全性)。当然,他们可以等到运气好,通过随机机会在单个分片获得51%的权力,尽管他们的总质押少于50%,但这对拥有远低于51%的攻击者来说是成指数增加的困难。如果攻击者的质押少于约30%,几乎是不可能的。
  2. 紧密耦合:如果即使有一个分片收到坏区块,整个链将重新组织以避免它。有一个社会契约(在本文后面的部分,我们将描述一些技术上强制执行这一点的方法),即一个甚至一个分片中存在一个坏区块的链是不可接受的,应该在发现后立即被丢弃。这确保了从链内应用的角度来看,有完美的安全性:合约A可以依赖合约B,因为如果合约B因对链的攻击而行为失常,那么整个历史将被重置,包括合约A中因合约B的失效而失常的交易。

这两个区别确保了分片创造了一个环境,使应用程序能够保留单链环境的关键安全属性,而多链生态系统在根本上无法做到这一点。

通过更好的安全模型改进分片

在比特币圈中,有一个常见的观点,我完全同意,即像比特币(或以太坊)这样的区块链并不完全依赖诚实行事者的多数假设。如果这种区块链遭受51%的攻击,则攻击者可以做一些恶性操作,如回滚或审查交易,但他们无法插入无效交易。即使他们确实回滚或审查交易,运行常规节点的用户也可以轻易检测到这种行为,因此如果社区希望协调通过一个剥夺攻击者权力的分叉快速解决该攻击,他们可以这样做。

这种额外安全性不足是更中心化的高TSP链的关键弱点。这样的链不具备,也无法建立正运行节点的常规用户文化,因此主要节点和生态系统参与者可以更容易地聚在一起,施加社区非常不喜欢的协议变更。更糟的是,用户的节点默认会接受它。经过一段时间后,用户可能会注意到,但到那时,强制的协议变更将已经不容否认:解决此变化的协调负担将落在用户身上,他们不得不艰难决定回滚一天或更多的活动,而所有人都认为这些活动已经最终确定。

理想情况下,我们希望有一种形式的分片,避免51%的信任假设以确保有效性,并保存传统区块链通过完全验证所获得的强大安全防线。这恰恰是我们过去几年研究的主题。

可扩展的计算验证

我们可以将50%的攻击证明的可扩展验证问题分为两个情况:

  • 验证计算:检查某项计算是否正确,假设你拥有所有计算的输入
  • 验证数据可用性:检查计算的输入是否以某种形式存储,以便必要时可以下载;此检查应在不实际下载整个输入本身的情况下执行(因为数据可能太大,无法为每个区块下载)

在区块链中验证一个区块既涉及计算也涉及数据可用性的检查:你需要确保区块中的交易是有效的,并且区块中声明的新状态根哈希是执行这些交易的正确结果,但你还需要确保已经发布了足够多来自该区块的数据,以便用户能够下载这些数据并计算状态继续处理区块链。这第二部分是一个非常微妙但重要的概念,称为数据可用性问题;稍后会有更多内容。

可扩展地验证计算相对简单;有两类技术:欺诈证明ZK-SNARKs

这两种技术可以简单地描述为:

  • 欺诈证明是一种系统,通过它接受计算的结果,你需要有质押存款的人签署“我证明如果你使用输入X进行计算C,你得到输出Y”的信息。你默认相信这些消息,但你留有机会给其他有质押存款的人提出挑战(一条签名消息表示“我不同意,输出是Z”)。只有在有挑战时,所有节点运行计算。两方中哪个错误,哪个就失去他们的质押,所有依赖于该计算结果的计算就需重新计算。
  • ZK-SNARKs是一种_加密_证明,直接证明“对输入X执行计算C会得到输出Y”。该证明在加密上是“健全”的:如果C(x)_不_等于Y,则生成有效证明在计算上是不可行的。该证明也很快验证,即使运行C本身花费大量时间。有关ZK-SNARKs的更多数学细节,请参阅这篇文章

基于欺诈证明的计算是可扩展的,因为“在正常情况下”,你将运行复杂计算的过程替换为验证单个签名。在例外情况下,你确实必须在链上验证该计算,因为发生了挑战,但这种例外情况非常少见,因为触发它的成本非常高(原始声明者或挑战者会失去大量质押)。而ZK-SNARKs则在概念上更简单 - 它们只需用一个更便宜的证明验证替换计算 - 但它们工作原理背后的数学则相当复杂。

有一种半可扩展的系统,仅可扩展地验证计算,同时仍然要求每个节点验证所有数据。通过使用一系列压缩技巧,用计算替换大部分数据,这可以变得非常有效。这正是rollups的领域。

数据可用性的可扩展验证更难

欺诈证明无法用于验证数据的可用性。计算的欺诈证明依赖于一个事实,即计算的输入在原始声明提交的瞬间已在链上发布,因此如果有人挑战,挑战执行发生在与原始执行恰好相同的“环境”中。在验证数据可用性时,你无法做到这一点,因为问题的关键是数据过多,无法在链上发布它。因此,数据可用性的欺诈证明方案遇到了一个关键问题:某人可以声称“数据X可用”,而不发布它,等到被挑战,才发布数据X,并让挑战者在网络的其他部分看起来是不正确的。

这一点在渔夫的困境中进行了详细扩展:

核心想法是这两个“世界”,一个是计算是恶意发布者V1而V2是诚实挑战者,另一个是计算是诚实发布者而V2是邪恶挑战者,对于未尝试在那个时间点下载特定数据的人来说是无法区分的。当然,在一个可扩展的去中心化区块链中,每个单独的节点只能希望下载一小部分数据,因此,只有一小部分节点会看到除了争论存在的实际情况之外的任何事情。

无法区分谁对谁错使得为数据可用性建立有效的欺诈证明方案变得不可能。

常见问题:那么,如果一些数据不可用怎么办?用ZK-SNARK可以确保一切都是有效的,这难道不是足够了吗?

不幸的是,仅仅有效并不足以确保区块链的正确运行。这是因为如果区块链是_有效的_但所有数据不可,那么用户就无法更新他们需要生成任何_未来_区块的有效证明的数据。生成有效但不可用区块的攻击者但随即消失,可以有效阻止链的运行。某人也可以扣留特定用户的账户数据,直到用户支付赎金,因此问题并不仅仅是生存问题。

一些强有力的信息论论证认为这个问题是根本性的,并且没有任何巧妙的技巧(例如涉及加密积累器)可以规避它。请参见这篇论文了解详细信息。

那么,你如何检查1MB的数据在不实际尝试下载的情况下是可用的?这听起来不可能!

关键是一种称为数据可用性抽样的技术。数据可用性抽样的工作原理如下:

  1. 使用一种称为纠删码的工具,将带有N块数据的片段扩展为带有2N块数据的片段,以便_所有N_块都可以恢复整个数据。
  2. 为检查可用性,用户只需随机选择块中的常数数量的位置(例如30个位置),并仅在成功找到所有选定位置的块中的块后才接受该块。

纠删码将“检查100%可用性”(每一块数据都可用)的问题转变为“检查50%可用性”(至少一半的数据是可用)的下一级问题。随机抽样解决了50%的可用性问题。如果数据少于50%可用,则至少一次数据可用性抽样检查几乎肯定会失败,而如果至少50%的数据可用,则实际上整个区块都是可用的,因为只需一个诚实的节点运行纠删编码重建过程以恢复区块的其余50%。因此,要检查1MB区块的可用性,只需下载几千字节的数据即可。这使得对_每个_区块进行数据可用性检查成为可行。有关如何有效实施这种检查以进行点对点子网的细节,请参见这篇文章

可以使用ZK-SNARKs来验证数据的纠删编码是否已正确,然后可以使用Merkle分支验证个别块。或者,你可以使用多项式承诺(例如Kate(又名KZG)承诺),这实际上将纠删编码、个体元素证明和正确性验证都结合在一个简单组件中 - 而这就是以太坊分片所采用的。

总结:我们如何再次确保一切是正确的?

假设你有100个区块,并且希望高效验证所有区块的正确性,而不依赖于委员会。我们需要执行以下操作:

  • 每个客户端对每个区块执行数据可用性抽样,验证每个区块中的数据是否可用,而下载每个区块仅需几千字节,即使区块本身的大小是1MB或更大。只有当所有可用性挑战的数据都得到正确回应时,客户端才接受该区块。
  • 现在我们已经验证了数据的可用性,验证正确性变得更加容易。有两种技术:
    • 我们可以使用欺诈证明:少数具有质押存款的参与者可以对每个区块的正确性进行签署。其他节点被称为挑战者(或渔夫)随机检查并尝试完全处理区块。因为我们已经检查了数据的可用性,所以总是可以下载数据并完全处理特定区块。如果它们发现一个无效的区块,则会发布一个挑战,所有人都会验证。如果该区块确实出错,那么该区块以及所有依赖于它的后续区块都需要重新计算。
    • 我们可以使用ZK-SNARKs。每个区块都会附带一个证明正确性的ZK-SNARK。
  • 在上述任一情况下,每个客户端每个区块只需执行少量验证工作,无论区块有多大。在欺诈证明的情况下,偶尔需要在链上完全验证区块,但这应该极为少见,因为触发一次挑战的成本非常高。

就是这些!在以太坊分片的情况下,近期计划是使分片区块仅数据;也就是说,这些分片是纯粹的“数据可用性引擎”,而第2层rollups的任务是利用这种安全数据空间,加上欺诈证明或ZK-SNARKs,来实现高吞吐量安全交易处理能力。然而,完全有可能创建这样一个内置系统以增加“原生”高吞吐执行。

分片系统的关键属性是什么,它们的权衡是什么?

分片的主要目标是尽可能接近复制传统(非分片)区块链的最重要安全属性,但不要求每个节点个人验证每一笔交易。

分片相当接近。在传统区块链中:

  • 无效区块无法通过,因为验证节点会注意到它们无效并忽略它们。
  • 不可用区块无法通过,因为验证节点未能下载它们并忽略它们。

而在具有先进安全功能的分片区块链中:

  • 无效区块无法通过,因为:
    • 一种欺诈证明迅速捕捉无效区块,并通知整个网络该区块的错误,并对创建者严厉惩罚,或者
    • ZK-SNARK证明正确性,你无法为无效区块制作有效的ZK-SNARK。
  • 不可用区块无法通过,因为:
    • 如果一个区块所需数据的可用性少于50%,至少一次数据可用性样本检查将几乎肯定会失败,导致客户端拒绝该区块,
    • 如果一个区块的至少50%数据是可用的,则实际上整个区块都是可用的,因为只需一个诚实节点即可以重建区块的其余部分。

没有分片的传统高TSP链无法提供这些保证。多链生态系统无法避免攻击者选择一条链进行攻击并轻易接管的问题(这些链_可以_共享安全性,但如果做得不当,就会变成一种传统高TSP链的替代品,具有所有缺点;如果做得好,它只会成为上述分片技术的更复杂实现)。

侧链对实现的依赖性很高,但通常容易受到传统高TSP链的弱点(如果它们共享矿工/验证者)或多链生态系统的弱点(如果它们不共享矿工/验证者)的影响。分片链避免了这些问题。

然而,分片系统在硬件上也有一些瑕疵。尤其是:

  • 完全依赖委员会的分片链容易受到自适应对手的攻击,而问责制较弱。也就是说,如果对手能够实时黑入(或关闭)他们选择的任何节点集合,那么他们只需攻击少量节点就可以打破单个委员会。此外,如果攻击者(无论是自适应对手还是仅有50%总质押的攻击者)确实突破一个委员会,只有少数它们的节点(在委员会内的节点)可以公开确认参与这一攻击,因此可以被处以惩罚的质押总额较少。这是另一个关键原因,数据可用性抽样与欺诈证明或ZK-SNARKs的结合成为随机采样技术的重要补充。
  • 数据可用性抽样只有在在线客户端数量足够的情况下才能安全,这样他们共同发起的数据可用性样本请求数量几乎总是重叠,以构成至少50%的区块。这意味着必须有几百个客户端在线(且该数字随着系统的容量与单个节点的容量比率提高而增加)。这是一种少数N信任模型——通常相当可信,但显然不如非分片链中节点的0-N可用性信任模型那么健壮。
  • 如果分片链依赖于欺诈证明,则它依赖于时序假设;如果网络太慢,节点可能会在欺诈证明表明区块是错误之前接受区块为已确认。幸运的是,如果你遵循严格的规则,在发现无效后会恢复所有无效区块,则该阈值是用户设置的参数:每个用户选择他们等候确认的时间长度,如果他们不想等待得足够长时间,则要不再能忍受,但更谨慎的用户是安全的。尽管如此,这仍然减弱了用户体验。使用ZK-SNARKs来验证有效性可以解决这个问题。
  • 大量原始数据需要传递,增加了在极端网络条件下发生故障的风险。小量数据更容易发送(如果一个强大的政府试图审查该链,这些数据更容易安全隐藏)而不是更大数量的数据。如果区块浏览器希望存储整个链,他们需要存储更多的数据。
  • 分片区块链依赖于分片的点对点网络,每个单独的p2p“子网”更容易受到攻击,因为其节点较少用于数据可用性抽样的子网模型在一定程度上减轻了这点,因为子网之间存在一些冗余,但即使如此,仍然存在风险。

这些都是有效的担忧,尽管在我们看来,它们被通过允许更多应用链上运行而带来的_用户水平的去中心化减少_所抵消。不过,这些担忧,尤其是最后两个,实际上是分片链吞吐量超过某一极限的真正限制。平方分片的平方性有其限度。

顺便提一下,对于分片区块链如果其吞吐量提高过多所带来的安全风险,正是推动扩展到_超平方分片_努力在很大程度上被放弃的关键原因;保持平方分片_恰好_平方真的是一个快乐的中介。

为什么不采用中心化生产和分片验证?

一个常常被提出的分片替代方案是建立一个像中心化高TSP链结构的链,但在其上使用数据可用性抽样和分片来验证有效性和可用性。

这改进了今天存在的中心化高TSP链,但仍然显著较弱于分片系统。这有几个原因:

  1. 在高TSP链中,检测区块生产者的审查难度更大。审查检测需要(i)能够看到_每一笔_交易并验证没有显然应该被纳入却莫名未能纳入的交易,或(ii)在_区块生产者_中拥有1-of-N信任模型,并验证没有区块未能纳入。在中心化高TSP链中,(i)是不可能的,而(ii)则更难,因为小节点数量使得即使是1-of-N信任模型更容易失效,如果链的区块时间对DAS过于快速(如大多数中心化高TSP链那样),那么证明一个节点的区块不是由于它们发布得过慢而被拒绝也是很困难的。
  2. 如果大多数区块生产者和生态系统成员试图强行通过一个不受欢迎的协议变更,用户的客户端肯定会_检测_到这一点,但社区反抗并分叉的难度更大,因为他们需要建立一套非常昂贵的高吞吐节点来维持一个遵循旧规则的链。
  3. 中心化基础设施更容易受到外部行为者强加的审查。区块生产节点的高吞吐量使其更显眼,也更容易关闭。审查专用高性能计算相较于对准单个用户的笔记本也更具政治和后勤方面的可行性。
  4. 迫使高性能计算迁移到中心化云服务的压力更大,增大了整个链因为多个区块生产者同时故障而崩溃的风险。一个提倡在自己的硬件上运行验证者的分片链则往往更不容易受到此类影响。

适当分片的系统作为一个基础层更具优势。在这样的分片基础层上,你总是可以创建一个集中生产的系统(例如,因为你希望一个在去中心化金融中具有同步组合能力的高吞吐域),将其作为承载方式搭建。但是,如果你有一个依赖于中心化区块生产的基础层,则无法在其上构建一个更去中心化的第2层。

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

0 条评论

请先 登录 后评论
Vitalik Buterin
Vitalik Buterin
https://vitalik.ca/