# 模块化区块链：深入探讨

By [Lausanne Dhondup](https://paragraph.com/@biquandidi) · 2022-08-26

---

### “模块化区块链”的想法正在成为围绕可扩展性和区块链基础设施的类别定义叙述。

文章很简单：通过分解第 1 层区块链的核心组件，我们可以对各个层进行 100 倍的改进，从而形成一个更具可扩展性、可组合性和去中心化的系统。在我们详细讨论模块化区块链之前，我们必须了解现有的区块链架构以及区块链在当前实现中面临的限制。

![资料来源：以太坊基金会](https://storage.googleapis.com/papyrus_images/a96f75f67a26bfd44125e32929df9bdc07e9b83582948255c05f4b0e90d89426.png)

资料来源：以太坊基金会

资料来源：以太坊基金会

什么是区块链？
-------

让我们简要回顾一下区块链的基础知识。区块链中的块由两部分组成：块头和与该头关联的交易数据。区块通过“完整节点”进行验证，这些节点解析和计算整个区块数据，以确保交易有效，并且用户发送的以太币不会超过他们的账户余额。

‍

让我们还简要概述构成区块链的功能“层”。

‍

*   \*\*执行 \*\*事务和状态更改最初在此处处理。用户通常还通过该层通过签署交易、部署智能合约和转移资产与区块链进行交互。
    

‍

*   \*\*结算 \*\*结算层是验证汇总执行和解决争议的地方。该层不存在于单片链中，是模块化堆栈的可选部分。[类比](https://consensys.net/research/the-maximally-decentralized-settlement-layer/)美国法院系统，将结算层视为美国最高法院，对争议提供最终仲裁。
    

‍

*   \*\*共识 \*\*区块链的共识层通过全节点网络提供排序和[最终确定性，下载和执行区块的内容，并就状态转换的有效性达成共识。](https://medium.com/mechanism-labs/finality-in-blockchain-consensus-d1f83c120a9a)
    

‍

*   ‍ 数据\*\*可用性 \*\*验证状态转换是否有效所需的数据应发布并存储在该层上。如果发生恶意区块生产者扣留交易数据的攻击，这应该很容易验证。数据可用性层是区块链可扩展性三难困境的主要瓶颈，我们稍后会探讨原因。
    

例如，以太坊是单片的，这意味着基础层处理上述所有组件。

‍

![资料来源：ResearchGate](https://storage.googleapis.com/papyrus_images/168a539476a34ab994eb45a91ef236344ab435c2c03fca478d05dcd7b8c7feb8.png)

资料来源：ResearchGate

‍

区块链目前面临一个称为“[区块链可扩展性三难困境](https://medium.com/certik/the-blockchain-trilemma-decentralized-scalable-and-secure-e9d8c41a87b3)”的问题。[与分布式系统的 Brewer 定理](https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/)类似，区块链架构通常会在去中心化、安全性或可扩展性上做出妥协，以便为其他两者提供强有力的保证。

‍

**安全**性是指网络在受到攻击时运行的能力。这个原则是区块链的核心原则，永远不应该妥协，所以真正的权衡通常是在可扩展性和去中心化之间。

‍

让我们在区块链系统的背景下定义去中心**化：为了让区块链去中心化，硬件要求不能成为参与的限制，验证网络的资源要求应该很低。** 

‍

**可扩展性**是指区块链的吞吐量除以其验证成本：区块链处理越来越多的交易量同时保持较低的验证资源需求的能力。增加吞吐量的主要方法有两种。首先，您可以增加块大小，从而增加可以包含在块中的交易容量。不幸的是，更大的块大小会导致网络集中，因为运行完整节点的硬件要求会随着对更高计算输出的需求而增加。\*\*特别是单片区块链遇到了这个问题，因为吞吐量的增加与验证链的成本增加相关，从而导致去中心化程度降低。\*\*其次，您可以将执行转移到链下，将计算负担从主网络上的节点转移，同时利用允许验证链上计算的证明。 

‍

[借助模块化架构，区块链可以通过关注点分离](https://en.wikipedia.org/wiki/Separation_of_concerns)的原则开始解决区块链可扩展性的三难困境。通过模块化执行和数据可用性层，区块链能够扩展吞吐量，同时通过打破计算和验证成本之间的相关性来保持使网络去信任和去中心化的特性。让我们通过引入故障证明、汇总以及它们与数据可用性问题的关系来探索这是如何实现的。

‍

故障证明和乐观汇总
---------

Vitalik 在[Endgame](https://vitalik.ca/general/2021/12/06/endgame.html)中指出，中心化和去中心化之间可能的妥协是，出于可扩展性目的，块生产的未来集中于池和专业生产者，而块验证（保持生产者诚实）应该重要地保持去中心化。这可以通过将区块链节点拆分为**全节点**和**轻客户端**来实现。该模型有两个相关问题：**区块验证**（验证计算是否正确）和**区块可用性**（验证所有数据已发布）。我们先来探讨一下它在区块验证中的应用。

‍

全节点下载、计算和验证区块中的每笔交易，而轻客户端仅下载区块头并假设交易有效。然后，轻客户端依赖全节点生成的\*\*故障证明来进行交易验证。\*\*这反过来又允许轻客户端自主识别无效交易，使它们能够在与全节点几乎相同的安全保证下运行。\*\*默认情况下，轻客户端假定状态转换是有效的，并且可以通过接收故障证明来质疑状态的有效性。\*\*当一个节点的状态受到故障证明的挑战时，通过一个全节点重新执行相关交易来达成共识，导致不诚实节点的权益被削减。

![来源：https ://ethereum.org/en/developers/docs/scaling/optimistic-rollups/](https://storage.googleapis.com/papyrus_images/a4536b9e0ba9ca011a0798ed5a8188d9b84100faded3bf07e8c37ebc2054da70.png)

来源：https ://ethereum.org/en/developers/docs/scaling/optimistic-rollups/

来源：[https ://ethereum.org/en/developers/docs/scaling/optimistic-rollups/](https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/)

轻客户端和故障证明模型在**诚实少数假设**下是安全的，其中至少存在一个诚实的全节点，具有提交故障证明的链的完整状态。该模型与分片区块链（例如以太坊的合并后架构）特别相关，因为验证者可以选择在一个分片上运行完整节点，在其余分片上运行轻客户端，同时在所有分片上保持[N](https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6)[中的 1 个](https://vitalik.ca/general/2020/08/20/trust.html)安全保证。

‍

**乐观汇总**利用此模型将区块链执行层安全地抽象为**排序器**，这是捆绑和执行多个事务并定期将压缩数据发布回父链的强大计算机。将此计算转移到链外（相对于父链）可以使交易吞吐量增加 10-100 倍。我们如何才能相信这些链下测序仪保持良性？我们引入了债券，运营商必须质押以运行测序仪的代币。由于定序器将交易数据发布回父链，因此我们可以使用**验证器**，节点监视父链与其汇总之间的状态不匹配，以发布故障证明并随后削减恶意排序器的股份。由于乐观汇总使用故障证明，因此假设网络中存在一个诚实的验证者，它们是安全的。故障证明的这种使用是乐观汇总从其名称中派生出来的地方 - 假设状态转换是有效的，直到在[争议期间](https://research.paradigm.xyz/rollups#:~:text=Fidelity%20Bonds%20and%20Dispute%20Periods)证明其他情况，在结算层处理。

这就是我们如何在最小化信任的同时扩展吞吐量：**允许计算变得集中，同时保持对计算的验证去中心化。**

‍

数据可用性问题
-------

虽然故障证明是解决去中心化块验证的有用工具，但全节点依赖于**块可用性**来生成故障证明。恶意出块者可以选择只发布区块头，并保留部分或全部相应数据，阻止全节点验证和识别无效交易，从而产生故障证明。这种类型的攻击对于全节点来说是微不足道的，因为它们可以简单地下载整个块，并在发现不一致或隐瞒数据时从无效链中分叉。但是，轻客户端将继续跟踪可能无效链的标头，从完整节点分叉。（请记住，轻客户端不会下载整个块，并假设状态转换默认有效。）

‍

这是数据可用性问题的本质，因为它与故障证明有关：轻客户端必须确保所有交易数据在验证之前在一个块中发布，这样[全节点和轻客户端必须自动就规范链的相同标头达成一致](https://celestiaorg.github.io/celestia-specs/latest/rationale/fork_choice_das.html#scenarios). （如果您想知道为什么我们不能使用类似的系统来进行数据可用性的故障证明，您可以在[此处](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#what-is-the-data-availability-problem)深入了解数据保留困境。本质上，博弈论规定，此处使用的基于故障证明的系统将是被剥削并导致诚实演员双输的局面。）

‍

解决方案
----

看起来我们又回到了原点。轻客户端如何确保发布一个区块中的所有交易数据，而无需下载整个区块——集中硬件需求，从而违背轻客户端的目的？

‍

实现这一点的一种方法是通过一种称为[擦除编码](https://hackmd.io/@vbuterin/sharding_proposal#Erasure-coding)的数学原语。通过复制块中的字节，即使有一定百分比的数据丢失，纠删码也可以重建整个块。该技术用于执行\*\*[数据可用性采样](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling)\*\*，允许轻客户端通过随机抽样区块的一小部分来概率确定区块的整体已发布。这允许轻客户端确保所有交易数据都包含在特定块中，然后再接受它为有效并遵循相应的块头。但是，这种技术有一些注意事项：数据可用性采样具有很高的延迟，并且类似于诚实的少数假设，安全保证依赖于假设有足够的轻客户端执行采样以能够概率地确定可用性一个块。

![数据可用性抽样的简化。](https://storage.googleapis.com/papyrus_images/6e395fa288b92beb6f0c0ee57860da7de2625df6d6782c84bb22cadcd151a7c3.png)

数据可用性抽样的简化。

‍

有效性证明和零知识汇总
-----------

去中心化块验证的另一个解决方案是取消状态转换所需的交易数据。**相比之下，有效性证明**与故障证明相比采取了更悲观的观点。通过消除争议过程，有效性证明可以保证所有状态转换的[原子性](https://en.wikipedia.org/wiki/Atomicity_\(database_systems\))，同时需要为每个状态转换提供证明。这是通过利用新的零知识技术[SNARKs 和 STARKs 来实现的](https://twitter.com/0xAlec/status/1529915544324800512)。与故障证明相比，有效性证明需要更多的计算强度来换取更强的状态保证，从而影响可扩展性。

‍

**零知识汇总**是利用有效性证明而不是故障证明进行状态验证的汇总。它们通过排序器/证明者模型遵循与乐观汇总类似的计算和验证模型（尽管使用有效性证明作为架构而不是故障证明），其中排序器处理计算，证明者生成相应的证明。例如，Starknet 推出了用于引导目的的集中式排序器，并在[路线图](https://medium.com/starkware/starknet-on-to-the-next-challenge-96a39de7717)上逐步分散了开放式排序器和证明者。由于定序器上的链下执行，计算本身在 ZK 汇总上是无限的。然而，由于这些计算的证明必须在链上进行验证，最终性仍然是证明生成的瓶颈。

‍

需要注意的是，利用轻客户端进行状态验证的技术仅适用于防错架构。由于通过有效性证明可以保证状态转换是有效的，因此节点不再需要交易数据来验证区块。然而，有效性证明的数据可用性问题仍然存在，并且稍微更微妙：尽管有保证的状态，但有效性证明的交易数据仍然是必要的，以便节点能够更新状态转换并将其提供给最终用户。因此，使用有效性证明的汇总仍然受到数据可用性问题的约束。

‍我们现在在哪里 

回想一下 Vitalik 的论文：条条大路通向集中式区块生产和分散式区块验证。虽然我们可以通过区块生产者硬件的进步以指数方式增加汇总吞吐量，但真正的可扩展性瓶颈是区块可用性而不是区块验证。这导致了一个重要的见解：**无论我们使执行层多么强大或我们使用什么证明实现，我们的吞吐量最终都会受到数据可用性的限制。**

‍

我们目前确保数据可用性的一种方法是在链上发布区块链数据。Rollup 实施利用 Ethereum 主网作为数据可用性层，定期在 Ethereum 上发布所有 rollup 块。这种权宜之计解决方案面临的主要问题是以太坊当前的架构依赖于通过下载整个块来保证数据可用性的全节点，而不是执行数据可用性采样的轻客户端。当我们增加块大小以增加吞吐量时，这不可避免地会导致对验证数据可用性、集中网络的全节点的硬件要求增加。

‍

未来，以太坊计划利用数据可用性采样向分片架构发展，该架构由完整节点和保护网络的轻客户端组成。\*（注意 - 以太坊分片在技术上使用[KZG 承诺](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html)而不是故障证明，但无论如何数据可用性问题都是相关的。）\*然而，这只能解决部分问题：汇总架构面临的另一个基本问题是汇总块被转储到以太坊主网作为呼叫数据。这引入了一些问题，因为 calldata[在规模上是昂贵的](https://forum.celestia.org/t/ethereum-rollup-call-data-pricing-analysis/141)，无论汇总交易批量大小如何，都会以每字节 16 个 gas 的成本成为 L2 用户的瓶颈。 

![“随着使用量的增长，发布到以太坊的通话数据量也会增加。这让我们回到了原点——以太坊真的很贵，即使最终用户使用汇总，他们也会感受到这种成本。”](https://storage.googleapis.com/papyrus_images/be464b54a40c3bc41bd322bb13688b6ef6711a4970413bdc5ab675ae451b2cee.png)

“随着使用量的增长，发布到以太坊的通话数据量也会增加。这让我们回到了原点——以太坊真的很贵，即使最终用户使用汇总，他们也会感受到这种成本。”

‍

**Validium**是另一种提高可扩展性和吞吐量同时保持数据可用性保证的方法：细粒度的交易数据可以在链下（相对于来源）发送到数据可用性委员会、PoS 监护人或数据可用性层。通过将数据可用性从 Ethereum calldata 转移到链下解决方案，validiums 绕过了与增加 rollup 使用相关的固定字节 gas 成本。

‍

Rollup 架构也带来了独特的见解，即区块链本身不需要提供执行或计算，而只是简单地对块进行排序并保证这些块的数据可用性的功能。这就是第一个模块化区块链网络 Celestia 背后的主要设计理念。Celestia 以前称为 LazyLedger，最初是一个“惰性区块链”，将执行和验证留给其他模块化层，并专注于通过数据可用性采样为交易排序和数据可用性保证提供数据可用性层。中心化区块生产和去中心化区块验证者是 Celestia 设计背后的核心前提：甚至是[手机](https://twitter.com/musalbas/status/1480901457633239048?s=20&t=NAhbUjtBZ6rFdCP8yZozSA)能够作为轻客户端参与并保护网络。由于数据可用性采样的特性，作为数据可用性层插入 Celestia 的汇总能够随着 Celestia 轻节点数量的增长支持更高的块大小（因此吞吐量），同时保持相同的概率保证。

‍

今天的其他解决方案包括 StarkEx、zkPorter 和[Polygon Avail](https://polygon.technology/solutions/polygon-avail/)，其中 StarkEx 是目前在生产中使用的唯一验证。无论如何，大多数验证都包含对数据可用性源的信任的隐含假设，无论是通过受信任的委员会、监护人还是通用数据可用性层进行管理。这种信任还表明，恶意运营商可以阻止用户资金被提取。

![](https://storage.googleapis.com/papyrus_images/615f1adffd868190055cdb069391a95d48ca43a375f433138831492a25f31137.png)

模块化区块链架构是当前加密领域中一个备受争议的话题。由于与分散的结算和数据可用性层相关的安全问题和额外的信任假设，Celestium 对模块化区块链架构的愿景受到了[重大阻碍。](https://twitter.com/dankrad/status/1513239462356127745)

‍

与此同时，区块链堆栈的各个方面都取得了重大进展：[Fuel Labs](https://fuel-labs.ghost.io/introducing-fuel-the-fastest-modular-execution-layer/)正在开发执行层的并行虚拟机，而[Optimism](https://www.optimism.io/about)的团队正在研究分片、激励验证和去中心化排序器。混合乐观和零知识解决方案也在开发中。

‍

以太坊合并后的发展路线图包括统一结算和数据可用性层的计划。[具体来说， Danksharding](https://vitalik.ca/general/2021/04/07/sharding.html)是以太坊路线图中的一个有前途的发展，旨在将以太坊 L1 数据分片和块空间转换和优化为“数据可用性引擎”，从而允许 L2 汇总实现低成本、高吞吐量的交易。

‍

Celestia 的独立架构还允许广泛的执行层实现将其用作数据可用性层，为替代的非 EVM 虚拟机（如 WASM、Starknet 和 FuelVM）奠定基础设施。这种用于各种执行解决方案的共享数据可用性允许开发人员在 Celestia[集群](https://blog.celestia.org/clusters/)之间创建信任最小化的桥梁，解锁跨链和跨生态系统的可组合性和互操作性，类似于以太坊及其汇总之间的可能性。 

‍

由 Starkware 首创的[Volitions为链上与链下数据可用性的困境引入了一种创新的解决方案：用户和开发人员可以选择使用验证将交易数据发送到链下，或者将交易数据保持在链上，每个人都可以使用自己的](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb)[独特的优点和缺点](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes)。

![](https://storage.googleapis.com/papyrus_images/435fa05c38172aefdce3ed183a43db2a414433a1cdf51a49bd5c0d82e5d282e9.png)

‍

此外，第 2 层解决方案的使用和普及率的增加解锁了第 3 层：[分形缩放](https://medium.com/starkware/fractal-scaling-from-l2-to-l3-7fe238ecfb4f)。分形扩展允许将特定于应用程序的汇总部署在第 2 层 - 开发人员现在可以部署他们的应用程序，完全控制他们的基础设施，从数据可用性到隐私。部署在第 3 层还解锁了第 2 层上所有第 3 层应用程序之间的互操作性，而不是像应用程序特定的主权链（例如 Cosmos）那样昂贵的基础链。上卷上卷！

‍

与网络基础设施如何从本地服务器演变为云服务器类似，去中心化网络正在从单一区块链和孤立的共识层演变为具有共享共识层的模块化、特定于应用程序的链。**无论哪种解决方案和实施最终流行起来，有一点很清楚：在模块化的未来，用户是最终的赢家。**

---

*Originally published on [Lausanne Dhondup](https://paragraph.com/@biquandidi/QasH7QtCk5qCKLUjoApN)*
