主页 > 如流下载imtoken > V神:以太坊分片技术详解

V神:以太坊分片技术详解

如流下载imtoken 2023-12-07 05:14:13

原文:Vitalik Buterin 的“揭秘分片的技术特性:它为何伟大”

编译:去中心化金融社区

分片是以太坊可扩展性的未来,将是帮助生态系统支持每秒数千笔交易的关键,它还将允许世界上大部分地区以可承受的成本定期使用该平台。 然而,它也是以太坊生态系统和更广泛的区块链生态系统中被误解较多的概念之一。 它指的是一组具有非常具体属性的想法,但现在它经常与安全属性较弱的技术合并。 这篇文章的目的是解释分片提供了哪些特定属性,它与其他非分片技术有何不同比特币技术安全性高吗,以及分片系统必须做出哪些牺牲才能实现这些属性。

V神:详解以太坊上的分片技术

以太坊分片版本的众多描述之一。 原图由王晓薇绘制,由 Quantstamp 设计。

可扩展性三难困境

描述分片的最佳方式应该从计划和启发解决方案的问题陈述开始:可扩展性三难困境。

V神:详解以太坊上的分片技术

可扩展性三难困境指出区块链试图拥有三个属性,如果我们坚持使用“简单”技术,那么我们只能实现这三个属性中的两个。 这三个属性是:

- 可扩展性:链可以处理比单个普通节点可以验证的更多的交易。

- 去中心化:链条可以在不依赖一小群大型中心化参与者的情况下运行。 这通常被解释为当我们无法使用普通笔记本电脑加入一组节点时,我们不应该对该节点有任何信任。

- 安全性:该链可以抵抗大多数对参与节点的攻击。 (最好是 50%;超过 25% 就可以,5% 绝对不行)。

现在让我们看看这三类“简单的解决方案”,通常只有两类可用:

- 传统区块链:包括比特币、pre-PoS/分片以太坊、莱特币和其他类似链。 它们依赖于运行完整节点的每个参与者来验证每笔交易,因此它们是去中心化和安全的,但不可扩展。

- 高 TPS 链:包括 DPoS 系列,还有许多其他喜欢它的链。 它们依靠少数节点(通常为 10-100 个)来维持彼此之间的共识,用户必须信任其中的大多数。 这是可扩展和安全的,但它不是去中心化的。

- 多链生态系统:这是指“横向扩展”的一般概念,通过在不同的链上运行不同的应用程序并使用跨链通信协议在它们之间进行通信。 这是分散和可扩展的,但它并不安全,因为攻击者只需要在众多链中的一个中获得大多数共识节点就可以破坏该链并可能引起连锁反应,影响其他链中的应用程序它也可能造成很大的破坏.

分片是一种可以同时满足这三种需求的技术。 分片区块链是:

- 可扩展:它可以处理比单个节点更多的事务。

比特币技术安全性高吗_比特币技术分析软件_比特币技术风险

- 去中心化:完全可以在普通笔记本电脑上“生存”,不依赖任何“超级节点”。

- 安全性:攻击者无法攻击资源很少的系统的一小部分; 他们只能试图控制和攻击整个事情。

本文的其余部分描述了分片区块链如何做到这一点。

随机抽样分片

最容易理解的分片是随机抽样分片。 通过随机抽样进行分片比我们在以太坊生态系统中构建的分片形式具有更弱的信任属性,但它使用更简单的技术。

其核心思想如下。 假设我们有一个具有大量(比如 10,000)验证者的权益证明链,并且同时要验证大量(比如 100)块。 在下一组块进入之前,没有任何一台计算机能够强大到足以验证所有这些块。

所以我们所做的是随机拆分验证工作。 我们随机打乱验证人列表,让打乱列表中的前 100 个验证人验证第一个区块,让打乱列表中的最后 100 个验证人验证第二个区块,以此类推。 这组随机选择来验证区块(或执行其他任务)的验证者称为委员会。

V神:详解以太坊上的分片技术

当验证者验证一个块时,他们会发出一个签名来证明他们已经这样做了。 其他人,而不是验证 100 个完整的块,现在只验证 10,000 个签名,这工作量要少得多,尤其是使用 BLS 签名聚合时。 每个区块不是在同一个 P2P 网络上广播,而是在不同的子网上广播,节点只需要加入他们负责(或出于其他原因感兴趣)的区块对应的子网。

