以太坊中的sharding

目前以太坊网络运行的每个节点必须处理网络中的每一个交易。

这使得区块链具有很高的安全性,因为安全性取决于每个区块被验证的次数,但这也意味着整个区块链的速度与其各个节点一样快,而不是各部分的总和。

目前,EVM上的交易不可并行化,并且每个交易都按顺序全局执行。

区块链最多只能满足以下三种属性中的两种:即 去中心化,可扩展性和安全性。

如果区块链具备可扩展性和安全性,则意味着它是中心化的,中心化会使其具有更高的吞吐量,以太坊则是去中心化和安全的。

自然而然会想产生这么一个想法,如何将可扩展性纳入模型?

不能只增加区块大小,或是在以太坊中增加 GAS_LIMIT 来提高吞吐量。

虽然从理论上讲这可能是一种正确的方法,

但越是不断增加区块大小或 Gas_LIMIT,围绕“世界计算机”上节点的挖矿行为会越中心化, 这会使新节点进入系统的门槛更高。

针对上述所描述的问题,因此引入了区块链“分片”的想法,即将整个网络状态划分成各个分区,每个分区称为"分片"(sharding)。

这些分区包含独立的状态和交易历史记录。

其中节点只会处理对应分片中的交易内容,这使得在所有分片中处理的交易吞吐量远高于 单个分片完成所有验证工作的吞吐量。

在区块链的“分片”中,包含一些基本的重要词汇:

  1. 状态(State):在任意时间点描述系统的信息集合。在以太坊中,它包含“当前余额”,“智能合约代码”,以及特定时间点的随机数(nonce)。
  2. 交易:由用户发出的更改系统状态的操作。
  3. 默克尔树:一种通过加密哈希存储大量数据的数据结构。默克尔树的作用是在很短的时间内以很小的计算量来检查数据是否是结构的一部分。
  4. 凭证:交易的附属品,不存储在系统状态中,但保存在默克尔树中,以太坊的智能合约日志可作为凭证保存在默克尔树中。

在这里很容易联想到一个亟待解决的问题,即 “跨分片交易“该如何解决?

举个例子以便理解,假设 Alice 把代币从 1 号分片地址发送给 Bob 所在的 10 号分片地址。

首先一笔发送到 1 号分片的交易扣除了 Alice 余额中对应数量的代币,此时系统等待交易完成。

然后创建对应的交易凭证,如之前所说,它在默克尔树中存储。

接着包含默克尔凭证在内的交易被发送到 10 号分片地址。

10号分片会检查该凭证是否还未被花费 然后 10 号分片处理该交易并在 Bob 的余额中增加相应数目的代币,随后保存对应的凭证。

最后 10 号分片生成一份新的,可供随后交易使用的凭证。

这是以太坊 sharding 的相关简介 。(鞠躬谢幕)

Leave a Reply

Your email address will not be published.