
1. Fuel Network 的介绍
Fuel 是一个专门为 Ethereum rollups 设计的操作系统,旨在支持去中心化经济日益增长的需求。计划在 2024 年第三季度启动主网,Fuel 建立在其 Fuel V1 的成功之上,Fuel V1 是第一个于 2020 年在 Ethereum 上实现阶段 2 安全性的乐观 Rollup。
与传统的 Layer-2 解决方案不同,Fuel 是为 Ethereum rollups 专门构建的,使开发人员能够创建可扩展、安全和可定制的去中心化应用程序 (dApps) 和应用链,克服了单体 Layer-1 架构和通用虚拟机的限制。
问题:Ethereum Rollups 的挑战
在 Ethereum 生态系统中,模块化 Layer-2 (L2) 链的兴起突显了在性能和功能方面 rollups 与单体 Layer-1 区块链之间的差距。当前的 rollup 架构是为实现 L1 而设计的,在并行执行和状态管理方面遇到困难,导致性能不佳和开发人员的挑战。
为弥补这一差距,Fuel 引入了一种从地面开始构建的新架构,该架构针对 Ethereum rollups 进行了优化,集成了并行化、状态最小化和互操作性。
解决方案:Fuel 的专用架构
为弥补这一能力差距,Fuel 引入了一种专门针对 Ethereum rollups 优化的全新架构。这种架构通过集成以下内容来解决核心问题:
- 并行化:FuelVM 支持并行事务执行,利用现代多核处理器显著提升吞吐量并降低延迟。
- 状态最小化:Fuel 使用 UTXO 模型来有效管理状态,确保区块链状态的增长受到控制,从而保持去中心化。
- 互操作性:Fuel 的设计允许不同的 rollups 之间进行无缝安全的交互,开启一个互联的去中心化应用生态系统。
通过关注这些关键领域,Fuel 提供了一个高性能的执行环境,满足以太坊生态系统日益增长的需求。
什么是 Ethereum 中的 Rollup 操作系统?
Fuel 是 Ethereum rollups 的一个全面操作系统,作为以太坊硬件基础之上的软件层。它包括:
- FuelVM:提供并行化、状态最小化和可定制性的核心引擎。
- Sway:一种结合了 Solidity 和 Rust 优势的区块链特定语言,用于高性能 dApps。
- Forc 工具链:用于简化在 Fuel 链上构建和部署 dApps 的工具。
创建 Fuel 的动机
Fuel 的创建是为了应对以太坊生态系统中的特定挑战和差距。以下是 Fuel 背后的动机概述:
解决性能差距
现有的 rollup 解决方案虽然先进,但在性能和功能集方面仍然落后于单体 L1。Fuel 的目标是通过提供针对 rollups 特殊优化的高性能执行环境来弥补这一差距。
增强开发人员体验
通过提供专用虚拟机 (FuelVM) 和领域特定语言 (Sway),Fuel 简化了开发过程,使开发人员能够创建高效高性能的 dApps 而不受通用架构的限制。
促进去中心化
Fuel 的状态最小化设计有助于维护去中心化,减少对节点的资源需求,使更多参与者能够运营节点并为网络做出贡献。
促进互操作性
凭借内置的互操作性特性,Fuel 旨在创建一个统一的互联生态系统,使不同链能够无缝通信与协作,促进创新与增长。
定制与专业化
考虑到不同应用的多样化需求,Fuel 提供了部署定制应用链的灵活性,使开发人员能够优化他们的链以满足特定用例和性能要求。
为以太坊未来做好准备
通过解决当前 rollup 解决方案的局限性并引入为 Ethereum 基金会设想的模块化、以 rollup 为中心的未来量身定制的高级功能,Fuel 将自己定位为 Ethereum 生态系统演变中的关键参与者。