试想一下,如果每个节点的算力都提升2倍会怎样? 因为每个节点现在可以安全地验证 2 倍以上的签名,我们可以减少最小抵押存款规模以支持 2 倍以上的验证者,到那时,我们可以建立 200 个委员会而不是 100 个。同时,每个槽可以验证 200 个区块而不是 100。此外,每个单独的块可以是原来的两倍大。 因此,我们将拥有 2 倍大小的 2 倍块,或超过 4 倍的链容量。

我们可以引入一些数学术语来讨论发生了什么。 使用大 O 表示法,我们用“O(C)”表示单个节点的计算能力。 传统区块链可以处理 O(C) 大小的块。 如上所述,分片链可以并行处理O(C)个区块(每个节点间接验证每个区块的成本为O(1),因为每个节点只需要验证固定数量的签名),每个节点的容量一个区块是O(C),所以分片链的总容量是O(C2)。 这就是为什么我们将这种类型的分片称为二次分片,这种效果是我们认为分片是长期扩展区块链的最佳方式的关键原因。

FAQ:拆分成 100 个委员会和拆分成 100 个独立的链有什么区别?

有两个主要区别:

- 随机抽样可防止攻击者将火力集中在一个碎片上。 在 100 条链的多链生态系统中,攻击者只需要总权益的 0.5% 左右就可以造成破坏。 在分片区块链中,攻击者必须拥有接近 30-40% 的全部股份才能执行相同的操作(换句话说,该链共享安全性)。 当然,他们可以等到足够幸运随机获得一个分片的 51%,尽管他们拥有的股份不到总股份的 50%,但对于拥有远低于 51% 的攻击者来说,这会成倍增加。 如果攻击者的30%以下,那这件事几乎是不可能的。

- 紧耦合:即使一个分片出现坏块,整条链也会重组避免。 有一个社会契约(在本文档的后面部分我们描述了一些执行这个契约的技术方法),一个分片中有坏块的链是不可接受的,应该立即丢弃它。 从链上应用的角度来看,这确保了完美的安全性:合约 A 可以依赖于合约 B,因为如果合约 B 因链上攻击而发生错误行为,则整个历史记录将被恢复,包括因攻击行为错误的 A 交易。合同 B 的失败。

这两种差异确保分片为应用程序创建了一个环境,该环境可以维护单链环境的关键安全属性,而这在多链生态系统中是不可能的。

使用更好的安全模型改进分片

比特币技术安全性高吗_比特币技术分析软件_比特币技术风险

比特币圈子里的一个普遍说法,也是我完全同意的一个说法,就是像比特币(或以太坊)这样的区块链并不完全依赖于诚实的多数假设。 如果对这样的区块链进行 51% 攻击,攻击者可以做一些令人讨厌的事情,例如还原或审查交易,但他们不能插入无效交易。 即使他们恢复或审查交易,运行正常节点的用户也可以很容易地检测到这种行为,因此如果社区想要分叉以协调解决攻击,消除攻击者的权力,他们可以在此时迅速这样做.

缺乏这种额外的安全性是更中心化的高 TPS 链的主要弱点。 这样的链没有,也不可能有普通用户运行节点的文化,因此主要节点和生态系统参与者可以更容易地聚集在一起并实施社区强烈不喜欢的协议更改。 更糟糕的是,用户的节点将默认接受它。 一段时间后,用户会注意到,但到那时强制协议更改已成为既成事实:拒绝更改的协调负担将落在用户身上,他们将不得不做出痛苦的决定。

理想情况下,我们希望有一种分片形式可以避免 51% 的有效性信任假设,并保留传统区块链通过全面验证实现的强大安全屏障。 这正是我们在过去几年中所做的大部分研究。

计算的可扩展验证

我们可以将 51%-attack-proof 的可扩展验证问题分解为两种情况:

- 验证计算:假设我们有计算的所有输入,检查某些计算是否正确完成。

- 验证数据可用性:检查计算输入本身是否以某种形式存储,并在确实需要时下载它们; 应该在不实际下载整个输入本身的情况下执行此检查(因为数据可能太大而无法按块下载)。

在验证区块链中的区块时,这包括计算和数据可用性检查:我们需要确信区块中的交易是有效的,并且区块中声明的新状态根哈希是执行这些交易的正确结果,但我们还需要确信已经在区块中发布了足够的数据,以便下载该数据的用户可以计算状态并继续在区块链上工作。 第二部分是一个非常微妙但非常重要的概念,称为数据可用性问题; 稍后会详细介绍。

