本文是 Fuel Labs 系列文章的第三部分,探讨了与以太坊扩展性和执行相关的话题。这个系列旨在提供关于提升以太坊性能和容量所面临的挑战的全面洞见,以及当前致力于提高以太坊效率和扩展性的解决方案,以促进其广泛采用。
Fuel 最初起源于以太坊上的乐观扩容方案(optimistic rollup),于 2020 年 12 月底发布了 Fuel V1。Fuel V1 的目标是为以太坊提供一个信任最小化的侧链,这个侧链继承了以太坊的安全性,但采用了一个彻底重新设计的执行模型,即未花费交易输出(UTXO)模型。Fuel V1 是唯一一个在实践中通过完整的乐观欺诈证明和无第三方多重签名的方式实现了以太坊安全性继承(现由 L2Beat 定义为“阶段 2”状态)的 rollup。
大多数当前的区块链项目依赖于通用虚拟机,如 EVM 和 WASM。虽然这些架构在过去带来了显著的进展,但它们在解决特定扩展需求方面仍然存在不足,尤其是在 2018 年前的单片架构之下。通用虚拟机(VM)虽然功能多样,但往往缺乏针对区块链执行独特需求的优化(详见第二部分)。
自 V1 以来,Fuel 的发展是广泛而战略性的。在过去的三年半时间里,我们致力于从零开始重新定义和重建我们的架构。我们的架构深刻解决了现代区块链面临的常见问题,例如对灵活的编程机器的需求、面向资产的交易模型、多线程处理、并行性、状态可持续性以及跨链互操作性。
今天,我们非常高兴能够深入探讨 Fuel 的核心:FuelVM。
Fuel 虚拟机(FuelVM)结合了 17 年的区块链设计经验,为以太坊社区带来了一个可靠且具有长期可持续性的机器架构。FuelVM 提供了一种类似于低级精简指令集机器架构的结构,如RISC-V ISA、ARM ISA,以及虚拟化架构如 Web Assembly 和 ePBF。我们的虚拟机还借鉴了过去区块链机器架构的经验,如比特币脚本、以太坊虚拟机(EVM)和 Move 虚拟机。
FuelVM 专为应对 Rollups 的独特挑战而设计,旨在解决状态可持续性和高性能执行这两个关键问题。
FuelVM 的设计基于以下理解:磁盘 IO 是计算中最慢的部分,通常在全节点验证过程中用于活跃的区块链状态。FuelVM 使开发者能够摆脱通常由智能合约推动的有状态应用设计,提供更丰富的、状态最小化的功能,如原生资产、临时脚本和临时支出条件,从而减轻全节点验证的压力(因为这些不需要存储在状态中),通过用带宽、CPU 和内存替代状态查找和存储(IO)。通过为开发者提供构建更少状态应用的替代方法,我们可以实现更好的全节点可持续性,保持架构对所有人都可访问且去中心化,继承以太坊的核心价值。
以下是 FuelVM 设计考虑的更全面列表:
运行时执行性能
状态可持续性
磁盘 I/O 开销
带宽优化
并行处理能力
虚拟化和沙盒化
交互式验证游戏复杂度
欺诈可证明性
对抗性执行安全性(DOS 缓解)
访问常见的区块链加密功能(哈希、签名验证)
以太坊兼容性(Keccak256 哈希、Secp256k1 签名验证)
比特币风格的支出条件(P2SH)
以太坊风格的智能合约
原生资产管理
访问外部调用功能
临时编码能力(脚本和谓词)
大数算术
算术运行时安全性(安全数学,溢出寄存器)
运行时内存读取对交易数据的访问
燃气计量潜力和开销
功耗考虑
ZK电路复杂度
指令解析复杂度
FuelVM 的开发代表了自 2020 年初次推出 Fuel V1 以来的重大演变。Fuel V1 是以太坊上的首个乐观扩容方案(Optimistic Rollup),也是为数不多的可证明欺诈的状态机之一。尽管每秒交易数(TPS)通常并不是分析架构的最佳指标,但对于那些希望将我们的虚拟机(VM)整合到其项目中的团队来说,了解 FuelVM 的潜力仍然具有帮助。截至 2024 年 5 月,FuelVM 在高端 CPU 上每个核心的资产转移基准可达到 12,000 TPS,并且通过进一步优化可能实现更高的性能。
让我们深入探讨 FuelVM 及其独特的 UTXO 交易模型如何通过关键创新(如并行交易执行、状态最小化和用户友好的功能)实现更高的性能和灵活性。
Fuel 的并行交易执行模型是其高效性和可扩展性的基石。与传统的顺序处理方法相比,并行化显著提高了吞吐量并降低了延迟。并行化允许将任务分解为可以在多个处理单元上同时执行的小任务。
并行化建立在访问列表和未花费交易输出(UTXO)模型的基础之上,它们共同作用以实现非冲突交易的并行处理。
访问列表将交易分类为只读、写入-销毁和写入-创建三类。每笔交易都会指定其将交互的所有资源,包括 UTXO 和合约标识符。通过在执行前分析这些列表,FuelVM 可以识别那些不共享资源的交易并并行执行它们,从而最大化效率。
UTXO 模型在促进并行执行方面发挥了至关重要的作用。由于 UTXO 是唯一的并且只能被消费一次,Fuel 能够有效地并行处理不与相同 UTXO 交互的交易。我们的方法确保每笔交易都在独立的、未使用的输出上操作,从而最小化冲突并实现同时处理。
为说明这一概念,考虑两个简单的代币转账场景:Alice 向 Bob 发送 1 ETH,Charlie 向 David 发送 100 USDC。在这两种情况下,交易涉及不同的资产。通过以下步骤,这些交易可以同时进行且不发生冲突:
Alice 发起她的交易,其中包括她 ETH 余额的只读访问列表和代表 1 ETH 的 UTXO 的写入-销毁访问列表。
同时,Charlie 创建他的交易,包含他 USDC 余额的只读访问列表和代表 100 USDC 的 UTXO 的写入-销毁访问列表。
Fuel 的执行引擎验证两笔交易,确认它们的有效性并且它们的写入-销毁访问列表没有重叠。
在未检测到冲突的情况下,FuelVM 并行处理两笔交易,同时将 Alice 的 ETH 发送给 Bob,将 Charlie 的 USDC 发送给 David。
两笔交易都迅速得到确认并完成。
这种并行化提高了交易处理能力,解决了长期困扰区块链系统的可扩展性挑战。通过允许不冲突的交易并行处理,Fuel 为在 Rollup 环境中管理高交易量提供了强大的解决方案,确保随着区块链空间需求的增长,实现有效的扩展。
FuelVM 的资产导向设计与其并行执行能力相辅相成。内置的操作码允许应用程序直接在虚拟机内创建和管理多个原生资产。这一设计选择通过在较低层次上进行原生资产操作,显著提高了执行性能。使用 UTXO 系统等原语代替传统智能合约中通常需要的更复杂的状态存储,使得低层次的资产操作成为可能。
在交易层次上操作原生资产本质上更便宜且更高效,因为它避免了广泛的状态更改和第三方库的需求。我们的方法还提供了更好的用户体验。处理原生资产(如发送 ETH)比处理 ERC-20 代币更为简单,后者通常需要设置批准和额外的步骤。我们的方法使得交易更快、更具成本效益,并简化了开发者和用户的流程。
FuelVM 设计的另一个关键方面是谓词的实现。谓词是 FuelVM 中的一项重要创新,作为轻量级的、无状态的合约,大大增强了交易处理和执行性能。
谓词允许创建条件交易,使开发者能够在 FuelVM 内为执行交易设置复杂的条件。
我们的设计和功能提供了几个关键优势,具体如下:
轻量级和无状态:与传统智能合约需要维护大量状态信息不同,谓词(Predicates)在设计上是无状态的。它们的无状态特性意味着不在执行之间存储数据,从而减少了开销并简化了执行过程。谓词的无状态性质确保了快速高效的处理,无需复杂的状态管理。
原生账户抽象:谓词的一个重要优势是它们在促进原生账户抽象方面的作用。谓词提供了一种灵活且高效的方式来管理和交互资产。例如,谓词可以执行涉及多个步骤的交易,如执行复杂交易或管理资产,而不需要中间合约。这种能力简化了交互过程,减少了复杂合约结构的需求,使用户能够以更少的步骤执行复杂操作。
简化的交易处理:谓词通过直接且高效地处理特定任务来简化交易过程。谓词可以根据预定义的规则或条件验证并执行交易,避免了冗余处理或额外的验证步骤。通过这种简化方式,有助于加快交易速度并降低计算成本。
增强的执行性能:谓词结合无状态特性和直接处理任务的能力,提升了执行性能。最小化处理和存储的数据量减少了系统的负担,加快了交易执行速度。这种最小化在高吞吐量环境中特别有价值,在这些环境中,性能和效率至关重要。
区块链系统中的状态增长涉及到节点必须存储和管理的数据扩展。随着区块链网络的发展,积累的状态数据可能带来挑战,如存储增加、交易处理速度变慢以及运营成本上升。
自 2015 年以太坊诞生以来,状态增长率有所不同。目前,状态增长率约为每月 2.62 GiB,低于最高峰的每月 5.99 GiB。按此速度估算,五年内总状态大小将达到 396 GiB 到 606 GiB之间。近期增长率的下降主要是由于 NFT 和 ERC-20 活动减少所致。目前的状态增长率是自 2022 年以来的最低水平。
Fuel 通过创新的状态最小化技术解决了状态增长带来的挑战,能够有效管理和减少状态数据的占用。让我们来讨论其中的一些技术。
Fuel 引入了原生状态再水化的概念,这是一种高效管理状态变化的方法。与持续维护和更新全局状态不同,Fuel 应用程序将状态变化划分为较小的、可管理的部分,并将其存储为其原生资产架构中的非同质化代币(NFT)。我们的方法允许在需要时按需访问状态数据,从而减轻整体存储负担并提高交易处理效率。通过仅再水化特定交易所需的状态数据,FuelVM 最小化了节点的数据负荷,并提高了状态访问的速度。
脚本:在 FuelVM 中,脚本是嵌入在交易中的临时逻辑。这些脚本执行特定的功能或操作,但不会永久性地改变全局状态。由于脚本是短暂的并且限定在交易上下文中,它们在执行后可以被修剪,不会导致长期的状态增长。
谓词:谓词接收输入并返回一个布尔值以确定交易是否成功。与传统智能合约不同,谓词不会读取或写入全局存储。谓词中没有存储操作,这确保了它们不会导致状态增长。谓词可以根据特定条件验证交易,而无需改变全局状态,从而简化了交易处理过程。
UTXO 模型:在 UTXO 模型中,每笔交易都会消耗之前的 UTXO 并产生新的 UTXO。局部化的状态管理方法意味着状态变化仅限于交易中涉及的特定 UTXO,而不会影响全局状态。Fuel 全节点只需要存储每个 UTXO 的 32 字节哈希值,以确保未来的状态转换有效,这意味着通过将更多应用程序迁移到原生资产和谓词,我们可以大幅减少区块链状态的总体规模。因此, UTXO 模型减少了状态管理的复杂性,支持可扩展性和效率。
Fuel 的状态最小化方法提供了几个关键优势,包括通过将状态变化进行分区管理实现高效的状态管理,从而加快交易处理。状态最小化还提高了可扩展性,使 Fuel 能够处理更大量的交易而不会导致性能下降。此外,通过减少对全局状态的依赖,Fuel 增强了去中心化,使更多节点能够参与网络,而不会因庞大的状态数据而不堪重负。
以下示例展示了 FuelVM 的强大功能和多样性,并说明了在部署我们的技术堆栈时的各种可能性。欲了解不断发展的生态系统的更广泛视角,请查看 Fuel 生态系统页面。
Fuel 为变革性应用铺平了道路,特别是通过使用 UTXO 模型来支撑订单簿交易所,正如 Spark 等项目所展示的那样。与传统方法相比,UTXO 模型提供了更高效的交易体验,减少了延迟并简化了状态管理。通过解决慢速交易处理和状态膨胀等问题,Spark 使去中心化交易所更加可扩展和实用。
Bako Safe 基于 FuelVM 的谓词构造,提供了一个无状态的多重签名钱包。Bako Safe 增强了安全性,并通过集体保险库等功能提供了非托管的资产管理,支持安全的合约可视化和签名。
FuelVM 通过其原生账户抽象和对多种签名方案的支持,在跨链交互中表现出色。Fuelet 是专为 Fuel 生态系统构建的钱包,展示了这种跨链潜力,提供了一个统一的界面来管理多个网络上的资产。Fuelet 旨在增强互操作性,并支持与来自各种区块链的钱包无缝集成。用户可以使用他们首选的钱包连接并与 FuelVM 交互,在不牺牲安全性或功能的情况下桥接不同的区块链生态系统。
例如,最近的一项开发中,Fuel 通过支持 Solana 钱包,使得在 Fuel 上构建的 dApps 能够连接任何 SVM 钱包,此外还支持现有的 EVM 钱包。这种 SVM 集成允许用户安全地使用 Solana 钱包(如Phantom、Solflare 和 Backpack)来创建 Fuel 账户、签署交易,并在这些钱包中本地交换资产。包括 MIRA Protocol 在内的多个 Fuel dApp 也采用了这种方法,MIRA Protocol 现已在其 DEX 上支持以太坊和 Solana 钱包。MIRA Protocol 的 DEX 已在 Fuel 的 Sepolia 测试网上线。
FuelVM 的能力不仅限于交易和钱包集成,还包括其他重要的区块链应用。Thunder 是一个 NFT 市场,能够以最少的费用在单笔交易中完成批量交易。通过并行化处理,Thunder 为经验丰富的 NFT 交易者提供了更无缝的交易体验,并显著加快了交易时间。
同时,Kassiopeia 展示了 FuelVM 在去中心化身份和声誉系统中的潜力,利用该平台的独特功能,为 Web3 应用程序创建了一个强大且保护隐私的身份层。Kassiopeia 进一步展示了 FuelVM 的能力如何应用于解决区块链技术各个领域中的复杂挑战。
Fuel 通过其 UTXO 模型、无状态谓词和状态最小化技术解决了 rollup 技术中的关键挑战。这些创新旨在提高去中心化应用的可扩展性和效率。
这篇文章是我们关于以太坊的三部分系列的终章,涵盖了与以太坊的可扩展性和执行相关的主题。