与其他生态系统的差异
让我们快速对比 Fuel、Arbitrum One 和 Base,探索这些 Ethereum Layer 2 rollups 在关键类别中的表现如何!
核心目的
- Fuel:其核心目的在于为模块化区块链堆栈提供最快的执行层。它通过优化实现最大吞吐量和去中心化,采用创新的共识机制和数据可用性层。Fuel 的架构特别关注于最小化信任假设和增强抵抗审查的能力,这对于实现真正的去中心化至关重要。该项目旨在推动区块链吞吐量的边界,同时保持对安全性和去中心化的强烈关注。
- Arbitrum One:作为通用 rollup,Arbitrum One 旨在通过提供更快、更便宜的交易来扩展 Ethereum。它与现有的 Ethereum dApps 兼容,使其成为希望在不修改代码库的情况下扩展应用程序的开发人员的热门选择。Arbitrum 通过其 AnyTrust 协议实现这一目标,该协议平衡了可扩展性与安全性。
- Base:由 Coinbase 构建,Base 旨在通过提供安全和用户友好的环境来吸引下一个十亿用户进入链上。它专注于易用性,特别是针对面向消费者应用的开发人员。这是 Coinbase 更广泛战略的一部分,旨在将区块链技术整合进其现有基础设施和用户基础,使传统金融与去中心化应用之间的互动无缝进行。
执行环境
- Fuel:Fuel 的执行环境由其专用虚拟机 FuelVM 提供支持,旨在实现高性能和并行执行。通过实现来自 Ethereum 生态系统的长期建议改进——如并行事务执行和对多种原生资产的支持,FuelVM 提升了吞吐量并降低了成本。使用 UTXO 模型,FuelVM 预先识别状态依赖,支持完全节点利用多个 CPU 核心实现更高的效率。与传统 EVM 相比,这种架构提供了明显更高的计算能力和交易吞吐量,使 Fuel 成为可扩展的高性能应用的理想选择。
- Arbitrum One:Arbitrum 的执行环境围绕 Arbitrum 虚拟机 (AVM) 构建,与以太坊虚拟机 (EVM) 完全兼容。这种兼容性允许开发人员无缝迁移他们的 Ethereum dApps 到 Arbitrum,而无需代码更改。AVM 在引入提高Gas效率和交易吞吐量的优化的同时,维护了 EVM 的安全性和功能性。通过保持与 EVM 的兼容性,Arbitrum 确保开发人员可以继续使用现有的工具和工作流程,同时受益于 Layer 2 解决方案的可扩展性和降低的成本。
- Base:Base 在 EVM 等效性方面工作,确保任何 Ethereum 智能合约或 dApp 都可以在 Base 上运行而无需修改。这种设计利用了 Ethereum 虚拟机 (EVM) 的安全性和熟悉感,使开发人员可以无缝地将他们的项目转移到 Base,同时继续使用现有的工具和开发过程。通过维护 EVM 等效性,Base 提供了一个可扩展的、用户友好的 Layer 2 环境,能够平滑地与更广泛的 Ethereum 生态系统集成,提供与 Ethereum 主网相同的安全保障。
状态最小化
- Fuel:通过实现更高程度的无状态,Fuel 优化了性能和可扩展性,这意味着节点不需要存储和管理大量数据,如交易历史或账户余额。这减少了存储和计算开销,使 Fuel 能够更有效地处理交易并实现更有效的扩展。通过最小化节点必须维护的状态,Fuel 加快了交易处理速度,从而导致更快的确认时间和与其他区块链解决方案相比,更响应的网络。
- Arbitrum One:利用状态通道和链外计算来最小化链上状态,减少 Ethereum 主网的负担。通过链外进行大多数交易和合同执行,Arbitrum 增强了可扩展性并降低了成本。该系统使用 Arbitrum 虚拟机 (AVM) 和 EthBridge 高效地编译和执行链外 Solidity 合同,同时通过其 AnyTrust 保证确保安全。如果出现争议,Arbitrum 的链上解决机制快速且经济地处理这些争议,确保对 Ethereum 网络的影响降至最低。
- Base:类似于 Arbitrum,Base 采用状态最小化技术,专注于高效的数据使用,减少链上的状态以增强可扩展性。通过最小化需要存储和管理的链上数据量,Base 改进了交易效率,支持更高的吞吐量,使网络更具可扩展性和响应性。
互操作性
- Fuel:Fuel 的模块化架构旨在通过将执行层与其他组件(如共识和数据可用性层)分离来实现互操作性。这种分离允许 Fuel 通过实现跨链消息传递协议和桥梁与其他 rollup 和区块链进行交互。这些特性可以增强跨链兼容性,使 Fuel 成为更广泛的区块链生态系统中一个多功能和适应性强的组成部分。
- Arbitrum One:Arbitrum 通过使用标准 Ethereum 地址和与 Ethereum 虚拟机 (EVM) 的兼容性实现与 Ethereum 的高互操作性。这使得轻松实现资产转移和与 Ethereum 的 Layer 1 及其他 Layer 2 解决方案的交互成为可能。Arbitrum 还使用其自定义构建的桥梁,以促进 Arbitrum 与 Ethereum 主网之间的安全通信和价值转移。
- Base:Base 在设计时以互操作性为重点,通过符合 EVM 等效性直接与 Ethereum 的 Layer 1 集成。它利用标准的 Ethereum 协议和工具,确保数据和资产能够在 Ethereum 网络及其他 rollups 之间自由流动。此外,Base 还结合了跨链桥梁和 Coinbase 的现有基础设施,以增强其在更广泛的区块链生态系统中的兼容性。
开发工具
- Fuel:Fuel 提供了一种名为 Sway 的新编程语言,特别针对 FuelVM 进行了优化。Sway 旨在帮助开发人员编写高效高性能智能合约,以适应 Fuel 的架构。除了语言外,Fuel 还提供了强大的开发者环境,包括定制构建的工具,如 Forc 和 Fuelup,简化在 Fuel 网络上运行的应用程序开发过程。
- Arbitrum One:Arbitrum 为现有的 Ethereum 开发工具(如 Solidity、Foundry 和 Hardhat)提供广泛支持。这确保了开发人员可以轻松地将他们的应用程序从 Ethereum 移植到 Arbitrum,而无需学习新语言或适应不同工具。Arbitrum 的开发者环境与 Ethereum 生态系统完全兼容,使迁移过程顺利,利用现有知识和工作流程。
- Base:Base 通过提供对标准 Ethereum 开发工具的全面支持(包括 Solidity、Foundry、Hardhat 等),专注于易用性。这种兼容性确保开发人员可以在 Base 上构建,而无需更改现有的流程。此外,Base 与 Coinbase 的开发者产品无缝集成,提供额外资源和工具,以创造流畅的开发体验,特别是针对消费者应用。
安全性
- Fuel:Fuel 通过利用先进的加密技术和对系统设计的严格方法将安全性放在首位。它强调去中心化和韧性,旨在创建一个对复杂区块链环境中常见的漏洞具有高度抵抗力的执行层。Fuel 采用尖端加密方法来保护其共识机制、交易处理和状态管理,确保即使在不利条件下网络仍然保持安全。
- Arbitrum One:Arbitrum 通过其欺诈证明系统增强安全性,确保所有链外计算都是可验证的,争议可以在链上有效解决。这种安全模型基于 Arbitrum 的 AnyTrust 协议,提供针对欺诈活动的强有力保障。顶尖安全研究人员的广泛审计和对安全操作实践的关注进一步加强了 Arbitrum 对维持高安全性 Layer 2 解决方案的承诺。
- Base:Base 对安全性给予高度重视,利用其他乐观 rollup 相同的安全模型,其中包括鲁棒的欺诈证明系统,以验证链外计算。此外,Base 受益于 Coinbase 的机构级安全实践,包括严格的审计、顶尖安全研究人员的全面安全审查,以及在软件开发和运营安全中遵循最佳实践的保证。这种组合确保为开发人员和用户提供一个高度安全的环境。
生态系统与采用
- Fuel:虽然还处于初始阶段,但由于其高性能承诺,正在迅速增长。生态系统更专业,可能吸引寻求推动区块链吞吐量界限的开发者。
- Arbitrum One:作为最广泛采用的 rollup 之一,拥有庞大且快速增长的生态系统。许多现有的 Ethereum dApps 公认并青睐于其进行扩展。
- Base:受益于 Coinbase 的支持,Base 在寻求利用 Coinbase 庞大用户基础和金融基础设施的项目中,定位有利于快速采用。
未来前景
- Fuel:虽然仍处于早期阶段,但由于其高性能能力,Fuel 正在迅速增长。其生态系统更为专业,可能吸引专注于推动区块链吞吐量和性能界限的开发者。
- Arbitrum One:Arbitrum 是最广泛采用的 rollup 之一,拥有庞大且扩展中的生态系统。许多现有的 Ethereum dApps 称其为缩放工具,使其成为希望提升其应用程序性能的开发者的热门选择,无需离开以太坊生态系统。
- Base:受益于 Coinbase 的支持,Base 为快速采用打下良好基础,特别是对于那些希望利用 Coinbase 庞大用户基础和金融基础设施的项目。这种强大的支持使 Base 在吸引开发者和用户方面具有显著优势。
社区与治理
- Fuel:Fuel 的社区相对较小,但在开发人员和早期采用者中稳定增长。随着生态系统的成熟,预计治理将变得更加去中心化,让社区对网络未来的方向拥有更大的影响力。社区通过 Fuel Discord 和 Fuel 技术论坛 等渠道积极参与,进行开发和治理方面的讨论。
- Arbitrum One:Arbitrum 通过 Arbitrum DAO 具备活跃的社区治理,允许代币持有者参与网络未来关键决策。DAO 模型使社区能够直接参与协议升级和治理提案的制定。社区讨论和治理活动主要通过 Arbitrum Discord 和 Arbitrum Twitter 协调,并在 Arbitrum 的治理论坛 上发布正式提案。
- Base:尽管 Base 的治理模型仍在建立中,但预计将与 Coinbase 的战略愿景紧密结合,可能在项目发展过程中融合集中监督与社区参与。Base 社区通过 Base Twitter 等平台进行参与,分享更新。随着项目的成熟,可能会引入更正式的治理结构,以实现更大的社区参与。
2. Fuel 的描述
Fuel 是一个专门为 Ethereum Rollups 设计的先进操作系统。它解决了区块链领域的关键挑战,如并行化、状态最小化执行和互操作性,而不妥协于任何方面。Fuel 的创新方法确保了 rollups 的更高性能和效率。
Fuel 的关键组成部分:
- FuelVM
- 增强的 Ethereum VM:FuelVM 结合了对 Ethereum 虚拟机 (EVM) 的长期建议改进,因向后兼容性限制未能实现改进。
- 并行事务执行:支持并行事务执行,使得能够利用在单线程区块链中通常闲置的多个 CPU 线程和核心。
- UTXO 模型:通过使用严格的状态访问列表形式的 UTXO 模型,FuelVM 允许完全节点在执行之前识别交易依赖,极大提升计算、状态访问和交易吞吐量。
- Sway 语言
- 开发人员体验:Fuel 引入 Sway,这是一种领域特定语言 (DSL),旨在为开发人员提供卓越的开发体验。
- 基于 Rust:Sway 基于 Rust,融入其安全优先的语义和编译时分析特性。
- 智能合约范式:从 Solidity 中,Sway 采用了智能合约语言的概念,内置顶级合约存储和区块链机制,确保程式化操作安全高效。
- 静态审计:Sway 支持智能合约的静态审计,提高安全性和可靠性。
- 性能与优化:Sway 抗性能变态,具有可扩展的优化通道和模块化后端,能够针对不同的区块链架构。
- Fuel 代币桥
- 无缝 L1-L2 通信:Fuel 代币桥使 Ethereum (L1) 与 Fuel (L2) 之间的安全互动变得顺畅,便利资产转移和数据交互。
- 先进消息协议:桥使用一种强大的协议来确保交易的完整性和有效性,利用 UTXOs、纪元和最终性等概念。
- 跨层集成:通过管理跨层通信的复杂性,Fuel 代币桥增强区块链应用的互操作性和可扩展性。
- Sway 库
- 扩展功能:Sway 库提供一系列公共库扩展 Sway 的能力,超越标准库,支援区块链开发。
- 多种库:包括便捷功能、标准支持、数据类型、安全功能等库,确保开发人员拥有构建坚固合约所需的工具。
- 资产库:集中在原生资产,这些库提供支持 SRC-20、SRC-3 和 SRC-7 标准的助手函数。
- 访问控制和安全:Sway 包含所有权、管理员、可暂停和重入保护库等库,提供访问控制的机制并保护智能合约不受攻击。
- 密码学库:这些库扩展了标准库所提供的密码学功能,包括用于链上验证和链下计算验证的字节码和 Merkle 库。
- 数学和数据结构:Sway 库还包括用于数学运算和复杂数据结构的专用库,如固定点数库、有符号整数库和队列库,使智能合约能够实现高级功能。
注意: Sway 是处于高度开发中的语言,因此这些库可能不是最方便的。随着时间的推移,它们应该会收到更新和改进,以展示 Sway 在实际用例中的使用情况。
-
Sway 标准
- 标准化开发:Sway 标准提供 Sway 语言的标准库,实现 Fuel 生态系统中一致且可靠的合约开发。
- 草案和提案标准:该库包含不同开发阶段的标准,鼓励使用草案标准,并为社区反馈提供机会,以精炼和改进这些标准。
- 与 Forc 集成:为使用标准,开发人员可以轻松地通过在
Forc.toml
文件中添加相应的条目来导入它,确保其在 Sway 智能合约中的无缝整合。
- 的一系列标准:该库包括多种标准,如原生资产的 SRC-20、铸造与销毁功能的 SRC-3、所有权控制的 SRC-5 等,涉及资产管理到安全和合约部署的各个方面。
- 社区驱动的发展:鼓励开发人员提出新的标准,并为 Sway 标准的演进作出贡献,营造一个促进 Fuel 生态系统创新的合作环境。
- 文档与实现:每个标准附有详尽的文档,包括如何在你的合约中实现标准 ABI,确保开发人员能够高效地采用和利用这些标准。
-
Fuel TypeScript SDK
- 全面的开发工具包:Fuel TypeScript SDK 提供了 TypeScript 中的一系列方法和工具,使开发人员能够高效地在 Fuel 网络上构建和互动。
- 合约部署和测试:它使得能够在 TypeScript 环境中无缝地部署、互动和测试 Sway 合同。
- 去中心化应用和开发环境:开发人员可以快速启动去中心化应用并使用
create fuels
CLI 设置本地开发环境。
- 安全的钱包管理:SDK 支持从私钥、助记符或 JSON 文件生成和导入钱包,并提供安全的客户端存储选项。
- 自定义交易构建:开发人员可以通过添加资源、政策和签署者构建和修改交易,确保在交易提交上有灵活性和控制力。
- 类型安全性:该 SDK 集成了
typegen
以生成 Sway 程序的类型,确保开发过程中的端到端类型安全。
-
Fuel Rust SDK
- 通用开发工具包:Fuel Rust SDK 为开发人员提供了在 Rust 环境中编译、部署和测试 Sway 合同所需的工具。
- 网络互动:它支持使用测试网,并可运行本地 Fuel 节点,促进强大的测试和部署工作流。
- 自定义交易处理:开发人员可以用手写脚本或合约调用来构建和签署交易,提供精细的交易执行控制。
- 类型安全的 Rust 绑定:SDK 允许生成合约 ABI 方法的类型安全 Rust 绑定,确保可靠和安全的合约交互。
-
Fuel 钱包 SDK
- 统一的钱包连接:Fuel 钱包 SDK 作为连接管理器,使你的 dApp 能够通过统一 API 连接到 Fuel 钱包和任何其他兼容 Fuel Network 的钱包。
- 无缝整合:它简化了将钱包连接集成到你的 dApp 中的过程,支持 React 和非 React 环境。
- 安装与设置:SDK 可以通过 npm 轻松安装,以及所需的
@fuels/connectors
和 fuels
包,确保与 Fuel Network 的良好沟通。
- 默认和自定义连接器:开发人员可以使用 SDK 提供的默认连接器或创建自定义连接器来定制连接体验。
- React 支持:对于 React 开发人员,SDK 提供了一组Hook和用户界面 (UI),以轻松与连接器的交互,从而简化与钱包连接的 dApp 的开发。
-
Fuel GraphQL API
- 强大的查询接口:Fuel GraphQL API 使开发人员能够查询 Fuel 区块链的广泛链上数据,包括交易、余额、区块信息等。
- 事务模拟及提交:它允许用户在提交之前模拟交易,确保交易处理的准确性和可靠性。
- 交互式游乐场:该 API 伴有一个交互式 GraphQL 游乐场,一个 IDE,提供图形界面以测试查询、突变和类型,并具有查询验证和模式上下文。
- 可访问的 RPC 端点:开发人员可以通过专用 RPC 端点访问 Fuel GraphQL API,使其易于集成到各种应用程序和工作流程中。
-
Forc
- Fuel 协调器工具:Forc(Fuel Orchestrator 的简写)是一个强大的命令行工具集,旨在帮助开发人员在 Fuel 生态系统中工作。
- 项目脚手架和管理:Forc 提供多种命令,用于脚手架新项目、格式化代码、运行脚本、部署合约等,提供流畅的开发体验。
- 测试及部署:开发人员可以使用 Forc 高效测试和部署 Sway 合同,使其成为 Fuel 中项目生命周期管理的必备工具。
- Rust 风格体验:Forc 受到 Rust 的
cargo
工具的启发,使得它对有 Rust 背景的开发者更为熟悉,并提供适合 Fuel 生态系统的类似功能。
FuelVM
FuelVM 是一个专门的虚拟机,旨在通过实施长期建议的 Ethereum 虚拟机 (EVM) 的改进,推动 Ethereum 生态系统的发展。它解决了由于向后兼容性无法克服的 EVM 的局限性。主要特点包括并行事务执行和对多种原生资产的支持。
FuelVM 的架构利用严格的状态访问列表使用 UTXO 模型,使其能以并行方式执行事务。因此,Fuel 在处理能力上提供了无与伦比的性能,利用更多的 CPU 线程和核心,这在单线程区块链中通常是闲置的。这使得 Fuel 能够提供比单线程同类产品更大幅度的计算能力、状态访问和交易吞吐量。
FuelVM 规范概述
介绍
FuelVM 是专门支持 Ethereum rollups 的,专注于可扩展性、性能和安全性的。该规范概述了与 VM 的操作相关的类型、指令集和执行语义。
关键参数
CONTRACT_MAX_SIZE
:最大合约大小(字节)。
VM_MAX_RAM
:最大内存分配 64 MiB。
MESSAGE_MAX_DATA_SIZE
:消息数据的最大大小(字节)。
语义和指令集
- FuelVM 指令为 32 位,组合了 8 位操作码、6 位寄存器标识符和一个 12、18 或 24 位的立即数。
- 可用 64 个寄存器,前 16 个用于特殊用途(例如程序计数器、栈指针、堆指针)。
VM 初始化
- 在每次运行时分配一个大小为
VM_MAX_RAM
字节的单体内存。
- 使用栈和堆模型进行动态内存分配,栈向上生长,堆向下生长。
上下文与执行
FuelVM 支持四种执行上下文:谓词估算、谓词验证、脚本和调用。这些上下文定义了隔离的执行环境,每个环境都有其内存所有权和执行规则。
- 谓词估算和验证:评估交易的 UTXO 谓词(消费条件)是否得到满足,使用一套设备量的 gas。
- 脚本执行:包括以指定 gas 限制运行事务脚本,验证交易并更新区块链状态。
- 调用帧:管理跨合约调用时的内存访问和执行权限,确保每个合约的状态是隔离和安全的。
所有权和可执行性
FuelVM 强制实施严格的内存所有权规则,确保每个上下文或合约只能访问其分配的内存区域。超出这些边界的内存是不可执行的,从而提供强有力的抵御未授权访问或修改的保护。
FuelVM 中的 UTXO 模型
FuelVM 实现的 UTXO(未消费交易输出)模型与 Ethereum 中使用的基于账户模型是根本性的区别。在 UTXO 系统中,每个交易输出被视为一个独特而离散的单元,类似于单独的货币纸币,而 Ethereum 则将余额跟踪为累积总额,类似于银行账户。
为什么 UTXO 重要
UTXO 模型在交易管理方面提供了更高的透明性、安全性和灵活性。每个 UTXO 对应于特定的金额,为数字资产的消费和跟踪提供了细粒度控制。此模型特别适合像 FuelVM 这样的高性能环境,在这里,并行执行和状态最小化至关重要。
UTXO 的运作
为了说明 UTXO 在 FuelVM 中的运作,考虑以下详细示例:
- 选择 UTXO:假设你在 FuelVM 账户中有以下 UTXO:你希望向另一位用户发送 15 个单位,并支付 1 个单位的交易费。FuelVM SDK 选择 UTXO 2(20 个单位)来覆盖总费用 16 个单位(15 单位给收件人,加上 1 单位作为费用)。
- UTXO 1: 10 个单位
- UTXO 2: 20 个单位
你希望向另一位用户发送 15 个单位,并支付 1 个单位的交易费。FuelVM SDK 选择 UTXO 2(20 个单位)来覆盖总费用 16 个单位(15 单位给收件人,加上 1 单位作为费用)。
- 消费 UTXO:一旦选择了 UTXO 2,它将被完全消费以执行交易。15 个单位转移到接收者,1 单位作为交易费扣除。
- 生成新 UTXO:由于所选的 UTXO 大于总交易费用,因此将创建一个新 UTXO以返回找零。在这种情况下,生成的新 UTXO 价值 4 个单位(20 - 16 = 4)并添加回你的账户。
交易流示例
让我们进一步细分交易流:
- 初始状态:
- UTXO 1: 10 个单位
- UTXO 2: 20 个单位
- 交易:
- 处理:
- FuelVM 选择 UTXO 2(20 个单位)。
- 15 个单位转移到接收者。
- 1 单位扣除作为费用。
- 结果:
- UTXO 2 被标记为已消费,无法再次使用。
- 创建并添加一个新的 UTXO 4 个单位回到你的账户。
在此交易后,你的 FuelVM 账户将拥有:
- UTXO 1: 10 个单位
- 新的 UTXO: 4 个单位

