本文作者:以太坊创始人Vitalik Buterin

英文原文:https://vitalik.ca/general/2021/04/07/sharding.html

特别感谢Dankrad Feist和Aditya Asgaonkar对本文内容的审核。

分片(sharding)是以太坊可扩展性的未来,它将是协助以太坊生态体系每秒支撑数千笔买卖并答应国际上大部分地区以可承受的本钱常常运用该平台的要害。可是,分片也是以太坊生态体系和更广泛的区块链生态体系中很简略被误解的概念之一。分片指的是一组具有十分特定特点的十分特定的主意,可是它常常与具有十分不同且一般弱得多的安全特点的技能混为一谈。这篇文章的意图是切当解说分片供给的特定特点,它与没有分片的其他技能有何不同,以及为完成这些特点而必须做出的牺牲。

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

以太坊的分片版别的很多描绘之一。Hsiao-wei Wang供给原始图,由Quantstamp规划。

可扩展性三角

描绘分片的最佳办法便是从刻画和启发处理计划的问题陈说开端:可扩展性三角

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

可扩展性三角认为,区块链企图一起具有三个特点,假如坚持技能“简略性”,那么你只能取得这三个特点中的两个,即区块链“不或许三角”。 这三个特点是:

  • 可扩展性:区块链可以处理的买卖量比单个惯例节点(例如:消费级笔记本电脑)可以验证的买卖量更多。

  • 去中心化:区块链可以在不依赖来自一小群大型中心化参加者的任何信赖的状况下运转。 这一般意味着,您不能把信赖交给一小组节点(即便假定它们大都是诚笃的)(你无法经过消费级笔记本参加成为这些节点之一)。

  • 安全性:区块链可以抵抗来自很大一部分参加节点正在对其打开的进犯。(关于进犯成功所需求的节点,理想状况下50%,25%以上也可以,5%绝对不行)

要想取得可扩展性三角中的两个,咱们现在来看一下三类“简略的处理计划”:

  • 传统的区块链——包含比特币,预PoS /分片的以太坊,莱特币和其他相似的链。这些区块链都依赖于那些运转完整节点的每个参加者来验证每笔买卖,因而它们具有去中心化和安全性,但没有可扩展性。

  • 高TPS区块链——包含DPoS系列,也包含许多其他产品。这些依赖于少数几个节点(一般为10-100个)之间保持一致,而用户必须信赖这些节点中的大大都。这是可扩展的和安全的(从上面的界说来讲),可是它不是去中心化的。

  • 多链生态体系——这是指“横向扩展”的一般概念,经过在不同的链上开发不同的运用,并运用跨链通信协议在它们之间进行对话。这是去中心化的,也是可扩展的,可是不是安全的,因为进犯者仅需求在多个链中的一个(一般少于整个生态体系的1%节点)中取得一致节点的大都,即可打破该链并或许引起连锁反应,然后导致对其他链中的运用造成了极大的损害。

分片是一种可以让您一起具有悉数三个特点的技能。 分片区块链具备:

  • 可扩展:与单个节点比较,它可以处理更多的买卖

  • 去中心化:它可以完全在家用笔记本电脑上运用,而不依赖于任何“超级节点”

  • 安全:进犯者无法运用少数资源来瞄准体系的一小部分进行进犯; 他们只能企图统治和进犯整个区块链体系

本文章的其余部分将描绘分片区块链怎么做到这一点。

经过随机采样进行分片

分片最简略理解的版别是经过随机采样进行分片。与咱们在以太坊生态体系中树立的分片形式比较,经过随机采样进行分片具有较弱的信赖特点,但它运用的技能更简略。

中心思想如下。假定您有一个具有很多(例如10000个)验证者的PoS链,而且您有很多(例如100个)需求验证的区块。在出现下一组区块产出之前,单一一台核算机不具有足以验证一切这些区块的才能。

