模块化执行案例(第一部分)

模块化执行层(modular execution layers)如何通过将计算与验证解耦来实现可扩展性。

原文:https://fuel-labs.ghost.io/the-case-for-modular-execution-part-1/

翻译:FeiDan

The Case for Modular Execution (Part 1)

(模块化执行的案例)The Case for Modular Execution

为了实现真正的可扩展性,区块链空间正越来越多地向模块化架构发展。即使是像以太坊这样以前完全单体的链,也正在转向模块化设计,以克服单体区块链设计带来的挑战。

模块化区块链栈的核心组件之一是执行层。Fuel正在为模块化区块链栈构建最快的执行层。

img

什么是模块化执行层?它们又将如何实现更多的可扩展区块链系统?

与单体执行层相比较,模块化执行层提供了两个核心优势:

  1. 单片链将计算和验证耦合在同一层,导致安全性低于标准且可扩展性有限。模块化执行层通过解耦计算和验证来避免这种情况,从而在规模上提供更强大的安全保证。

  2. 当涉及到它们可以支持的计算速度和多样性时,单片链被锁定在低效的技术中。另一方面,模块化执行层可以专门设计用于优化高效计算。

这篇文章详细阐述了第一个核心优势,第二个核心优势将在即将发布的第 2 部分中进行探讨。

单片区块链基础知识:计算和验证

要了解来自模块化执行层 (MEL) 的创新,首先我们需要了解单片区块链如何处理计算和验证。

区块链依赖于一个实体网络,这些实体执行交易并将它们捆绑在一起形成一个区块——这些实体被称为区块生产者。如果没有制衡,恶意区块生产者可能会在区块中包含无效交易(例如,将代币铸造到他们自己的地址)。为了防止这种情况,区块链依赖于其他节点的网络来确定一个块的有效性,然后再将其添加到他们的链版本中。

这导致了区块链运行所需的两个核心功能:

  • 块生产(即计算) - 执行交易并应用单独的状态转换来构建块。
  • 块验证(即验证) - 确认状态转换是有效的。

单片链的计算和验证

注意:为了便于理解,本节简要说明了块生产和验证如何在单片区块链上工作。实际上,该过程更复杂,并且可能因特定链的设计而异。然而,许多相同的核心原则也适用。

在大多数单片区块链设计中,计算和验证由相同的实体 - 验证器(即完整节点)执行。当用户发送交易时,验证者将执行交易,然后将相应的状态转换包含在块中。一旦创建并传播了一个块,其他完整节点就会下载该块并重新执行该块中的事务以确认它是有效的。如果该块是有效的,假设他们是诚实的,那么全节点将该块附加到他们的链版本上,从而证明它的有效性。

有时,应用程序或用户需要访问区块链的状态,但又不想招致运行全节点和独立验证所有事务的高资源需求。为此,他们可以运行轻客户端,假设全节点提供的块仅包含有效交易。他们不会下载完整的区块链,也不会验证所有之前的交易是否有效。相反,他们必须相信大多数完整节点是诚实的(即在他们的链副本中只包含有效块)。

img

这被称为诚实多数假设,这也是大多数单体区块链容易受到 51% 攻击的原因。在单体模型下,由于需要诚实的大多数完整节点来验证区块链是否有效,因此轻客户端被迫信任大多数。如果超过一半的全节点不诚实,轻客户端无法知道这一点,因此他们最终会跟随一条无效的链。

诚实多数假设 - 可扩展性的限制

单体链的可扩展性受到其对这种诚实多数假设的依赖的严重限制。这是因为,为了增加交易吞吐量,必须增加块大小和/或频率,以使更多交易能够在相同的时间内处理。这增加了全节点的资源需求(和相关成本);更大/更快的块 = 更多的计算 = 更高的成本。

img

随着运行全节点成本的增加,更多实体将选择运行轻客户端,依靠越来越小的全节点网络来验证链的有效性。区块验证的日益集中化是对单体链安全性的主要威胁,因为更集中的验证者池更容易受到攻击,也更容易串通。


模块化执行:解耦计算和验证

好消息是区块链系统可以摆脱依赖诚实多数假设的设计。为了避免这种单体设计的缺陷,模块化区块链堆栈将计算与验证分离。通过将执行(即计算)移出基础链(通常称为“父链”),可以在不影响去中心化的情况下实现规模扩大。

什么是模块化执行层?

在模块化区块链堆栈中,执行层负责计算——换句话说,处理事务和应用单独的状态转换。

Fuel模块化执行层定义为:为模块化区块链堆栈设计的可验证计算系统。更具体地说,一种可验证欺诈或有效性的区块链(或其他计算系统),它利用模块化区块链来实现数据可用性。

img

为了进一步澄清,如果计算系统:1) 不能证明欺诈或有效性,或 2) 不将数据可用性卸载到另一层,则它们不是模块化执行层。

与整体区块链一样,模块化执行层采用专门的区块生产者网络。这些实体处理执行事务和生成块的资源密集型过程。然而,与单体系统不同,验证不在执行层处理,而是在模块化区块链堆栈的较低级别处理。