FuelVM 中 UTXO 的好处
- 并行处理:通过将 UTXO 作为独立实体处理,FuelVM 可以同时执行多个交易,只要它们不触及相同的 UTXO,大大提高了吞吐量。
- 状态最小化:UTXO 模型自然而然地通过确保花费掉的 UTXO 被系统去除,从而最小化了状态,帮助控制区块链的状态大小。
- 透明性:每个交易的输入和输出明确界定,便于审计和验证交易。
Fuel 的代币桥
为了帮助你更好地理解一切如何协同工作,让我们深入探讨 Fuel 代币桥在内部操作的方式。Fuel 的代币桥无缝地促进 Ethereum (L1) 和 Fuel (L2) 之间的交互。在这个探索中,我们将覆盖基础概念、桥的流程以及驱动这两层之间通信的独特机制。
核心概念
要理解 Fuel 桥的操作,至关重要的是明确一些在后续中会被引用的关键概念:
- Layer 1 (L1):以太坊区块链,智能合约和资产的来源。
- Layer 2 (L2):Fuel 区块链,旨在通过卸载交易处理来扩展以太坊。
- Fuel 区块:Fuel 区块链中的一个单位,包含交易和跨层消息。
- 纪元:一组 Fuel 区块的集合,这些区块会一起进行分组和最终确认。
- 消息:在 L1 和 L2 之间交换的数据包,分为入站和出站。
- 中继消息:来自 L2 需要在 L1 上发送和验证的消息。
- Fuel 排序器:管理交易和维护区块链状态的 L2 验证者。
- 最终性:一笔交易或消息被视为不可逆转和永久的那一点。
- 桥合同:在 L1 和 L2 上管理资产转移和消息验证的智能合约。
架构概述
Fuel 桥是一个复杂系统,旨在促进以太坊和 Fuel 之间的无缝通信。它使用先进的消息协议,确保两层之间数据和资产的安全高效传输。
从 Ethereum (L1) 到 Fuel (L2) 的消息流
Fuel 的消息传递系统允许用户从以太坊发送消息和资产到 Fuel。这个过程在以太坊上启动,由 Fuel 的排序器完成,如下所述:
- 事件发射:以太坊用户与 L1 上的
FuelMessagePortal
合同交互,触发 sendMessage
功能,可能包含附加的 ETH 值。
- 事件监听:Fuel 排序器监控由此交互发射的
MessageSent
事件,解析消息并准备将其包含在 Fuel 区块中。
- UTXO 创建:消息转化为 L2 上的未消费交易输出(UTXO),反映出原始以太坊消息在 Fuel 区块链中的呈现。
- 接收者操作:L2 上的接收者可以利用这个 UTXO,使其能够与 Fuel 网络中的转移资产或数据互动。
这确保消息和资产得以安全转移并整合到 Fuel 生态系统中。