因而,咱们要做的是随机分配进行验证的作业。咱们随机地对验证者列表进行混洗,并在混洗后的列表中分配前100个验证者以验证第一个区块,在混洗后的列表中分配后100个验证者以验证第二个区块,依此类推。这些随机分配用于验证区块(或履行其他使命)的验证者们称为委员会(committee)

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

验证者验证区块时,他们会发布签名,以证明他们已这样做。 不同于一切人都验证这100个区块,取而代之的是一切人验证10000个签名——这么做的作业量要小得多,特别是运用BLS签名聚合‌时。 替代经过相同的P2P网络广播每个区块,而是在不同的子网(sub-network)上广播每个区块,而且节点仅需求参加它们负责(或出于其他原因而感兴趣)的区块地点的子网。

请考虑一下,假如每个节点的核算才能添加2倍,会产生什么状况。 因为每个节点现在可以安全地验证2倍以上的签名,因而您可以削减最小的质押存款巨细以支撑2倍的验证者,因而,您可以组成200个委员会而不是100个委员会。因而,您可以每个插槽验证200个区块而不是100个。 此外,每个独自的区块也可以扩展2倍。 因而,您有2倍数量的2倍巨细区块,换句话说区块链容量总共添加了4倍。

咱们可以经过一些数学术语来表明。 运用Big O表明法‌,咱们运用“ O(C)”来指代单个节点的核算才能。 传统的区块链可以处理O(C)个区块。 如上所述的分片区块链可以并行处理O(C)个区块(请记住,每个节点直接验证每个区块的本钱为O(1),因为每个节点只需求验证固定数量的签名即可),每个区块具有O(C)容量,因而分片区块链的总容量为O(C2)。 这便是为什么咱们将这种分片称为“二次分片”,而且这种影响是咱们认为从长远来看分片是扩展区块链的最佳办法的要害原因。

常见问题:拆分为100个委员会与拆分为100个独立的链有何不同?

有两点不同:

  1. 随机采样可防止进犯者将力气集中在一个分片上。在一个具有100条链的多链生态体系中,进犯者只需求约0.5%的质押就可造成严峻损坏:他们可以专心于对一条链打开51%进犯。在分片的区块链中,进犯者必须具有悉数质押的约30-40%才能做相同的作业(换句话说,整个链具有同享的安全性)。当然,进犯者可以等候,虽然其持有的质押少于悉数质押的50%,但可以经过取得随机时机取得单个分片进行51%进犯的时机,可是关于少于51%的进犯者,这将进犯难度成倍添加。假如进犯者的财物少于〜30%,则简直是不或许的进犯成功的。

  2. 紧密耦合:即便一个分片遇到坏块,整个链也会重组以防止这个区块。这里有一个社会合约(在本文档的后续部分中,咱们描绘了一些从技能上实施这种合约的办法),即便一条链在一个分片中只要一个坏块,这也是不行承受的,一旦发现,就应该废弃。这样可以保证从链上运用的角度来看,它具有完美的安全性:合约A可以依赖合约B,因为假如合约B因为对链的进犯而行为不妥,那么整个历史记录都将复原,包含其因为合约B的毛病而行为不妥的合约A买卖。

这两种差异保证分片为运用创立了一个环境,该环境保存了单链环境的要害安全特点,而多链生态体系则底子没有这种办法。

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

比特币社区的一种普遍看法是我完全同意的,那便是像比特币(或以太坊)这样的区块链并不完全依赖一种诚笃大都假定。假如对这样的区块链打开51%进犯,则进犯者可以做一些令人讨厌的作业,例如复原或检查买卖,但他们不能插入无效的买卖。而且即便进行复原或检查买卖,运转惯例节点的用户也可以轻松检测到该行为,因而,假如社区期望经过分叉来消除进犯者的力气来和谐处理该进犯,他们可以敏捷采取举动。

