菜单

Fuel Core 简介

相关源文件

Fuel Core 是一个模块化的区块链执行层,专为高吞吐量和低延迟操作设计,并针对 Layer 2 扩展进行了优化。它作为 Fuel 协议的参考实现,提供了一个完整的节点解决方案,并侧重于性能和模块化。

本文档介绍了 Fuel Core 的核心组件、架构和关键特性。有关运行节点的更具体信息,请参阅 入门指南,有关基本概念,请参阅 关键概念

主要功能

  • 模块化架构:解耦的组件,可独立开发和扩展
  • 高性能:针对吞吐量和低延迟进行了优化
  • GraphQL API:用于客户端交互的全面 API
  • 权威证明共识:可配置的区块生产
  • P2P 网络:强大的点对点通信层
  • 交易池:高效的交易管理和优先级排序
  • 数据可用性层集成:通过中继器连接到 L1

来源:README.md1-11 bin/fuel-core/Cargo.toml1-14 crates/fuel-core/Cargo.toml1-13

系统架构概览

来源:crates/fuel-core/src/service/sub_services.rs90-166 crates/fuel-core/src/service.rs70-110 bin/fuel-core/src/cli/run.rs90-120

核心组件

Fuel 服务

The FuelService 是主要的协调器,负责初始化和管理所有子服务。它处理启动顺序,确保数据库的正确初始化,并协调所有组件的生命周期。

主要职责

  • 服务初始化和协调
  • 数据库设置和管理
  • 管理组件之间的共享状态
  • 提供与外部交互的接口

来源:crates/fuel-core/src/service.rs98-170 crates/services/src/service.rs1-36

执行器

执行器负责处理交易和执行 Fuel 虚拟机 (FuelVM)。它负责

  • 区块执行
  • 交易验证
  • 状态转换
  • 合约执行

执行器通过可升级的架构支持版本控制,允许使用不同版本的状态转换函数。

来源:crates/services/upgradable-executor/src/executor.rs136-192 crates/services/upgradable-executor/src/executor.rs397-439

交易池 (TxPool)

交易池负责管理等待被包含在区块中的待处理交易。它

  • 验证传入交易
  • 维护一个基于 Gas 价格的优先级队列
  • 处理交易依赖关系
  • 在需要时将交易提供给区块生产者

来源:crates/fuel-core/src/service/sub_services.rs278-290 crates/fuel-core/src/service/adapters.rs73-94

区块生产者

区块生产者通过以下方式协调新区块的创建

  • 根据 Gas 价格和其他标准从池中选择交易
  • 创建区块头
  • 与共识模块交互以签署区块
  • 将区块提交给执行器执行

来源:crates/fuel-core/src/service/sub_services.rs302-319 crates/fuel-core/src/service/adapters.rs61-92

共识模块 (PoA)

Fuel Core 实现了一个权威证明 (PoA) 共识机制,该机制

  • 确定何时应生成新区块
  • 验证生成的区块
  • 处理区块签名和验证
  • 支持不同的触发模式(即时、手动、从不、公开周期)

来源:crates/fuel-core/src/service/sub_services.rs91-98 crates/fuel-core/src/service/sub_services.rs370-384

P2P 网络

P2P 网络支持 Fuel 节点之间的通信,用于

  • 区块和交易传播
  • 节点发现和连接管理
  • 网络同步
  • 预确认消息交换

来源:bin/fuel-core/src/cli/run.rs104-105 crates/fuel-core/src/service/sub_services.rs154-175 crates/fuel-core/src/service/sub_services.rs293-307

GraphQL API

GraphQL API 为客户端应用程序提供了与节点交互的全面接口。它支持

  • 查询区块链状态
  • 提交交易
  • 订阅事件
  • 模拟执行交易

来源:crates/fuel-core/src/graphql_api.rs21-49 crates/fuel-core/src/graphql_api/api_service.rs1-115

交易状态管理器

交易状态管理器负责跟踪和广播交易状态变更,为整个系统中的交易状态提供单一的真相来源。

来源: crates/fuel-core/src/service/sub_services.rs179-189 bin/fuel-core/src/cli/run.rs119-120

Gas Price Service

Gas Price Service 会根据网络需求和活动动态计算交易的合适 Gas 价格。

来源: crates/fuel-core/src/service/sub_services.rs253-276 bin/fuel-core/src/cli/run/gas_price.rs1-162

Relayer

Relayer 在 Fuel 和数据可用性层(通常是以太坊等 L1 区块链)之间充当桥梁,负责

  • 层间消息传递
  • 向 DA 层提交数据
  • 从 DA 层同步状态