从 Fuel (L2) 到 Ethereum (L1) 的消息流
Fuel 桥还支持 L2 到 L1 的返回流,涉及更复杂的过程,以确保 L2 交易在 L1 上的有效性:
- MessageOut 收据:Fuel 上的用户发起交易,生成
MessageOut
收据,指定以太坊中的接收者地址和转移的数量。
- 区块承诺:这些交易由 Fuel 排序器收集到区块中,随后分组到纪元中。纪元的最后一个区块承诺到以太坊,通过
FuelChainState
合同提交。
- 最终确认:经过一段时间,承诺的纪元在以太坊上被最终确认,使其中的交易不可变更。
- 证据提交:以太坊上的用户提交证明 L2 交易包含在最终确认的纪元中的内容到
FuelMessagePortal
合同,触发释放相应资产或执行相关操作。
此过程确保从 L2 到 L1 传递的消息或资产经过验证且可信赖。

ETH 和 ERC20 资产转移
Fuel 桥支持 ETH 和 ERC20 代币的转移。以下是每种转移的简化步骤:
从 Ethereum 到 Fuel 的 ETH 转移
- 用户互动:用户向 Ethereum 上的
FuelMessagePortal
合同发送 ETH。
- 消息包含:Fuel 排序器检测交易并作为 UTXO 在 Fuel 上包含该消息。
- UTXO 消费:Fuel 上的接收者现在可以消费作为 L2 环境中的 UTXO 的 ETH。

