如何扩展以太坊:分片

可扩展性辩论位于加密社区的前端和中心。 在几天的时间内,Cryptokitities崩溃等重大事件的发生阻塞了整个以太坊网络,众所周知,当前状态下最大的公共链不会扩展 。

那么社区决定采取哪些方法? 解决方案是双重的。 第一种方法是通过脱链解决方案(也称为第二层缩放)来提高扩展性,其中一些事务处理在区块链之外,并且仅与其进行有效的交互。 另一种方法是修改协议的设计,以解决区块链所面临的并行性问题。 不幸的是,我们中的许多协议开发人员经常看到这些问题,并立即感到被他们所构成的巨大困难所拖延。

虽然我们仍处于以太坊的早期阶段,但社区充满了科技领域的一些最聪明的头脑,有如此多的创新以极快的速度发生。 很容易感觉到有更聪明的开发者可能更有资格处理诸如可伸缩性等重大问题,但这种感觉正在阻碍我们。 事实是,社区愿意并愿意帮助任何想参与进来的人,并且是的,包括 ! 这篇文章将打破以太坊核心团队正在采取的分拆方法,揭示当前的局限性和改进途径。 在这篇文章的最后,你会知道足够的知识来自己探索这个问题,谁知道呢,也许你会成为构建第一个分片客户端的人!

由于以太坊的交易数量持续上升,我们没有时间损失。 让我们开始吧。

什么是Sharding?

目前,运行以太网网络的每个节点都必须处理通过网络传输的每一笔交易。这使区块链具有很高的安全性,因为每个区块有多少验证,但同时这意味着整个区块链只与其单个节点一样快,而不是其各个部分的总和。 目前,EVM上的事务是不可并行化的,并且每个事务都是按照全局顺序执行的。 可扩展性问题与块链最多可以包含以下3个属性中的2个有关 :

  • 分权
  • Scalabiltity
  • 安全

如果我们具有可扩展性和安全性,这意味着我们的区块链是集中式的,并且可以实现更快的吞吐量。 对,不,以太坊是分散安全的 。

我们如何打破这个三难局面,在当前模型中包含可伸缩性? 我们不能只是增加块大小,或者在以太坊的情况下,GAS_LIMIT增加吞吐量? 虽然理论上这可能是一个正确的方法,但我们越是越多越好,采矿将集中在超级计算机上运行的节点周围,这会给进入系统带来更高的障碍。

更明智的做法是区块链分片的概念,我们将网络的整个状态分割成一系列称为碎片的分区,其中包含自己独立的状态和事务历史记录。 在这个系统中,某些节点只会处理某些分片的事务处理,从而允许在所有分片中总共处理的事务的吞吐量比单个分片完成所有主分支现在所做的工作要高得多。

在我们深入讨论分片区块链的实际工作方式之前,让我们回顾一下重要的词汇表​​:

  • 状态 :在任何时间点描述系统的整套信息。 在以太坊,这是包含当前余额,智能合约代码和特定时刻的随机数的当前账户集合。 每笔交易都会将此状态变为全新的状态。
  • 事务 :用户发出的更改系统状态的操作
  • Merkle Tree:一种可以通过加密哈希存储大量数据的数据结构。 Merkle树可以很容易地在很短的时间内和计算量上检查一段数据是否属于结构的一部分。
  • 收据:事务的副作用,不存储在系统状态中,但保存在Merkle树中,以便可以轻松地验证其存在。 例如,以太坊中的智能合约日志在Merkle树中保存为收据。

考虑到这一点,我们来看看分片系统的结构。 首先,我们可以在某个分片上创建一个叫collat​​ors的节点,它负责创建一个排序规则 ,它是一个包含关于所涉及分片的重要信息的特定结构。

这些排序规则就像对某个分片的状态和事务的迷你描述。 他们每个人都有一个排序标题 ,这是一个包含的数据

  • 关于排序规则对应的分片的信息(比方说分片10)
  • 在应用所有交易之前关于分片的当前状态的信息
  • 有关所有交易应用后分片状态的信息
  • 来自至少2/3的分片上的所有校勘员的数字签名确认校对是合法的