来源: crates/services/relayer/src/service.rs1-33 crates/fuel-core/src/service/sub_services.rs227-247

Compression Service

Compression Service 为高效的数据可用性和存储压缩区块,这对于 L2 解决方案尤为重要。

来源: crates/fuel-core/src/service/sub_services.rs404-417 bin/fuel-core/src/cli/run.rs553-558

存储系统

Fuel Core 使用灵活的存储系统,可以与不同的后端配合运行

  • RocksDB 用于持久化存储
  • 内存用于测试和开发

存储层旨在支持历史状态访问和高效查询。

来源: crates/fuel-core/src/service/config.rs46-99 crates/fuel-core/src/service.rs38-58

交易生命周期

来源: crates/fuel-core/src/service/sub_services.rs278-290 crates/services/upgradable-executor/src/executor.rs397-439 crates/fuel-core/src/service/sub_services.rs179-189

区块生产流程

Fuel Core 中的区块生产遵循以下步骤

  1. 触发:PoA 共识模块根据配置的规则触发区块生产
  2. 交易选择:区块生产者从交易池请求交易
  3. 区块组装:区块生产者创建包含所选交易的区块
  4. 执行:区块被传递给执行器进行执行
  5. 验证:执行后的区块得到验证
  6. 存储:经过验证的区块存储在数据库中
  7. 广播:新区块通过 P2P 网络广播给节点
  8. 压缩:区块被压缩以进行数据可用性

区块生产触发器可以通过多种模式进行配置

  • Instant:在有交易可用时立即生产区块
  • Manual:仅在手动触发时生产区块
  • Never:禁用区块生产
  • Open:在配置的时间段内生产区块

来源: crates/fuel-core/src/service/sub_services.rs302-319 crates/fuel-core/src/service/sub_services.rs370-384 bin/fuel-core/src/cli/run.rs243-244

配置选项

Fuel Core 通过命令行参数提供多种配置选项

主要配置类别包括

  1. 服务配置:服务名称、数据库设置、调试模式
  2. 共识:区块生产模式、共识密钥
  3. 数据库:存储类型、路径、缓存大小
  4. 网络:P2P 设置、Relayer 配置
  5. 交易池:交易限制、验证规则
  6. API:GraphQL 端点配置、查询限制

来源: bin/fuel-core/src/cli/run.rs122-315 crates/fuel-core/src/service/config.rs46-99

创世与链初始化

当 Fuel Core 节点启动时,它会从现有数据库初始化区块链状态,或者创建一个新的创世区块。创世过程

  1. 创建或加载数据库
  2. 在需要时初始化创世区块
  3. 设置共识参数
  4. 配置链特定设置

链配置在 JSON 文件中定义,指定如下参数

  • 链名称和 ID
  • 共识参数(交易限制、Gas 费用等)
  • 初始状态(账户、合约等)

来源: crates/fuel-core/src/service/genesis.rs1-121 bin/fuel-core/chainspec/local-testnet/chain_config.json1-50 crates/chain-config/src/config/snapshots/fuel_core_chain_config__config__chain__tests__snapshot_local_testnet_config.snap1-50

集成点

Fuel Core 为外部系统提供了多种集成点

  1. GraphQL API:客户端应用程序的主要接口
  2. 数据可用性层:通过 Relayer 集成
  3. P2P 网络:与其他 Fuel 节点的通信
  4. 存储系统:用于数据持久化的数据库接口

来源: crates/fuel-core/src/graphql_api/api_service.rs1-115 crates/services/relayer/src/service.rs1-33 README.md229-239

执行与状态版本控制

Fuel Core 通过 upgradable-executor 组件支持状态转换函数的版本控制。这允许

  • 执行逻辑的不同版本共存
  • 协议的平滑升级
  • 与历史区块版本的兼容性

系统跟踪当前状态转换字节码版本,并可以根据所需版本使用原生执行器或 WASM 执行器。

来源: crates/services/upgradable-executor/src/executor.rs136-250 crates/types/src/blockchain/header.rs50-80

结论

Fuel Core 是一个高度模块化且高性能的区块链执行层,专为 Layer 2 扩容设计。其架构强调关注点分离,允许组件独立演进,同时通过明确定义的接口来保持互操作性。这种设计提供了适应不断变化的需求所需的灵活性,以及高吞吐量区块链系统所需的性能特征。

有关特定组件的更详细信息,请参阅本 Wiki 的相关章节。