可扩展验证计算相对容易; 有两种类型的技术:欺诈证明和 ZK-SNARKs。

V神:详解以太坊上的分片技术

这两种技术可以简要描述如下:

- 欺诈证明是一种系统,它接受计算结果并要求有质押存款的人签署一条消息,内容为“我证明如果你用输入 X 执行计算 C,你将得到输出 Y”。 默认情况下,我们信任这些消息,但我们也给其他已经质押押金的人提供挑战的机会(带有签名的消息说“我不同意,输出是 Z”)。 所有节点仅在受到挑战时才运行计算。 双方任何一方的失误都将导致押金损失,所有基于该计算结果的计算都将重新计算。

- ZK-SNARK 是一种密码学证明形式,它直接证明“对输入 X 执行计算 C 导致输出 Y”这一陈述。 这个证明在密码学上是“合理的”:如果 C(x) 不等于 Y,则在计算上不可能做出有效的证明。 尽管运行 C 本身会花费很多时间,但可以快速验证证明。

基于欺诈证明的计算是可扩展的,因为“在正常情况下”我们可以验证单个签名而不是运行复杂的计算。 有一个例外,由于挑战,我们必须在链上验证计算,但这种例外非常罕见,因为触发它的成本非常高。 ZK-SNARKs 在概念上更简单——它们只是用更便宜的证明验证代替计算——但它们工作原理背后的数学要复杂得多。

有一类半可扩展系统仅对计算进行可扩展验证,同时仍要求每个节点验证所有数据。 这可以通过使用一组压缩技巧用计算代替大部分数据来实现。 这是汇总的领域。

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

欺诈证明不能用于验证数据的可用性。 计算欺诈证明依赖于这样一个事实,即计算的输入在提交原始声明的那一刻就在链上发布,因此,如果受到挑战,挑战的执行将发生在与原始执行完全相同的“环境”中发生了 。 在检查数据可用性的情况下,我们不能这样做,因为问题恰恰是有太多数据需要检查以将其发布到链上。 因此,针对数据可用性的欺诈预防方案遇到了一个关键问题:有人可以声称“数据 X 可用”,但不发布,等待挑战,然后发布数据 X,使挑战者看起来不真实网络的其余部分。 正确的。

比特币技术风险_比特币技术分析软件_比特币技术安全性高吗

这是对渔夫困境的扩展:

V神:详解以太坊上的分片技术

核心思想是,对于当时没有尝试下载该特定数据的任何人来说,这两个“世界”是无法区分的,一个是 V1 是邪恶的发布者,V2 是诚实的挑战者,另一个是 V1是诚实的发布者,V2 是邪恶的挑战者。 在可扩展的去中心化区块链中,每个单独的节点只希望下载一小部分数据,因此只有一小部分节点会看到发生了什么,除非存在分歧。

无法分辨谁对谁错的事实使得不可能有有效的数据可用性欺诈预防方案。

常见问题解答:如果某些数据不可用怎么办? 使用 ZK-SNARKs,你可以确定一切都是有效的,这还不够吗?

遗憾的是,有效性不足以确保区块链的正确运行。 这是因为如果区块链有效但所有数据都不可用,那么用户就无法更新他们需要的数据来生成任何未来区块有效的证据。 攻击者生成一个有效但不可用的块,然后该块消失,有效地停止了链。 在用户支付赎金之前,有人还可以保留特定用户的帐户数据,因此问题不仅仅与活动有关。

有一些强有力的信息论论据认为这个问题是根本性的,并且没有巧妙的技巧可以解决它。

那么如何在不尝试下载的情况下检查是否有 1 MB 的数据可用呢? 听起来不可能!

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

- 使用一种叫做擦除编码的工具,将一个N块的数据扩展成一个2N块的数据,这样其中任意N个块都可以还原出整个数据。

- 检查可用性,而不是尝试下载整个数据,用户只是随机选择块中固定数量的位置(例如 30 个位置),并且只有当他们在他们选择的所有位置成功找到块中的块时,块将被接受。

V神:详解以太坊上的分片技术