如果一个交易发生在各个分片上呢? 例如,如果我将钱从分片1中的地址发送到分片10中的地址,该怎么办? 这个系统最重要的部分之一就是跨越分片进行通信的能力,否则我们并没有完成任何新的事情。 这是收据的概念发挥作用的地方,以及它如何允许上述场景发挥作用。

劳尔(地址在碎片1)想要发送100 ETH给吉姆(地址在碎片10上)

  1. 交易被发送到碎片1 ,将劳尔的余额减少100 ETH,系统等待交易完成
  2. 然后为事务创建收据 ,该收据不是以状态存储的,而是以容易验证的Merkle根目录创建的
  3. 交易被发送到碎片10,包括Merkle收据作为数据。 碎片10检查该收据是否尚未用完
  4. Shard 10处理交易并将Jim的余额增加100 ETH。 然后它也节省了从碎片1收到的收据
  5. 碎片10创建一个新的收据,然后可以在随后的交易中使用

这听起来很酷,但什么是一些陷阱?

一旦我们考虑到对网络的可能攻击,分裂区块链的问题就会变得更加明显。一个主要的问题是单一碎片接管攻击的概念 ,攻击者在一个碎片中接管绝大多数的整理者来创建可以提交无效排序规则的恶意碎片。 我们如何解决这个问题?

[caption id =“attachment_195”align =“alignnone”width =“1420”]

感谢王晓伟

以太坊Wiki的分片常见问题解答建议在每个分片上随机抽取校勘员。 目标是这些验证者不会知道他们会提前获得哪些碎片。 每一个碎片都会被分配一堆整理者,而实际上验证交易的那些将从该组中随机抽样。

股权证明使得这很微不足道,因为已经有一组全球验证者,我们可以从中选择整理者。 随机性的来源必须是共同的,以确保这种抽样完全是强制性的,并且不能由有问题的验证人进行比较。

此外,进行这种随机抽样还有一些潜在的延迟问题。 想象一下,你运行了一个以太坊节点,并已经与整个区块链历史记录同步,开始进行交易。 如果在几个街区之后,你必须再次与一条新链条完全同步呢? 这是验证器节点重新洗牌时会发生的情况,因为当它们被随机分配为整理器时,它们每个都需要重新下载新的碎片,这会带来很多潜在的开销。

要详细了解潜在的安全风险以及针对此问题和其他问题的详细方法,请查看Ethereum Sharding常见问题解答。

这对于Solidity Devs和Ethereum用户理解起来听起来如此复杂! 我们将如何在分片上教育他们?

他们不需要。 分片将专门存在于协议层,不会暴露给开发人员。 以太坊系统将继续像目前一样,但协议将有一个内置系统,可以创建碎片,在碎片之间平衡状态,摆脱碎片太小等等。 这将全部在幕后完成,允许开发者在Ethereum上继续他们当前的工作流程。

超越规模:超二次分片和难以置信的速度增益

为了超越和超越,以太坊可能会采用超二次分片方案(简单的英语表示由碎片碎片构成的系统)。 目前这种复杂性很难想象,但是可扩展性的潜力是巨大的。 此外,超级分区分割区块链将为用户带来巨大利益,将交易费用降至可忽略的数量,并为各种新应用提供更通用的基础架构。

资源和从哪里开始

好吧,现在你想开始编码分片区块链! 你怎么开始? 在最基本的层面上,拟议的初始实施不会通过硬分叉来实现,而是通过称为验证管理器合约的智能合约来控制分片系统。

VMC将管理来自全球验证机构的碎片和提议的整理者样本,并负责所有碎片状态的全球和解。 Vitalik在这里概述了一个用于实现分片的出色参考文档:https : //github.com/ethereum/sharding/blob/develop/docs/doc.md

要详细了解此VMC体系结构并了解有关系统工作方式的更多信息,请查看以下资源:


原文: https://medium.com/prysmatic-labs/how-to-scale-ethereum-sharding-explained-ba2e283b7fce

猜你喜欢

转载自blog.csdn.net/omnispace/article/details/80224802