验证 - 保持区块生产者诚实

模块化执行的天才在于,只要验证(即区块验证)是去中心化的,计算(即区块生产)就不需要去中心化。可以增加块大小,从而导致产生块的节点集中化——但只要将验证解耦,无效块就不会被添加到链中。

但这是如何工作的?如果我们允许区块生产保持中心化,我们如何确保安全性?这就是模块化发挥作用的地方。

模块化执行层将资源密集型执行功能抽象给强大的区块生产者,这些区块生产者捆绑并执行批量交易,并定期将这些作为区块发布到父链(结算/共识/数据可用性层)。为了让这些区块生产者保持诚实,还有额外的非区块生产完整节点(通常称为“验证者”或“证明者”)下载并重新执行发布到父链的区块,以确保它们仅包含有效交易。

这些完整节点如何传达交易的有效性或无效性的细节取决于模块化执行层是采用乐观模型还是零知识模型。在乐观 MEL 的情况下,全节点仅在检测到无效交易时才采取行动(通过欺诈证明)。相反,在零知识 MEL 的情况下,全节点主动证明交易的有效性(通过有效性证明)。无论哪种情况,区块生产者提供的所有交易的有效性或无效性都在父链上证明,而不是在模块化执行层上证明。

一个例子:Optimistic模块化执行层的欺诈证明

为了提供更深入的说明,让我们探讨乐观 MEL 的情况(假设所有交易都是有效的,除非另有证明)。即使模块化执行层上的单个完整节点检测到发布在父链上的块中的无效交易,它们也可以生成欺诈证明(在预定义的“争议解决窗口”内),以加密方式证明交易无效。

根据特定模块化堆栈的结构,这可以通过多种方式处理,例如:

在具有沉降层的模块化堆栈中:

  • 全节点将欺诈证明提交给结算层上的专用争议解决合约,该合约直接重新执行交易(请注意,这要求 MEL 交易的结构使其在结算层的 VM 上可欺诈证明以一种确定性的方式——例如,FuelVM 被设计为在 EVM 内可进行欺诈证明,以便在以太坊上进行结算)。
  • 如果交易无效,违规的区块生产者将受到惩罚(即他们损失资金),“举报人”将获得部分资金奖励,并且链的状态恢复到无效交易之前的状态。因为不能保证在无效交易之后的任何交易都对应于有效状态,所以这些后续交易被重新执行。

在没有沉降层的模块化堆栈中:

  • 全节点通过对等网络传播欺诈证明,以警告轻客户端该块包含无效交易。使用欺诈证明作为出块人不诚实行为的证据,全节点可以在母链上提出惩罚交易,从而削减出块人的资金。
  • 因为没有结算层来规定链的“规范”版本,恶意的全节点理论上可以选择不拒绝区块;但是,欺诈证明已经传达给轻客户端,因此他们知道不要遵循恶意的全节点版本的链。结果,社会共识保证了无效块将被拒绝。

在任何一种情况下,由于验证过程是在父链上而不是在执行层上进行的,因此安全性被外包给了父链,这意味着执行层本身可以在较低的安全保证下运行。即使执行层 99% 的全节点是不诚实的,也只需要一个诚实的全节点来确保执行层只包含有效交易。

这意味着,模块化执行层(和 MEL 轻客户端)可以在一个诚实的少数假设上运行,而不是依赖于诚实的大多数完整节点。

img

在模块化执行层上,轻客户端只需要依赖一个诚实的全节点即可保证链的有效性

无效区块只能由单体系统中的大多数完整节点恢复,而模块化系统中的单个完整节点可以通过使用欺诈/有效性证明来强制恢复无效交易。

这如何实现可扩展性

允许在父链之外进行计算可以大幅增加交易吞吐量。块大小可以显着增加,而无需担心块生产的集中化,因为单独的块验证过程使块生产者保持诚实。

虽然较大的区块确实给执行验证的完整节点带来了更高的负担,但诚实的少数假设意味着该领域的集中化威胁较小,因为依赖不诚实多数的基于集中化的漏洞变得不可能。

轻客户端还可以在模块化架构下以显着更高的安全保证运行,因为欺诈证明使他们能够根据来自单个诚实完整节点的证明来识别无效交易(与单片系统相反,单片系统至少需要轻客户端信任一半的完整节点是诚实的)。

img模块化执行层上的轻客户端比其单片客户端具有更高的安全保证

此外,区块生产者知道任何恶意活动都会被检测到并导致罚没,因此他们甚至不太可能试图做出不诚实的行为。因此,执行层可以进行计算优化(即处理大量事务),同时依赖于模块化堆栈的安全优化较低级别。


模块化执行:潜在挑战

这种模块化架构确实提出了一些额外的技术和博弈论挑战。

数据可用性

虽然欺诈/有效性证明使诚实的完整节点能够证明欺诈,但还有一个额外的问题:数据可用性。为了生成证明,全节点依赖于块可用性,因为它们需要下载并重新执行块中的所有交易以确定其有效性并生成证明。

理论上,恶意区块生产者可以只向父链发布区块头,可能会保留部分或全部相应数据。这可以防止完整节点能够生成欺诈/有效性证明来提醒轻客户端注意问题。

