---
title: "Ethereum 分片：区块链分片入门"
description: "什么是区块链分片，它与 Ethereum 有什么关系？"
---

## **什么是区块链分片？**

Ethereum 分片已被 [danksharding 取代——后者支持 layer 2 扩容，而非直接扩容主网](https://etherscan.io/chartsync/chainarchive)。

**提示**：以下文章概述了已放弃的 Ethereum 主网分片方案。部分数据可能已过时。有关 Ethereum 扩容路线图的最新信息，请参阅上方链接的 danksharding 文章。

多年来，开发者社区一直在讨论区块链可扩展性的问题。公共区块链网络（如 Ethereum）需要多个节点验证交易，这限制了其扩容能力。

例如，Ethereum 每秒大约能处理 10-13 笔交易。相比之下，VISA 这类中心化系统每秒可处理高达 24,000 笔交易。

如果区块链——以及运行在其上的去中心化应用——要实现大规模采用，就需要能够支持人口级别的可扩展性。

除了 layer 2 区块链之外，分片也是一种被提出用来扩展 Ethereum 以支持更多用户的方案。分片的思路是将主链拆分为多个独立的部分，使节点只需验证一部分交易。

由于节点并行验证交易，网络吞吐量可以提升，[应用](https://www.alchemy.com/dapps/top/defi-dapps)也能随着用户数量的增长而扩展。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Payment System / Cryptocurrency", dataType: "object" },
      { key: "2", width: 200, title: "Transactions per Second", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Visa</p>", tooltip: "", icon: "" },
        "2": { title: "<p>24,000</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Ripple</p>", tooltip: "", icon: "" },
        "2": { title: "<p>1,500</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>PayPal</p>", tooltip: "", icon: "" },
        "2": { title: "<p>193</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Bitcoin Cash</p>", tooltip: "", icon: "" },
        "2": { title: "<p>60</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Litecoin</p>", tooltip: "", icon: "" },
        "2": { title: "<p>56</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Dash</p>", tooltip: "", icon: "" },
        "2": { title: "<p>48</p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>Ethereum</p>", tooltip: "", icon: "" },
        "2": { title: "<p>20</p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>Bitcoin</p>", tooltip: "", icon: "" },
        "2": { title: "<p>7</p>", tooltip: "", icon: "" },
        id: 7,
      },
    ],
  }}
/>

## **什么是数据库分片？**

数据库分片是中心化数据库管理中的常见技术，指将一个大型数据库拆分成较小的部分（"分片"），通过将数据库并行分布到多台机器上，来提高效率和应用的可扩展性。

随着软件用户数量或操作次数的增加，软件数据库中存储的数据量也会随之增长。数据库过载会影响应用性能，损害用户体验。因此，需要通过分片来减轻数据库负担，改善加载时间。

### **数据库分片示例**

假设有一个数据库，存储着某个城市 100,000 名居民的个人记录。

要查找某个人的信息，需要计算大约 100,000 笔交易——这是一项耗费成本和时间的工作。

但如果我们把这个大型数据库拆分成多个小型数据库会怎样呢？

例如，把所有姓氏以特定字母开头的城市居民分组存放到某台专用服务器上，查找信息所需的计算资源就会减少，任务完成所需的时间也会缩短，数据库也更容易管理。

下面是数据库分片的另一个示例：

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Product", dataType: "object" },
      { key: "2", width: 200, title: "Price", dataType: "object" },
      { key: "3", width: 200, title: "Price Range", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>WIDGET</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$118</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$100+</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>GIZMO</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$88</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$50-$99.99</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>TRINKET</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$37</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$0-$49.99</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>THINGAMAJIG</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$18</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$0-$49.99</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>DOODAD</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$60</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$50-$99.99</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>TCHOTCHKE</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$999</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$100+</p>", tooltip: "", icon: "" },
        id: 5,
      },
    ],
  }}
/>

### 什么是分片（shard）？

"分片"意为"整体中的一小部分"。在数据库管理中，分片是托管在独立服务器上的大型数据库的子集。虽然每个分片只包含部分数据，但它们共同构成一个逻辑上完整的数据集。