缺少这种额定的安全性是更中心化的高TPS链所面对的首要缺点。这样的链没有,也不或许具有运转节点的惯例用户文明,因而首要节点和生态体系参加者可以更轻松地聚在一起,并实施社区十分不喜欢的协议更改。更糟糕的是,用户的节点默许状况下会承受它。一段时刻后,用户会察觉,可是到那时,这个强制协议更改现已成为既成现实:这个和谐负担将由用户承当来回绝更改,他们将不得不做出苦楚的决定来逆转这一天在区块链上产生的价值,或吊销更多每个人都以为现已完结的活动。

理想状况下,咱们期望采用一种分片形式,防止51%信赖假定,并保存传统区块链从全面验证中取得的强壮安全堡垒。而这正是咱们过去几年的大部分研究成果。

可扩展的核算验证

咱们可以将抗51%进犯的可扩展验证问题分为两种状况:

  • 验证核算:查看某些核算是否正确完结,假定您具有该核算的一切输入

  • 验证数据可用性:查看核算自身的输入是否以某种形式存储,假如确实需求,可以下载它们;履行此查看时,请不要实践下载一切输入自身(因为数据或许太大,无法每个区块都下载)

验证区块链中的区块涉及核算和数据可用性查看:您需求坚信区块中的买卖有用,而且区块中声明的新状况根哈希是履行这些买卖的正确成果,可是您还需求需求坚信来自该区块的满足数据实践上现已发布,以便下载该数据的用户可以核算状况并持续处理区块链。第二部分是一个十分微妙但重要的概念,称为数据可用性问题‌。稍后再评论。

扩展验证核算相对简略;有两种技能:诈骗证明(fraud proofs)ZK-SNARK

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

诈骗证明是一种可扩展地验证核算的办法。

这两种技能可以简略地描绘,如下:

  • 诈骗证明是一个承受核算成果的体系,您需求有进行过质押的人签署以下形式的音讯:“我证明,假如运用输入X进行核算C,则会得到输出Y”。您默许状况下会信赖这些音讯,可是会给进行过质押的其他人供给应战成果的时机(他们可以签名音讯,说“我不同意,输出成果应该为Z,而不是Y”)。仅当有人应战成果时,一切节点才运转核算。这两方中的任何一方犯错都会失掉其质押,而且将重新核算一切依赖于该核算成果的核算。

  • ZK-SNARK是一种加密证明形式,可以直接证明“在输入X上履行核算C会给出输出Y”的主张。该证明在暗码上是“合理的”:假如C(x)不等于Y,则在核算上不或许做出有用的证明。即便运转C自身花费很多时刻,该证明也可以很快地进行验证。有关ZK-SNARK的更大都学详细信息,请拜见此文章。

根据诈骗证明的核算是可扩展的,因为在“一般状况下”,您将经过验证单个签名来替代运转杂乱的核算。在特别状况下,因为存在应战,您必须在链上验证核算,可是在特别状况下却很罕见,因为触发它的代价十分贵重(开始的声明者或应战者都会或许失掉很多保证金)。 ZK-SNARK在概念上更简略——它们只是用便宜得多的证明验证来替代核算——但其作业原理背后的数学却要杂乱得多。

有一种半可扩展体系,它只能扩展地验证核算,一起仍然需求每个节点验证一切数据。经过运用一组压缩技巧将大部分数据替换为核算,可以使此办法十分有用。这是Rollup‌的领域。

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

诈骗证明不能用于验证数据的可用性。核算的诈骗证明依赖于这样的现实,即核算的输入在开始声明者提交后即在链上发布,因而,假如有人应战,则应战履行将在与原始履行完全相同的“环境”中进行。在查看数据可用性的状况下,您不能履行此操作,因为问题恰恰是存在太大都据需求查看才能在链上发布的现实。因而,用于数据可用性的防诈骗计划遇到了一个要害问题:有人可以声称“数据X可用”但并不发布它,等候遭到应战,然后只要在应战者出现在网络的其余部分而且过错的时候才发布数据X。