当尝试验证一个块时,全节点很容易识别数据何时被恶意块生产者扣留。在这种情况下,他们可以简单地假设该链无效并从中分叉。但是轻客户端如何在不下载整个区块的情况下确定数据是否被区块生产者扣留了呢?

一种称为数据可用性采样(DAS) 的新技术使轻客户端能够以概率方式确定是否已发布整个块。简而言之,轻客户端从完整节点请求块的小随机小部分(或“样本”)。

img

*轻客户端从全节点请求区块的子集(“样本”)(来源:Vitalik Buterin*)**

如果所有请求的样本都可用,那么假设有足够多的轻客户端执行数据可用性采样,这在概率上证明了整个块是可用的。如果块的任何部分不可用,轻客户端知道数据已被保留,因此可以从该版本的链中分叉。

对这项技术的完整解释超出了本文的范围,但您可以在此处阅读更多相关信息。最终,重要的一点是 DAS 使轻客户端能够识别无效块,即使恶意块生产者隐瞒数据也是如此。

验证者的困境

另一个潜在问题是被称为“验证者困境”的现象。简化版如下:

  • 如果区块生产者知道完整节点会识别不诚实的活动,他们会诚实行事以避免被削减。

  • 随着时间的推移,如果全节点假设区块生产者将继续诚实行事,他们就没有动力继续验证区块,因为他们永远不会因识别无效交易而获得奖励。

  • 如果全节点没有经济上的激励来继续验证区块,他们可能会停止这样做。在这一点上,区块生产者的不诚实行为变得可行。即使仍然存在非零数量的完整节点,对于区块生产者而言,贿赂剩余的完整节点以忽略足够有价值的无效交易可能在财务上是可行的。

这以一个循环难题告终,即模块化执行层变得越安全(即区块生产者不诚实行为的动机越少),它就越倾向于降低安全性(即不再激励全节点验证区块) . 另一方面,它越不安全,它就越倾向于更高的安全性。

img

可以通过多种途径缓解这种困境(有关这些因素的博弈论分析,请参阅这篇广泛的帖子):

  • 利他主义——因为 MEL 只需要一个诚实的验证者,只要至少有一个利他主义全节点在运行,系统就会保持安全。然而,虽然这在实践中可能足够安全,但对于控制大量资产的系统来说,这并不是充分的保证。

  • 经济利益——有许多实体拥有运行完整节点的经济激励,这超出了潜在的举报人奖励。例如,区块浏览器、流动性提供者或 dapp 等产品和服务需要访问 MEL 的完整状态才能有效地开展业务。然而,这些实体(理论上)容易受到恶意区块生产者的贿赂。

  • 鲸鱼——在 MEL 上拥有大量资产的实体可以选择运行一个完整的节点,以确保他们的利益受到保护并且链是安全的。

  • 快速取款- 因为乐观的 MEL 在保证模块化堆栈的较低层的最终确定性之前依赖于争议解决窗口,所以在此窗口过去之前,从 MEL 到结算层的取款不会最终确定。因此,存在提供快速提款、在 MEL 上接受代币并在结算层立即向用户发送相同代币(减去费用)的第三方服务市场。为了确保 MEL 状态在他们在结算层发送资金后不会恢复,激励服务提供商在进入此类交易之前验证链的有效性。

  • 块生产者- 可以对提交构建在先前无效块之上的块的块生产者引入惩罚。有了这样的机制,区块生产者将被激励在提交区块之前验证链的有效性。

虽然上述缓解策略本身可能并不完全有效,但当结合使用时,有明显的动机让许多不同的各方继续在 MEL 上运行完整节点并验证链的状态。


新的设计空间:超越 EVM

通过采用在单一诚实少数假设下实现高安全性的设计,模块化区块链堆栈能够开发比以前在单片设计下可能实现的更高吞吐量的区块链。

然而,除了计算与验证分离带来的可扩展性优势之外,还可以通过专门关注堆栈顶部的设计:模块化执行层,在可扩展性方面取得进一步进展。在这一层上使计算更具可扩展性和效率是构建更好的区块链的下一步。

目前正在开发的大多数模块化执行层都使用以太坊作为其父链,因此默认使用 EVM 作为执行环境。这相当于提高内燃机的能源效率的设计:对已经过时的技术进行增量改进。

实际上,模块化堆栈开辟了更广阔的设计空间,不再需要模块化执行层来依赖低效的 EVM。Fuel 正在利用这个新扩展的设计空间来构建一个超越 EVM的模块化执行层,优化高效和可扩展的计算、卓越的开发人员体验和最大的安全性。

在第 2 部分中,我们将探讨模块化执行层如何超越上一代区块链设计的技术限制以实现真正的可扩展性。


跟着我们

关于我们

Fuel是模块化区块链堆栈的最快执行层。该技术功能强大且时尚,支持并行事务执行,为开发人员提供扩展所需的最高灵活吞吐量和最高安全性。开发人员选择FuelVM是因为其卓越的开发人员体验和超越 EVM 限制的能力。

成为贡献者


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。