从 Fuel 到 Ethereum 的 ERC20 转移
- 销毁代币:用户在 Fuel 上发起交易,销毁她的 ERC20 代币并生成
MessageOut
收据。
- 区块承诺:此收据已承诺到以太坊中一个已最终确认的 Fuel 纪元。
- 证据和提取:用户在以太坊上提交交易的证明,
FuelERC20Gateway
释放相应的 ERC20 代币到 Ethereum 上。

L2 (Fuel) ETH 提款
从 Fuel 区块链向以太坊提取 ETH 需要生成 MessageOut
收据,指定要接收的以太坊地址和提取的金额。
提款流程
- 交易初始化:
- Fuel 实体发起一个生成
MessageOut
收据的交易,指定以太坊地址和提款金额。
- 此交易被 L2 网络接收并包括于其区块之一。
- 纪元承诺:
- 区块提交方通过承诺 Fuel 区块链最后一个纪元来更新以太坊上的
FuelChainState
合约。
- 经过某个时限后,该纪元被认为是有效的,用户可以继续。
- 提交证据和 ETH 释放:
- 用户收集验证 L2 链活动的必须 Merkle 证明。
- 用户调用
relayMessage
功能在 FuelMessagePortal
合约中,提供证明。
- 经验证后,锁定在门口合约中的 ETH 被释放到指定的接收者。