以之前的例子为例，我们可以将姓氏以 'A' 开头的城市居民放入 "Shard 1"，姓氏以 'B' 开头的放入 "Shard 2"，依此类推。

如果把这些逻辑分片合并起来，就能得到包含所有城市居民记录的单一数据集。

## **区块链网络中的分片**

区块链网络中的分片过程与中心化数据库类似：区块链网络可以被"分片"，即拆分为若干独立的部分，每个分片存储区块链数据的一部分，并处理一组独立的交易。

通过分片，区块链网络可以改善网络延迟和可扩展性。

### **区块链网络中的分片旨在解决什么问题？**

由于所有节点必须就交易的有效性达成共识（即一致同意），区块链网络在同一时间只能处理少量交易。

通常，每个节点都会存储区块链的完整历史记录，并处理每一笔交易。这正是 Ethereum 和 Bitcoin 等区块链网络"去中心化"的原因所在。

由于每个全节点都拥有网络完整历史记录的副本，恶意行为者要劫持网络、进而回滚或篡改交易就变得更加困难。

不过，保证区块链的去中心化和安全性是以牺牲可扩展性为代价的。

分片后的区块链允许节点不必下载区块链的完整历史记录，也不必验证经过网络的每一笔交易，这提高了网络效率，使区块链能够扩展以支持更大的用户需求。

<ImageBlock
  src="https://media.alchemy.com/1703255000-ethereum-sharding-diagram.jpeg"
  alt="Ethereum 分片图"
  width={792}
  height={379}
  caption="来源：创世区块"
/>

### **什么是分片链（shard chain）？**

在区块链网络的语境下，分片链只包含一部分数据，并负责一部分交易处理工作。

分片链就像一组独立运行的迷你区块链，为了保证安全性，每条分片链会定期通过验证者管理合约（Validator Manager Contract，简称 VMC）向主链（信标链，Beacon Chain）提交交易记录。

由于每条分片链都拥有独立的交易历史和一组用于验证新交易的节点，多条分片链可以同时运行，通过并行处理来提升网络延迟表现和吞吐量。

<ImageBlock
  src="https://media.alchemy.com/1703771502-shard-chains.jpeg"
  alt="分片链向 Ethereum 信标链提交交易记录的示意图"
  width={1542}
  height={687}
  caption="分片链"
/>

## **Ethereum 中的分片是什么？**

Ethereum 计划在完成 [Ethereum PoS 升级](https://www.alchemy.com/overviews/ethereum-2-0-your-guide-for-2022)（一系列旨在改进 Ethereum 1.0 功能的升级）之后，采用分片作为一种扩容方案。

### **为什么需要分片？**

Ethereum 需要分片主要出于两个原因：支持用户数量的指数级增长，以及在规模扩大的同时保持去中心化。

#### **1. 支持不断增长的用户数量**

Ethereum 目前的结构无法应对使用量的指数级增长。

目前，所有 Ethereum 节点都存储着 [Ethereum 虚拟机（EVM）](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)的完整状态，包括智能合约代码和账户余额。

此外，交易是按线性方式执行的，需要经过整个网络的确认。

线性交易处理方式以及节点需要管理大量数据，都拖慢了网络速度。

#### **2. 在规模扩大的同时保持去中心化**

要求节点保存区块链完整副本，也会带来中心化的问题。目前，Ethereum 账本[已占用超过 10 TB 的存储空间](https://etherscan.io/chartsync/chainarchive)，是普通计算机存储容量的 10 倍。

随着 Ethereum 区块链不断增长，运行 Ethereum 节点可能变得越来越困难，最终只剩下少数节点来负责网络安全。这就重新引入了 Ethereum 本应解决的中心化和单点故障问题，削弱了其价值。

#### **分片可以同时解决这两个问题。**

分片能够提升可扩展性，因为节点可以同时验证不同的交易；将交易数据拆分成更小的部分，也使运行全节点变得更容易，从而降低了中心化的风险。

## **Ethereum 分片相关术语**

在解释分片的工作原理之前，先介绍一些重要的定义：

#### **状态（State）**

状态指的是系统在某一时刻的信息。在 Ethereum 中，状态是对网络在特定时间点的描述——包括合约代码、账户、地址余额等。每一笔新交易都会改变 Ethereum 的状态。

#### **默克尔树（Merkle tree）**

默克尔树（或称默克尔根）是一种通过哈希值存储大量信息的密码学机制。默克尔树/根对 Ethereum 的安全性至关重要，因为它们使节点能够快速验证某条数据是否属于更大的数据结构。

#### **归并（Collation）**

归并是在分片链上执行的一组交易，类似于工作量证明（PoW）中的区块。归并会被提交到主链，并相互连接形成区块链。

#### **归并头（Collation header）**

归并头类似于工作量证明共识中的区块头。归并头包含归并内部信息的元数据，例如：

- 该归并所属的分片
- 父归并的根哈希
- 归并中所有交易的默克尔根
- 前置状态根（pre-state root）和后置状态根（post-state root）
- 公证人的签名

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Property", dataType: "object" },
      { key: "2", width: 200, title: "Value", dataType: "object" },
      { key: "3", width: 200, title: "Signature 1", dataType: "object" },
      { key: "4", width: 200, title: "Signature 2", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p><strong>Shard ID:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>43</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #1284&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #2543&gt;</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p><strong>Pre state:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>a138b3ff</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #7821&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #6118&gt;</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p><strong>Post state:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>835680cc</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #9053&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #4337&gt;</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p><strong>Receipt root:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>fa3819d4</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #1662&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #4785&gt;</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Tx a142</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx a558</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx eca6</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Tx a35f</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx e25a</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx 34ac</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>Tx 2308</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx 6987</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx f260</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>Tx 9f14</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx ec30</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx 5fc3</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 7,
      },
    ],
  }}
