分片提供了哪些特定的属性,它与其他不分片的技术有什么不同?
原文标题:Demystifying the Technical Properties of Sharding: Why it is Great
原文作者:Vitalik Buterin
原文来源:Hackernoon
编译:ChinaDeFi
分片是以太坊可扩展性的未来,它将是帮助生态系统支持每秒数千笔交易的关键,它还允许世界上的大部分地区可以以负担得起的成本定期使用该平台。然而,它也是以太坊生态系统和更广泛的区块链生态系统中被误解较多的概念之一。它指的是一组具有非常特定属性的思想,但现在它经常被与具有安全性较弱属性的技术合并在一起。这篇文章的目的是解释分片提供了哪些特定的属性,它与其他不分片的技术有什么不同,以及一个分片系统必须做出哪些牺牲来实现这些属性。
以太坊分片版本的众多描述之一。原始图由Hsiao-wei Wang绘制,Quantstamp设计。
描述分片的最佳方式应该是从计划并启发解决方案的问题陈述开始:可扩展性三难困境。
可扩展性三难困境表示区块链试图拥有三个属性,如果坚持使用“简单”技术,那么我们只能获得这三个中的两个。这三个属性分别是:
现在我们来看看这三类“简单解决方案”,通常只能得到其中的两个:
分片是一种可以同时满足这三种需求的技术。一个分片区块链是:
本文的其余部分将描述分片区块链是如何做到这一点的。
最易理解的分片是通过随机抽样进行的分片。与我们在以太坊生态系统中构建的分片形式相比,通过随机抽样的分片有更薄弱的信任属性,但它使用了更简单的技术。
其核心思想如下。假设我们有一个包含大量(例如 10000 个)验证者的权益证明链,并且同时有大量(例如 100 个)需要验证的区块。没有一台计算机能够强大到在下一组区块进入之前验证所有这些区块。
因此,我们所做的就是将验证工作随机地进行拆分。我们随机打乱验证者列表,让已打乱列表中的前100个验证者来验证第一个区块,让已打乱列表中的后100个验证者来验证第二个区块,以此类推。这种被随机选择来验证一个区块(或执行一些其他任务)的一组验证者被称为委员会。
当验证者验证一个区块时,他们会发布一个签名来证明他们已经这样做了的事实。其他所有人,不再验证100个完整的区块,现在只验证10000个签名,这样工作量会小得多,尤其是使用 BLS signature aggregation。每个区块不是通过相同的P2P网络广播,而是在不同的子网上广播,节点只需要加入它们负责(或出于其他原因感兴趣)的区块对应的子网。
试想一下,如果每个节点的计算能力都增加了2倍会发生什么?因为每个节点现在可以安全地多验证2倍的签名,所以我们可以减少最低质押存款规模,以支持2倍多的验证者,届时,我们就可以建立200个委员会,而不是100个。同时,每个slot可以验证200个区块,而不是100个。此外,每个单独的区块可以是原来的两倍大。因此,我们将拥有2倍大小的2倍区块,或多于4倍的链容量。
我们可以引入一些数学术语来讨论发生了什么。使用大O表示法,我们用“O(C)”表示单个节点的计算能力。传统的区块链可以处理O(C)大小的区块。如上所述的分片链可以并行处理O(C)个区块(每个节点间接验证每个区块的代价是O(1),因为每个节点只需要验证固定数量的签名),每个区块的容量为O(C),因此分片链的总容量为O(C2)。这就是为什么我们称这种类型的分片为二次分片,而这种效应也是为什么我们认为从长远来看,分片是扩展区块链的最佳方式的关键原因。
有两个关键的区别:
这两种差异都确保了分片为应用程序创建了一个环境,该环境保持单链环境的关键安全特性,而多链生态系统根本无法做到这一点。
比特币圈子里一个常见的说法,也是我完全同意的说法是,像比特币(或以太坊)这样的区块链并不完全依赖于诚实的多数假设。如果对这样的区块链进行51%攻击,那么攻击者可以做一些很讨厌的事情,比如恢复或审查交易,但他们不能插入无效的交易。即使他们恢复或审查交易,运行普通节点的用户也可以很容易地检测到这种行为,因此,如果社区希望通过分叉 来协调解决攻击,从而消除攻击者的权力,那么他们可以时迅速做到这一点。
缺乏这种额外的安全性是更加中心化的高TPS链的一个关键弱点。这样的链没有,也不可能有常规用户运行节点的文化,所以主要节点和生态系统的参与者可以更容易地聚集在一起,并强加实施一个社区非常不喜欢的协议更改。更糟糕的是,用户的节点将默认接受它。一段时间后,用户会注意到,但那时强制协议更改已成为既成事实:拒绝更改的协调负担将落在用户身上,他们将不得不做出痛苦的决定。
理想情况下,我们希望有一种分片形式,可以避免 51% 的有效性信任假设,并保留传统区块链通过充分验证获得的强大安全壁垒。这正是我们在过去几年中所做的大部分研究。
我们可以将51%-attack-proof的可扩展验证问题分解为两种情况:
在区块链中验证一个区块时,其中包括计算和数据可用性检查:我们需要确信区块中的交易是有效的,并且区块中声明的新状态根哈希是执行这些交易的正确结果,但是我们还需要确信区块中已经发布了足够的数据,以便下载该数据的用户可以计算状态并继续处理区块链。第二部分是一个非常微妙但非常重要的概念,称为数据可用性问题;稍后再详细说明。
可扩展的验证计算相对容易;具体有两类技术:欺诈证明和ZK-SNARK。
两种技术可以简单描述如下:
基于欺诈证明的计算是可扩展的,因为“在正常情况下”,我们可以用验证单个签名来取代运行复杂的计算。有一种例外情况,由于存在挑战,我们必须链上验证计算,但这种例外情况非常罕见,因为触发它非常昂贵。ZK-SNARK在概念上更简单——它们只是用更便宜的证明验证取代了计算——但它们工作原理背后的数学原理要复杂得多。
有一类半可扩展系统,它只对计算进行可扩展的验证,同时仍需要每个节点对所有数据进行验证。这可以通过使用一组压缩技巧来实现计算代替大多数数据。这是rollup的领域。
欺诈证明不能用于验证数据的可用性。计算的欺诈证明依赖于这样一个事实:在提交原始诉求的那一刻,计算的输入就在链上发布了,因此,如果有人质疑,质疑执行发生在与原始执行发生的完全相同的“环境”中。在检查数据可用性的情况下,我们不能这样做,因为问题恰恰在于需要检查的数据太多,无法将其发布到链上。因此,数据可用性的防欺诈方案遇到了一个关键问题:有人可以声称“数据X是可用的”,但不发布它,等待挑战,然后发布数据X,使挑战者在网络的其他部分看来是不正确的。
这在渔夫困境中得到了扩展:
其核心理念是,对于当时没有试图下载特定数据的人来说,这两个“世界”是无法被区分的,一个是V1是邪恶的发布者,V2是诚实的挑战者,另一个是V1是诚实的发布者,V2是邪恶的挑战者。在一个可扩展的去中心化区块链中,每个单独的节点只希望下载一小部分数据,所以只有一小部分节点会看到发生了什么,除了存在分歧的事实。
无法区分谁对谁错的事实,使得我们不可能拥有一个有效的数据可用性防欺诈方案。
令人遗憾的是,有效性不足以确保正确运行区块链。这是因为如果区块链是有效的,但所有数据都不可用,那么用户就没有办法更新他们需要的数据,来生成任何未来区块是有效的证明。攻击者生成一个有效但不可用的区块,然后消失,这可以有效地停止链。某些人还可以扣留特定用户的帐户数据,直到用户支付赎金,所以这个问题不仅仅是活跃度问题。
有一些强有力的信息理论论据认为,这个问题是根本的,没有什么巧妙的可用技巧可以解决它。
关键是一项被称为数据可用性抽样的技术。数据可用性抽样的工作原理如下:
纠删码将“检查100%可用性”(每一个数据片段都可用)问题转换为“检查50%可用性”(至少一半数据片段可用)问题。随机抽样解决了50%的可用性问题。如果可用的数据少于50%,那么几乎可以肯定至少有一个检查会失败,如果至少50%的数据可用,那么尽管一些节点可能无法识别一个区块是否可用,但只需要一个诚实的节点运行纠删码重构过程就可以恢复剩余的50%的区块。因此,不需要下载1MB来检查1MB区块的可用性,只需要下载几千字节。这使得在每个区块上进行数据可用性检查变得可行。
ZK-SNARK可以用来验证数据上的erasure coding是否正确,然后可以用Merkle分支来验证单个块。或者,也可以使用多项式承诺(例如:Kate(又名KZG)承诺),其本质上是在一个简单的组件中进行erasure coding、证明单个元素和正确性验证——这就是以太坊分片所使用的。
假设我们有100个区块,并且想要在不依赖委员会的情况下有效地验证所有区块的正确性。我们需要做以下事情:
1. 我们可以用ZK-SNARK。每个区块都有一个ZK-SNARK来证明正确性。
2. 我们可以使用欺诈证明:一些已质押存款的参与者可以签署每个区块的正确性。其他节点,称为挑战者(或渔民)随机检查并试图完全处理区块。因为我们已经检查了数据的可用性,所以可以下载数据并完全处理任何特定区块。如果他们发现一个无效的区块,他们会发布一个每个人都验证的挑战。如果结果显示该区块是坏掉的,那么该区块和所有依赖于该区块的未来区块都需要重新计算。
就以太坊分片而言,近期的计划是让分片区块只包含数据;也就是说,分片纯粹是一个“数据可用性引擎”,使用该安全数据空间以及欺诈证明或 ZK-SNARK 来实现高吞吐量安全交易处理能力是第 2 层rollup的工作。但是,完全可以创建这样一个内置系统来添加“本地”高吞吐量执行。
分片的关键目标是尽可能地复制传统(非分片)区块链最重要的安全属性,但不需要每个节点亲自验证每笔交易。
分片非常接近。在传统的区块链中:
在一个具有高级安全特性的分片区块链中:
没有分片的传统高TPS链无法提供这些保证。多链生态系统无法避免攻击者选择一条链进行攻击并轻松地接管它的问题(链可以共享安全性,但如果这一点做得不好,它将变成事实上的传统高TPS链,具有所有的缺点,如果做得好,它将只是上述分片技术的更复杂的实现)。
侧链高度依赖于实现,但它们通常容易受到传统高TPS链的弱点(如果它们共享矿工/验证者)或多链生态系统的弱点(如果它们不共享矿工/验证者)的影响。分片链可以避免这些问题。
然而,分片系统的装甲中有一些裂缝。值得注意的是:
这些都是值得关注的问题,尽管在我们看来,通过允许更多的应用程序在链上运行而不是通过中心化的第二层服务来实现的用户级中心化的减少远远超过了这些问题。也就是说,这些问题,尤其是后两个问题,实际上是将分片链的吞吐量提高到一定程度的真正限制。二次分片的二次性是有极限的。
顺便说一句,如果分片区块链的吞吐量变得太高,则其安全风险会越大,这也是为什么扩展到超二次分片的努力在很大程度上被放弃的关键原因;看起来保持二次分片只是二次分片是一个不错的折衷方案。
经常被提出的一个分片替代方案是建立一个结构类似于中心化高TPS链的链,只不过它在上面使用数据可用性采样和分片来验证有效性和可用性。
这改善了目前存在的中心化高TPS链,但它仍然比分片系统弱得多。这有以下几个原因:
适当的分片系统最好作为基础层。有了一个分片基础层,我们始终可以通过将其构建为rollup来创建一个中心化生产系统。但是,如果我们有一个依赖于中心化区块生产的基础层,则不能在其上构建更加去中心化的第2层。
责任编辑:Kate