本文深入探讨了分片技术在以太坊中的重要性,强调其在实现区块链可扩展性、安全性和去中心化方面的优势。文中明确区分了分片与其它技术(如传统区块链、高TPS链和多链生态系统)的不同安全特性,并详细描述了分片的工作原理及其面临的挑战,如数据可用性和计算验证的有效性。文章结构清晰、逻辑严谨,适合对区块链技术有一定了解的读者。
为什么分片技术很棒:揭示技术特性
特别感谢 Dankrad Feist 和 Aditya Asgaonkar 的审阅
分片是以太坊扩展性的未来,它将是帮助生态系统支持每秒数千笔交易并允许世界上大部分人群以负担得起的成本定期使用该平台的关键。然而,这也是以太坊生态系统乃至更广泛的区块链生态系统中一个比较被误解的概念。它指的是一组非常具体的理念,具有非常特定的属性,但它常常与具有不同且通常更弱的安全属性的技术混淆。本文旨在准确解释分片提供的特定属性,其与其他非分片技术的区别,以及为了实现这些属性,分片系统必须做出的牺牲。
__
描述分片的最佳方法是从塑造和启发解决方案的问题陈述开始:可扩展性三难问题。
可扩展性三难问题指出,区块链试图具备三种属性,而如果你坚持“简单”技术,则只能获得这三种中的两种。这三种属性是:
现在我们可以看看三类仅获得这三者中两者的“简易解决方案”:
分片是一种可以获得三者的技术。一个分片区块链是:
接下来将描述分片区块链如何做到这一点。
最容易理解的分片版本是通过随机抽样实施的分片。通过随机抽样的分片的信任属性较弱于我们正在以以太坊生态系统为基础构建的分片形式,但它使用了更简单的技术。
核心理念如下。假设你有一个具有大量(例如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)。这就是我们称这种类型的分片为平方分片的原因,这种效果是我们认为从长远来看,分片是扩展区块链的最佳方式的关键原因。
有两个关键区别:
这两个区别确保了分片创造了一个环境,使应用程序能够保留单链环境的关键安全属性,而多链生态系统在根本上无法做到这一点。
在比特币圈中,有一个常见的观点,我完全同意,即像比特币(或以太坊)这样的区块链并不完全依赖诚实行事者的多数假设。如果这种区块链遭受51%的攻击,则攻击者可以做一些恶性操作,如回滚或审查交易,但他们无法插入无效交易。即使他们确实回滚或审查交易,运行常规节点的用户也可以轻易检测到这种行为,因此如果社区希望协调通过一个剥夺攻击者权力的分叉快速解决该攻击,他们可以这样做。
这种额外安全性不足是更中心化的高TSP链的关键弱点。这样的链不具备,也无法建立正运行节点的常规用户文化,因此主要节点和生态系统参与者可以更容易地聚在一起,施加社区非常不喜欢的协议变更。更糟的是,用户的节点默认会接受它。经过一段时间后,用户可能会注意到,但到那时,强制的协议变更将已经不容否认:解决此变化的协调负担将落在用户身上,他们不得不艰难决定回滚一天或更多的活动,而所有人都认为这些活动已经最终确定。
理想情况下,我们希望有一种形式的分片,避免51%的信任假设以确保有效性,并保存传统区块链通过完全验证所获得的强大安全防线。这恰恰是我们过去几年研究的主题。
我们可以将50%的攻击证明的可扩展验证问题分为两个情况:
在区块链中验证一个区块既涉及计算也涉及数据可用性的检查:你需要确保区块中的交易是有效的,并且区块中声明的新状态根哈希是执行这些交易的正确结果,但你还需要确保已经发布了足够多来自该区块的数据,以便用户能够下载这些数据并计算状态继续处理区块链。这第二部分是一个非常微妙但重要的概念,称为数据可用性问题;稍后会有更多内容。
可扩展地验证计算相对简单;有两类技术:欺诈证明和ZK-SNARKs。
这两种技术可以简单地描述为:
X
进行计算C
,你得到输出Y
”的信息。你默认相信这些消息,但你留有机会给其他有质押存款的人提出挑战(一条签名消息表示“我不同意,输出是Z”)。只有在有挑战时,所有节点运行计算。两方中哪个错误,哪个就失去他们的质押,所有依赖于该计算结果的计算就需重新计算。X
执行计算C
会得到输出Y
”。该证明在加密上是“健全”的:如果C(x)
_不_等于Y
,则生成有效证明在计算上是不可行的。该证明也很快验证,即使运行C
本身花费大量时间。有关ZK-SNARKs的更多数学细节,请参阅这篇文章。基于欺诈证明的计算是可扩展的,因为“在正常情况下”,你将运行复杂计算的过程替换为验证单个签名。在例外情况下,你确实必须在链上验证该计算,因为发生了挑战,但这种例外情况非常少见,因为触发它的成本非常高(原始声明者或挑战者会失去大量质押)。而ZK-SNARKs则在概念上更简单 - 它们只需用一个更便宜的证明验证替换计算 - 但它们工作原理背后的数学则相当复杂。
有一种半可扩展的系统,仅可扩展地验证计算,同时仍然要求每个节点验证所有数据。通过使用一系列压缩技巧,用计算替换大部分数据,这可以变得非常有效。这正是rollups的领域。
欺诈证明无法用于验证数据的可用性。计算的欺诈证明依赖于一个事实,即计算的输入在原始声明提交的瞬间已在链上发布,因此如果有人挑战,挑战执行发生在与原始执行恰好相同的“环境”中。在验证数据可用性时,你无法做到这一点,因为问题的关键是数据过多,无法在链上发布它。因此,数据可用性的欺诈证明方案遇到了一个关键问题:某人可以声称“数据X可用”,而不发布它,等到被挑战,才发布数据X,并让挑战者在网络的其他部分看起来是不正确的。
这一点在渔夫的困境中进行了详细扩展:
核心想法是这两个“世界”,一个是计算是恶意发布者V1而V2是诚实挑战者,另一个是计算是诚实发布者而V2是邪恶挑战者,对于未尝试在那个时间点下载特定数据的人来说是无法区分的。当然,在一个可扩展的去中心化区块链中,每个单独的节点只能希望下载一小部分数据,因此,只有一小部分节点会看到除了争论存在的实际情况之外的任何事情。
无法区分谁对谁错使得为数据可用性建立有效的欺诈证明方案变得不可能。
不幸的是,仅仅有效并不足以确保区块链的正确运行。这是因为如果区块链是_有效的_但所有数据不可用,那么用户就无法更新他们需要生成任何_未来_区块的有效证明的数据。生成有效但不可用区块的攻击者但随即消失,可以有效阻止链的运行。某人也可以扣留特定用户的账户数据,直到用户支付赎金,因此问题并不仅仅是生存问题。
一些强有力的信息论论证认为这个问题是根本性的,并且没有任何巧妙的技巧(例如涉及加密积累器)可以规避它。请参见这篇论文了解详细信息。
关键是一种称为数据可用性抽样的技术。数据可用性抽样的工作原理如下:
纠删码将“检查100%可用性”(每一块数据都可用)的问题转变为“检查50%可用性”(至少一半的数据是可用)的下一级问题。随机抽样解决了50%的可用性问题。如果数据少于50%可用,则至少一次数据可用性抽样检查几乎肯定会失败,而如果至少50%的数据可用,则实际上整个区块都是可用的,因为只需一个诚实的节点运行纠删编码重建过程以恢复区块的其余50%。因此,要检查1MB区块的可用性,只需下载几千字节的数据即可。这使得对_每个_区块进行数据可用性检查成为可行。有关如何有效实施这种检查以进行点对点子网的细节,请参见这篇文章。
可以使用ZK-SNARKs来验证数据的纠删编码是否已正确,然后可以使用Merkle分支验证个别块。或者,你可以使用多项式承诺(例如Kate(又名KZG)承诺),这实际上将纠删编码、个体元素证明和正确性验证都结合在一个简单组件中 - 而这就是以太坊分片所采用的。
假设你有100个区块,并且希望高效验证所有区块的正确性,而不依赖于委员会。我们需要执行以下操作:
就是这些!在以太坊分片的情况下,近期计划是使分片区块仅数据;也就是说,这些分片是纯粹的“数据可用性引擎”,而第2层rollups的任务是利用这种安全数据空间,加上欺诈证明或ZK-SNARKs,来实现高吞吐量安全交易处理能力。然而,完全有可能创建这样一个内置系统以增加“原生”高吞吐执行。
分片的主要目标是尽可能接近复制传统(非分片)区块链的最重要安全属性,但不要求每个节点个人验证每一笔交易。
分片相当接近。在传统区块链中:
而在具有先进安全功能的分片区块链中:
没有分片的传统高TSP链无法提供这些保证。多链生态系统无法避免攻击者选择一条链进行攻击并轻易接管的问题(这些链_可以_共享安全性,但如果做得不当,就会变成一种传统高TSP链的替代品,具有所有缺点;如果做得好,它只会成为上述分片技术的更复杂实现)。
侧链对实现的依赖性很高,但通常容易受到传统高TSP链的弱点(如果它们共享矿工/验证者)或多链生态系统的弱点(如果它们不共享矿工/验证者)的影响。分片链避免了这些问题。
然而,分片系统在硬件上也有一些瑕疵。尤其是:
这些都是有效的担忧,尽管在我们看来,它们被通过允许更多应用链上运行而带来的_用户水平的去中心化减少_所抵消。不过,这些担忧,尤其是最后两个,实际上是分片链吞吐量超过某一极限的真正限制。平方分片的平方性有其限度。
顺便提一下,对于分片区块链如果其吞吐量提高过多所带来的安全风险,正是推动扩展到_超平方分片_努力在很大程度上被放弃的关键原因;保持平方分片_恰好_平方真的是一个快乐的中介。
一个常常被提出的分片替代方案是建立一个像中心化高TSP链结构的链,但在其上使用数据可用性抽样和分片来验证有效性和可用性。
这改进了今天存在的中心化高TSP链,但仍然显著较弱于分片系统。这有几个原因:
适当分片的系统作为一个基础层更具优势。在这样的分片基础层上,你总是可以创建一个集中生产的系统(例如,因为你希望一个在去中心化金融中具有同步组合能力的高吞吐域),将其作为承载方式搭建。但是,如果你有一个依赖于中心化区块生产的基础层,则无法在其上构建一个更去中心化的第2层。
- 原文链接: vitalik.eth.limo/general...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!