/>

#### **公证人（Notaries）**

公证人是被随机分配到某个分片链、对提议的归并进行投票的验证者。这些投票被称为"证明"（attestations），用于证明归并的有效性。每个归并都需要至少三分之二的公证人签署确认，才能被加入共识链。

#### **提议者（Proposers）**

提议者是被选中创建归并并将其提交验证的归并者（或验证者）。提议者的职责与 PoW 区块链中矿工的职责相同。

#### **委员会（Committees）**

委员会是一组负责证明分片区块有效性的验证者或公证人。这些委员会会按一定间隔被随机打乱重组，因此验证者无法预测自己会被分配到哪个（些）委员会。

## **Ethereum 分片是如何运作的？**

由于路线图不断推迟，Ethereum 社区转而放弃了分片计划，转向以 layer 2 为中心的路线图。这使核心开发者得以推出名为"The Merge"的共识升级，将网络共识机制改为权益证明（Proof-of-Stake）。

Ethereum 分片升级原计划将 Ethereum 区块链拆分为 64 条分片链。每条分片链都拥有独立的状态，也就是说，节点只需存储部分账户余额、智能合约代码，并处理总交易量中的一部分。

#### **Ethereum PoS 分片在实践中原本会如何运作？**

假设 Ethereum 有 10,000 名验证者和 100 条分片链。

通过伪随机协议，已在验证者管理合约（VMC）中存入 ETH 的合格验证者会被分配到分片 1-100。

在分片 1 中，一名验证者（提议者）被选中，将新交易分组打包成一个归并。

其他验证者（公证人）会下载该归并，并验证其中交易的有效性。

如果三分之二的公证人对该归并进行了证明，它就会通过 VMC 被提交到主链。

需要注意的是，并不是整个归并都会被添加到信标链上——若要验证来自每个分片的归并，会既困难又浪费时间。