L2 (Fuel) ERC20 提款
从 Fuel 区块链到以太坊的 ERC20 提款涉及从 L2 到 L1 实体的消息传递机制。
提款流程
交易初始化:
- 用户向 L2 桥合同的
withdraw
函数发送交易,并附上要提取的代币。
- 此功能销毁代币并生成一个指向 L1 桥合同的
MessageOut
收据,负载包括一个 ABI 编码调用 finalizeWithdrawal
。
纪元承诺和最终确认:
- 包含收据的区块通过区块提交方进行承诺。
- 在 L1 上纪元承诺并最终确认后,用户准备必要的证明以证明包含性。
证明提交和代币释放:
- 用户在
FuelMessagePortal
合约中调用 relayMessage
函数,附上证明。
- 经验证后,执行 L1 桥合同的
finalizeWithdrawal
,并向接收者释放代币。

区块承诺
Fuel 区块链设计为可扩展,能够以比其他区块链更快的速度生成区块,而不会妨碍安全性。这是通过混合乐观-ZK rollup 方法实现的,其中 Fuel 区块链继承了其所依赖的 Layer 1 (L1) 区块链的安全性。
区块创建与承诺流程
区块生成:
- Fuel 区块链不断生成包含交易和跨层消息的区块。
- 这些区块被分组为时间段(例如,一个纪元可能包含 10,800 个区块)。每个纪元的最后一个区块总结并识别整个纪元。- 一个纪元的最后一个区块通过对
FuelChainState
合约的交易被提交到 L1 区块链。
- 这笔交易被乐观接受,意味着它被视为有效,除非另有证明。区块的验证和提交区块的实体的去中心化超出了本文的范围。
- 提交在 L1 区块链上注册并带有时间戳。
最终确认:
- 在指定的时间段后,提交和其相应的区块被视为最终确认。
- 这一确认允许 L1 链上的实体执行并中继源自 L2 链的消息到其 L1 接收者。