这在“fisherman窘境‌”中得到了扩展:

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

中心思想是,这两个“国际”,一个是V1是一个邪恶的发布者,V2是一个诚笃的应战者,而另一个“国际”是V1是一个诚笃的发布者,V2是一个邪恶的应战者。两种状况关于当时未测验下载该特定数据的任何人来说都没有区别。 当然,在可扩展的去中心化区块链中,每个独自的节点只能期望下载一小部分数据,因而只要一小部分节点会看到产生了什么作业,除了存在不合的现实。

分清谁对谁错是不或许的,这个现实使得不或许有一个有用的诈骗证明机制来保证数据的可用性。

常见问题:假如某些数据不行用怎么办?运用ZK-SNARK,您可以保证一切都有用,这还不行吗?

不幸的是,只是有用性还不足以保证区块链正确运转。这是因为,假如区块链有用,但一切数据均不行用,则用户将无法更新其生成任何未来区块有用的证明所需的数据。生成有用但不行用的区块然后消失的进犯者可以有用地让区块链堕入阻滞。有人还可以保存特定用户的帐户数据,直到该用户付出赎金为止,因而问题不只是在于生计问题。

有一些强有力的信息理论论点认为这个问题是底子的,而且没有可以处理的聪明技巧(例如,涉及暗码累加器‌)。有关详细信息,请拜见本文(https://eprint.iacr.org/2009/612.pdf‌)。

那么,如安在不实践下载的状况下查看1 MB数据是否可用?听起来是不或许的!

这里的要害是一项称为数据可用性采样‌的技能。数据可用性采样的作业办法如下:

  1. 运用称为擦除编码(erasure coding)的工具将具有N个区块的数据扩展为具有2N个区块的数据,以使这些区块中的任何N个都可以康复整个数据。

  2. 为了查看可用性,用户无需测验下载悉数数据,而只是随机地挑选区块中恒定数量的方位(例如30个方位),而且仅当他们在一切选定方位的块中成功找到块时,才承受这个区块。

V神:分片是以太坊可扩展性的未来,揭开分片的神秘面纱

擦除编码将“查看100%可用性”(每条数据可用)问题转换为“查看50%可用性”(至少一半数据可用)问题。随机抽样处理了50%可用性问题。假如少于50%的数据可用,那么至少有一项查看简直可以必定会失利,而且假如至少50%的数据可用,那么,虽然某些节点或许无法将某个区块识别为可用,但这只需求一个诚笃节点就能运转擦除编码重建程序,以带回剩下的50%区块。因而,您无需下载1 MB来查看1 MB区块的可用性,而只需下载几KB。这使得在每个区块上运转数据可用性查看变得可行。有关怎么运用点对点子网有用地履行此查看的信息,请拜见这篇文章(https://hackmd.io/@vbuterin/sharding_proposal#Blob-publication-process‌)。

可以运用ZK-SNARK来验证对一条数据的擦除编码是否正确完结,然后可以运用Merkle分支来验证各个区块。或许,您可以运用多项式许诺(例如Kate(又叫KZG)许诺‌),该许诺本质上是在一个简略的组件中进行擦除编码并证明单个元素和正确性验证——这便是以太坊分片所运用的。

回顾:咱们怎么保证一切都正确?

假定您有100个区块,而且您想不依托委员会就有用地验证一切区块的正确性。咱们需求履行以下操作:

  • 每个客户端在每个区块上履行数据可用性采样,以验证每个区块中的数据是否可用,一起每个区块仅下载几KB,即便区块的全体巨细为MB或更大。客户端仅在正确呼应了其可用性应战的一切数据后才承受区块。

  • 已然咱们现已验证了数据的可用性,那么验证正确性将变得愈加简略。有两种技能:

  1. 咱们可以运用诈骗证明:一些质押存款的参加者可以对每个区块的正确性进行签名。其他称为应战者(或fisherman)的节点随机查看并测验完全处理区块。因为咱们现已查看了数据可用性,所以一直可以下载数据并完全处理任何特定的块。假如他们发现一个无效的区块,他们将发布一个一切人都可以验证的应战。假如该块被证明是坏的,则需求重新核算该块以及一切依赖于该块的未来区块。

  2. 咱们可以运用ZK-SNARK。每个区块都带有一个ZK-SNARK证明正确性。

  • 在以上两种状况下,每个客户端仅需求对每个区块进行少数验证作业,不管区块有多大。就诈骗证据而言,偶尔需求在链上对区块进行充沛验证,但这应该十分罕见,因为即便仅触发一个应战也是十分贵重的。

这便是悉数! 在以太坊分片中,短期计划是使分片的区块仅成为数据(data only)。 也便是说,这些分片纯粹是一个“数据可用性引擎”,运用该安全数据空间以及诈骗证明或ZK-SNARK来完成高吞吐量安全买卖处理功用是Layer Rollup的作业。 可是,完全有或许创立这样一个内置体系来添加“本机”高吞吐量履行。

分片体系的要害特性是什么?权衡是什么?

分片的首要目标是尽或许地复制传统(非分片)区块链最重要的安全特点,而无需每个节点亲身验证每笔买卖。

分片正在十分接近到来。 在传统的区块链中:

  • 无效的区块无法经过,因为验证节点会注意到它们无效并疏忽它们。

  • 不行用的区块无法经过,因为验证节点无法下载它们并疏忽它们。

在具有高档安全功用的分片区块链中:

  • 无效的区块无法经过,因为:

  1. 诈骗证明会敏捷将其捕获,并告知整个网络该区块的不正确性,并严峻惩罚创立者,或许

  2. ZK-SNARK证明是正确性,而且您不能为无效区块制造有用的ZK-SNARK。

  • 不行用的区块无法经过,因为:

  1. 假如只要不到50%的数据区块可用,则简直可以必定每个客户端都会进行至少一次数据可用性样本查看,然后导致客户端回绝该数据块,

  2. 假如至少有50%的区块数据可用,那么实践上整个区块都是可用的,因为仅需一个诚笃节点即可重建其余区块。

没有分片的传统高TPS链无法供给这些保证。 多链生态体系无法防止进犯者挑选一条链进行进犯并简单接收的问题(这些链可以同享安全性,可是假如做得欠好,它将变成现实上的传统高TPS链 ,这些都是缺点,而且假如做得好,将只是上述分片技能的一种更杂乱的完成)。

侧链高度依赖于完成,可是它们一般简略面对传统高TPS链的缺点(这是假如它们同享矿工/验证者)或多链生态体系的缺点(即,假如它们不同享矿工/验证者) )。 分片链防止了这些问题。

可是,分片体系中有一些危险。特别:

  • 仅依赖于委员会的分片链很简略遭到适应性对手的进犯,而且问责制也较弱。也便是说,假如对手可以实时侵略(或关闭)他们挑选的任何节点调集,那么他们只需求进犯少数节点即可损坏一个委员会。此外,假如对手(不管是适应性对手还是占质押总数的50%的进犯者)确实损坏了一个委员会,则只能公开承认他们的少数节点(该委员会中的节点)参加这个进犯,因而只要少数质押会遭到处罚。这是为什么数据可用性采样与诈骗证明或ZK-SNARK一起成为随机采样技能的重要弥补的另一个要害原因。

  • 仅当有满足数量的在线客户端集体搜集满足的数据可用性采样请求时,数据可用性采样才是安全的,这些呼应简直总是重叠以构成至少50%区块。在实践中,这意味着必须有几百个客户端在线(而且此数量越大,体系容量与单个节点容量的比率就越高)。这是一个few-to-N信赖模型‌——一般十分值得信赖,当然,它不如非分片链中的节点具有可用性的N-of-N信赖那么强壮。

  • 假如分片链依赖于诈骗证明,那么它依赖于时序假定;假如网络太慢,则在诈骗证显着示它是过错的之前,节点或许会承受某一个区块具有终究性。幸运的是,假如您遵从严厉的规矩,一旦发现了无效性,就会复原一切无效块,此阈值是用户设置的参数:每个用户都挑选等候到达终究状况所需的时刻,假如他们不想等候满足长的时刻,则会遭受丢失,但更谨慎的用户是安全的。即便如此,这仍在削弱用户体会。运用ZK-SNARK验证有用性可以处理此问题。

  • 需求传递很多的原始数据,然后添加了极端网络条件下产生毛病的危险。与很多数据比较,少数数据更简略发送(假如强壮的政府企图检查链,也更简略安全躲藏)。假如区块链浏览器想要保存整个链,则需求存储更大都据。

  • 分片的区块链依赖于分片的点对点网络,而且每个独自的p2p“子网”因为具有较少的节点而更简略遭到进犯。用于数据可用性采样的子网模型‌可以缓解这种状况,因为子网之间存在一些冗余,但仍然存在危险。

这些是有用的关注点,虽然在咱们看来,经过答应更多运用程序在链上运转而不是经过集中式第2层服务来完成的用户等级集中化的削减,远远超越了它们。也便是说,这些问题,特别是最后两个问题,实践上是对添加分片链的吞吐量超越特定点的真正约束。二次分片的二次性是有极限的。

顺便说一句,假如吞吐量过高,则分片区块链的安全危险将日益增大,这也是很大程度上抛弃了扩展至超二次分片的努力的首要原因。好像保持二次分片只是二次真的是快乐的媒介。

为什么中心化出产和分片验证?

常常提出的一种替代分片的办法是,运用相似于中心化高TPS链的结构,除了它在顶部运用数据可用性采样和分片以验证有用性和可用性之外。

现在,中心化高TPS链在这方面有所改进,但仍比分片体系弱得多。 这是出于以下几个原因:

  1. 在高TPS链中,要检测区块出产者的检查要困难得多。 检查查看需求(i)可以查看每笔买卖并验证没有显着值得参加的买卖,而该买卖不可思议地无法进入,或许(ii)在区块出产者中具有N分之一的信赖模型,而且在中心化高TPS链中,(i)是不或许的,而(ii)则更困难,因为节点数少,甚至1of N信赖模型都更简略被损坏,而且 假如该链的区块时刻关于DAS来说太快(就像大大都中心化高TPS链那样),则很难证明节点的区块不会只是因为它们的发布速度太慢而被回绝。

  2. 假如大大都区块出产者和生态体系成员企图强制履行不受欢迎的协议更改,则用户的客户必定会检测到它,可是社区抵挡和分叉的难度要大得多,因为他们需求旋转一套新的贵重的高吞吐量节点,以维持遵守旧规矩的链条。

  3. 中心化根底架构更简略遭到外部参加者的检查。区块出产节点的高吞吐量使其十分易于检测,而且更易于关闭。检查专用的高性能核算在政治上和后勤上比在单个用户的笔记本电脑上进行检查要简略得多。

  4. 高性能核算向中心化云服务搬运的压力更大,添加了整个链将在1-3家公司的云服务中运转的危险,因而,因为许多区块出产者一起失利,导致链崩溃的危险更大。那些在自己的硬件上运转的验证者的分片链不会那么简略遭到这种进犯。

恰当分片的体系最好作为根底层。关于一个分片的根底层,您可以将其构建为Rollup,一直可以创立一个中心化出产体系(例如,您想要一个用于DeFi的具有同步可组合性的高吞吐量域名‌)。可是,假如您有一个依赖于中心化区块出产的根底层,则不能在上面构建一个愈加去中心化的Layer2。

视野开拓

在读-《卢瑟经济学》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注