相反，主链上的[验证者节点](https://www.alchemy.com/docs)只需检查每个归并的证明（签名），即可判断其有效性。

<ImageBlock
  src="https://media.alchemy.com/1703771811-how-ethereum-pos-sharding-works.png"
  alt="Ethereum PoS 分片示意图：验证者对提交至主链的分片集合进行证明"
  width={860}
  height={683}
  caption="Ethereum PoS 分片的工作原理"
/>

得益于归并头，任何人都可以验证每个分片上的活动。

归并头的作用类似于"交叉链接"（cross-links），它们描述了不同分片上的状态和交易。因此，跨分片通信使人们无需参与每个分片，就能获得对整个 Ethereum 网络的整体视图。

## **分片的潜在缺点**

尽管 Ethereum 分片承诺带来诸多好处，但它也带来了一系列新问题：

- 每个分片运行的节点更少，恶意行为（如 51% 攻击）变得更容易实施。
- 代码更加复杂，[智能合约安全漏洞](https://alchemy.com/overviews/smart-contract-security-best-practices)的风险增加。
- 委员会成员可能串通，向主链提交恶意交易。

<ImageBlock
  src="https://media.alchemy.com/1703771962-smart-contract-vulnerabilities-via-sharding.jpeg"
  alt="分片带来的智能合约安全漏洞"
  width={741}
  height={343}
  caption="分片带来的智能合约安全漏洞"
/>

## **Ethereum 分片：时间线与分阶段推出**

关于分片的讨论，至少从 2013 年起就一直存在于 Ethereum 社区中，但开发者一直推迟其实施——这是有原因的。分片高度复杂，会引入新的风险，因此需要经过严格测试才能解决其中的问题。

根据 Ethereum.org 的说法，分片将在"The Merge"完成之后才会在 Ethereum 上推出。作为背景说明，Merge 指的是 PoW Ethereum 主网络（mainnet）与信标链（PoS）整合的事件。

[信标链](https://www.alchemy.com/dapps/the-beacon)是 Casper 权益证明系统的一种实现，负责产生构建可用分片系统所需的随机性。该链于 2020 年 12 月 1 日上线。

在下一节中，我们将简要概述分片在 Ethereum 中的实施情况：

## **【已放弃】Ethereum 分片：时间线与分阶段推出**

关于分片的讨论自 2013 年起就一直存在于 Ethereum 社区中，但 Ethereum 开发者一直推迟实施分片，因为分片高度复杂，会引入新的风险，需要经过严格测试才能顺利上线。

以下是 Ethereum 分片时间线的简要概述：

### **ETH 2.0 分片时间线是怎样的？**

根据 Ethereum.org 的说法，分片将在"The Merge"（即 PoW Ethereum 主网络与信标链整合）完成之后才部署到 Ethereum 上。

#### **分片第一阶段**

按照[ Ethereum 计划的升级时间线](https://ethereum.org/en/upgrades/shard-chains/)，这一阶段很可能会在 2023 年启动。不过，目前分片时间线尚未列出具体日期。

以下是 Ethereum 分片第一阶段可能呈现的样子：

- 托管在信标链上、负责协调分片流程的验证者管理合约（VMC）
- 有意成为 ETH2 验证者的候选人需要在合格验证者池中，先将 32 ETH 锁入该智能合约
- VMC 按一定间隔将验证者分配到各分片，负责验证并向共识链处理交易归并
- 分片仅作为"数据存储点"，用于提升 Ethereum 网络的数据处理能力。

#### 分片第二阶段

ETH PoS 分片升级的第二阶段目前尚不够明确，开发者在部分细节上仍存在分歧。不过，我们大致可以预期 Ethereum 分片第二阶段在实践中会呈现以下形态：

- 分片从数据层转变为代码执行层——每个分片拥有独立的"状态"（即一组独立的智能合约、账户余额和地址）
- 每个分片都像 [Ethereum 主网](https://www.alchemy.com/rpc/ethereum)一样，完整支持智能合约和 dApp
- 跨分片通信使不同分片链上的用户能够交换价值
- 运行在不同分片链上的应用可以通过跨分片通信"交流"和互动，从而提升 Ethereum 的可扩展性

## **Ethereum 分片——结语**

在多条分片链同时运行的情况下，节点可以提升自身的交易处理能力，并能够处理更大量的链上数据。

沿用之前的例子，如果 100 条分片链各自每秒处理 100 笔交易，那么 Ethereum 2.0 将能够达到 10,000 TPS。

从各分片发布到基础层链上的信息只有归并头——即密码学有效性证明——因此验证者节点更容易确认交易，并将其提交到共识层链。

结果是交易[最终确定性](https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649)更快，网络延迟表现也更好。

尽管各方估计不一，但分片的引入预计将使 Ethereum 能够扩展到处理每秒数十万笔交易。

随着 TPS 的提升，Ethereum 能够提供应用所需的可扩展性，以应对使用高峰和数十亿用户的需求。