小数调整
Fuel 采用了一种设计原则,专注于最小化执行成本和状态增长。其中一方面是使用 64 位整数( u64
)来表示余额,相比之下,以太坊上 ERC20 标准使用的是 256 位整数。
关键考虑因素:
- 精度损失: 位大小和小数精度的差异(Fuel 上为 9 个小数,而以太坊上为 18 个小数)可能导致在桥接金额时出现精度损失。Fuel 强制要求存款不发生小额损失,拒绝可能导致损失精度的交易。
- 退款机制: 如果转移的金额超过了 Fuel 铸造 L2 对应物的能力,会生成退款消息,允许用户在 L1 上取回原始存款。
与桥相互作用的 DApp 应该意识到这些限制,并相应地截断金额,以避免交易回退。
不兼容性与单一故障点 (SPoF)
ERC20 不兼容性
某些 ERC20 代币可能与 Fuel 桥不完全兼容,特别是那些具有:
- 变基余额
- 转账费用
- 超额供给(> 2^64 单位)或 超高精度(高小数位数)
这些代币可能会表现出意外行为或导致资金全部损失。
单一故障点 (SPoF)
系统内的关键实体执行任务,包括:
- 安全委员会和智能合约所有权: 由安全委员会(通过多重签名)管理,负责关键的行政职能。
- Fuel 区块链排序器/验证者: 目前在权威证明方案下操作。私钥的被泄露可能导致恶意区块生成。
- 区块提交者: 将 Fuel 区块链活动与以太坊连接。区块提交者上传的恶性数据如果在最终确认窗口内未被检测到,可能会导致欺诈行为。
用户与 Fuel 桥系统交互时应谨慎行事,并注意这些风险。
3. Sway 的描述
Sway 是一种特定领域编程语言,旨在为区块链平台(特别是 Fuel 虚拟机(Fuel VM))创建智能合约。它受到 Rust 系统编程方法的启发,Sway 将现代编程特性和工具带入智能合约开发,同时通过广泛的静态分析确保性能、控制和安全。
为何使用 Sway?
特定领域设计: Sway 针对区块链环境进行了优化,使其能够权衡快速、安全和成本有效的智能合约,具备符合区块链需求的特性。
相对于 Solidity 的优势: 与受制于以太坊虚拟机历史特性的 Solidity 不同,Sway 供应现代语言,支持泛型、代数类型和基于特征的多态性。它还提供了一个完整的工具链,包括代码完成功能、格式化、文档生成和部署工具,确保开发过程顺畅。
相对于 Rust 的优势: 虽然 Rust 在一般系统编程方面表现出色,但其复杂的内存管理在区块链环境中成本较高。Sway 以 Rust 编写,利用其现代类型系统和安全特征适应区块链环境,提供熟悉的语法和强大的特性,而无需 Rust 的性能开销。
总之,Sway 将现代编程实践与区块链特定的优化相结合,为智能合约开发提供了一种强大、安全和高效的语言。
Sway 程序类型
Sway 程序有特定的类型:合约、谓词、脚本或库。前三种类型可被部署到区块链,而库则用于代码重用,永远不会直接部署。每个 Sway 文件必须声明其程序类型,一个项目可以包含多个库,但只能有一个合约、脚本或谓词。脚本和谓词需要主函数作为入口点,而合约发布 ABI。
合约: 用于在固定规则下操作的协议或系统,如质押合约或去中心化交易所(DEX)。
脚本: 促进复杂的链上交互,且是暂时的,例如通过在 DEX 和 Lender 上进行一系列交易创建杠杆头寸。
库: 包含可重用的代码,用于一些常见任务,如定点或大数数学。
Sway 语言基础
Sway 是一种静态类型、编译型语言,具有类型推断和特征,旨在通过强静态分析和编译器反馈使智能合约开发更安全、更高效。以下是 Sway 基本元素的快速概述:
变量
Sway 中的变量默认是不可变的,但可以使用 mut
使其变为可变。
// 不可变变量
let foo = 5;
// 可变变量
let mut foo = 5;
foo = 6;
内置类型
Sway 支持几种基本类型:
let a: u64 = 42;
let b: bool = true;
let c: str[4] = __to_str_array("sway");
函数
在 Sway 中,使用 fn
关键字声明函数。
fn add(a: u64, b: u64) -> u64 {
a + b
}
结构体、元组和枚举
Sway 支持结构体类型用于分组相关数据,元组用于固定大小的多类型集合,枚举用于定义可以是几种变体之一的类型。
struct Point {
x: u64,
y: u64,
}
let p = Point { x: 10, y: 20 };
enum Color {
Red: (),
Green: (),
Blue: (),
}
let color = Color::Red;
方法和关联函数
方法和关联函数在 impl
块内定义。
struct Foo {
bar: u64,
baz: bool,
}
impl Foo {
fn is_baz_true(self) -> bool {
self.baz
}
fn new(bar: u64, baz: bool) -> Foo {
Foo { bar, baz }
}
}
常量
常量是不可变的值,在编译时评估。
const MAX_LIMIT: u64 = 100;
控制流
Sway 支持标准控制流构造,如 if
、else
、match
、while
和 for
。
fn main() {
let number = 6;
if number % 2 == 0 {
// 偶数
} else {
// 奇数
}
let result = match number {
1 => "one",
2 => "two",
_ => "other",
};
}
Sway 将现代编程实践与区块链特定的优化相结合,为智能合约开发提供了一种强大、安全和高效的语言。凭借其清晰的结构和对各种类型及控制流机制的支持,Sway 确保开发人员能够为多样化的区块链应用创造定制化解决方案。
结论
总之,Fuel 和 Sway 编程语言为在以太坊上开发高性能去中心化应用程序提供了强大且用户友好的环境。凭借 Fuel 的先进功能和 Sway 的现代、区块链优化的语法,创建安全和高效的智能合约变得简单明了。
这标志着 Fuel 生态系统深入探讨的第一部分结束!
在接下来的最后一部分中,我们将通过构建一个英语拍卖合约来探索这些功能的实际应用。这个示例将展示如何利用 Sway 的工具和特性创建像英语拍卖这样的去中心化解决方案,该拍卖在没有第三方的情况下运行,并确保强大的结算保证。
今天就联系我们,将你的 Web3 设想变为现实!