纠删码将“检查 100% 可用性”(每条数据可用)的问题转化为“检查 50% 可用性”(至少一半数据可用)的问题。 随机抽样解决了 50% 的可用性问题。 如果只有不到 50% 的数据可用,那么至少有一项检查几乎肯定会失败,如果至少有 50% 的数据可用,那么只需要一个诚实节点来运行修正,尽管有些节点可能无法识别块是否可用。 剩余的 50% 的块可以通过删除和重建过程来恢复。 因此,无需下载 1MB 来检查 1MB 块的可用性,只需下载几千字节。 这使得对每个块进行数据可用性检查成为可能。

ZK-SNARK可以用来验证数据上的纠删码是否正确,然后可以用Merkle分支来验证各个区块。 或者,可以使用多项式承诺(例如:Kate(又名 KZG)承诺),它本质上是在一个简单的组件中执行擦除编码、单个元素的证明和正确性验证——这就是以太坊分片所使用的。

回顾:我们如何确保一切都恢复正常?

假设我们有 100 个区块,想要在不依赖委员会的情况下高效地验证所有区块的正确性。 我们需要做以下事情:

- 每个客户端对每个块进行数据可用性采样,验证每个块中的数据是否可用,即使整个块的大小为1MB或更大,每个块只需要下载几千字节。 客户端只有在其可用性挑战的所有数据都已被正确响应时才会接受一个块。

比特币技术风险_比特币技术分析软件_比特币技术安全性高吗

- 现在我们已经验证了数据的可用性,验证正确性变得更加容易。 有两种方法:

1.我们可以使用ZK-SNARK。 每个区块都有一个 ZK-SNARK 来证明正确性。

2.我们可以使用欺诈证明:一些质押存款的参与者可以签署每个区块的正确性。 其他节点,称为挑战者(或渔民)随机检查并尝试完全处理块。 因为我们已经检查了数据的可用性,所以可以下载数据并完全处理任何特定的块。 如果他们发现一个无效的块,他们会发出一个每个人都验证的挑战。 如果事实证明该块已损坏,则需要重新计算该块以及依赖它的所有未来块。

- 在以上任何一种情况下,无论区块有多大,每个客户端只需要对每个区块做少量的验证工作。 在欺诈证明的情况下,偶尔需要在链上对区块进行全面验证,但这种情况应该很少见,因为即使触发一次挑战也非常昂贵。

在以太坊分片的情况下,近期计划是让分片块只包含数据; 也就是说,分片纯粹是一个“数据可用性引擎”,它使用这个安全数据空间以及欺诈证明或 ZK-SNARKs 来实现高吞吐量安全交易处理能力,这是第 2 层汇总的工作。 然而,完全有可能创建这样一个内置系统来添加“本机”高吞吐量执行。

分片系统的关键属性是什么? 妥协是什么?

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

碎片非常接近。 在传统区块链中:

- 无效块无法通过,因为验证器会注意到它们无效并忽略它们。

- 不可用的块无法通过,因为验证器无法下载它们,并忽略它们。

在具有高级安全功能的分片区块链中:

- 无效块无法通过,因为:

1. 欺诈证明会迅速抓住他们,将区块的错误告知全网,严惩创建者;

2. ZK-SNARK 证明正确性,我们不能为无效块创建有效的 ZK-SNARK。

- 不可用的块不能通过,因为:

1. 如果一个区块的可用数据少于 50%,那么对于每个客户端至少有一次数据可用性样本检查几乎肯定会失败,这将导致客户端拒绝该区块;

2. 如果一个区块中至少 50% 的数据可用,那么实际上整个区块都可用,因为只需要一个诚实节点来重建区块的其余部分。

比特币技术安全性高吗_比特币技术风险_比特币技术分析软件

没有分片的传统高 TPS 链无法提供这些保证。 多链生态无法避免攻击者选择一条链进行攻击并轻易接管的问题(链可以共享安全性,但如果做得不好,它将成为事实上的传统高 TPS 链,弊大于利,如果做得好,这将只是上述分片技术的更复杂的实现)。

侧链高度依赖于实现,但它们往往容易受到传统高 TPS 链(如果它们共享矿工/验证器)或多链生态系统(如果它们不共享矿工/验证器)的弱点的影响。 分片链可以避免这些问题。

但是,分片系统的装甲存在一些裂缝。 值得一提的是:

- 仅依赖委员会的分片链容易受到自适应对手的攻击比特币技术安全性高吗,并且问责制较弱。 也就是说,如果对手有能力实时破解(或关闭)他们选择的任何一组节点,他们只需要攻击一小部分节点即可扰乱委员会。 此外,如果对手(无论是适应性对手还是只是 50% 的攻击者)腐蚀委员会,则只有一小部分会受到惩罚。 这是数据可用性抽样与欺诈证明或 ZK-SNARKs 一起成为随机抽样技术的重要补充的另一个关键原因。

- 只有足够数量的在线客户端共同发出足够的数据可用性抽样请求时,数据可用性抽样才是安全的,其响应几乎总是重叠以占至少 50% 的块。 实际上,这意味着必须有数百个客户端在线(并且这个数字随着系统容量与单个节点容量的比率而增加)。 这是一个 minority-in-n 信任模型——通常相当值得信赖,但对于非分片链中的节点肯定不如 0-in-n 信任可靠。

- 如果分片链依赖于欺诈证明,那么它依赖于时间假设; 如果网络太慢,节点可能会在防欺诈程序出现并表明它是错误的之前接受最终区块。 幸运的是,如果我们严格遵守找到所有无效块后将其还原的规则,那么这个阈值就是一个用户设置的参数:每个用户选择他们等待最终结果的时间,如果他们不想等待足够长的时间时间长了就有损失,谨慎的用户还是可以放心安全的。 尽管如此,这还是有损于用户体验。 使用 ZK-SNARK 验证有效性解决了这个问题。

- 需要传递大量原始数据,这增加了极端网络条件下失败的风险。 少量数据比大量数据更容易发送。 如果区块浏览器想要保存整条链,就需要存储更多的数据。

- 分片区块链依赖于一个分片的点对点网络,每个 p2p “子网”更容易受到攻击,因为它有更少的节点。 数据可用性采样的子网模型缓解了这个问题,因为子网之间存在一定的冗余,但仍然存在风险。

这些都是值得关注的问题,尽管在我们看来,通过允许更多应用程序在链上运行而不是通过集中式第 2 层服务来减少用户级集中化,这些问题远远超过了这些问题。 也就是说,这些问题,尤其是后两个问题,实际上是将分片链的吞吐量提高到一定程度的真正限制。 二次分片的二次性质是有限制的。

顺便说一句,如果分片区块链的吞吐量变得太高,它的安全风险就会变得更大,这是为什么扩展到超二次分片的努力在很大程度上被放弃的一个关键原因; 看起来维护二次分片只是二次分片是一个很好的折衷。

为什么不集中生产和分片验证?

一个经常被提出的分片替代方案是构建一个结构类似于中心化高 TPS 链的链,不同之处在于它使用数据可用性采样和分片来验证有效性和可用性。

这改进了目前存在的中心化高 TPS 链,但它仍然比分片系统弱得多。 有几个原因:

- 在高 TPS 链中,很难检测区块生产者审查。 审查检测需要 (i) 能够查看每笔交易并验证不存在明显值得进入但无法进入的交易,或者 (ii) 在区块生产者之间具有 1 in n 信任模型并验证没有无法输入的块。 在中心化的高 TPS 链中,(i) 不可能,(ii) 更难,因为节点数量少使得 n 中 1 的信任模型更容易崩溃,如果链的出块时间对于 DAS 来说太大快速(正如大多数集中式高 TPS 链所做的那样),很难证明节点的块没有被拒绝,因为它们都发布得太慢了。

- 如果大多数区块生产者和生态系统成员试图强行通过一个不受欢迎的协议更改,用户的客户肯定会发现它,但社区更难反抗和分叉,因为他们需要启动一套新的非常昂贵的高吞吐量节点来维护一条保持旧规则的链。

- 集中式基础设施更容易受到外部参与者的审查。 出块节点的高吞吐量使得它们很容易被检测到,甚至更容易被关闭。 从逻辑上讲,审查专用 HPC 比追踪单个用户的笔记本电脑要容易得多。

- 高性能计算转移到中心化云服务的压力更大,这增加了整个链将运行在 1-3 个公司的云服务中的风险,从而使链因许多区块生产者同时失败而面临风险下降. 具有在自己的硬件上运行验证器文化的分片链也不太容易受到这种攻击。

适当的分片系统最适合作为基础层。 使用分片基础层,我们始终可以通过将其构建为汇总来创建集中式生产系统。 但是,如果我们有一个依赖中心化区块生产的基础层,我们就无法在其之上构建更去中心化的第 2 层。