菜单

开发指南

相关源文件

本文档为 fuel-core 的开发者提供指南,涵盖开发工作流程、代码组织、测试策略和贡献实践。有关测试框架和基准测试的详细信息,请参阅测试与基准测试。有关 CI/CD 管道的详细信息,请参阅持续集成

开发环境概述

fuel-core 开发环境围绕几个关键组件组织,它们协同工作以提供全面的区块链节点实现。理解这些组件之间的关系对于高效开发至关重要。

核心开发组件

来源:tests/tests/tx.rs1-20 benches/benches/vm.rs1-30 benches/src/lib.rs1-50

代码组织与架构

fuel-core 代码库遵循模块化架构,并明确区分关注点。理解这种结构对于高效开发至关重要。

模块结构与依赖

来源:crates/fuel-core/src/schema/chain.rs1-30 crates/fuel-core/src/query/message.rs1-50

开发工作流程

测试驱动开发模式

fuel-core 项目采用全面的测试方法,包含多种测试策略。主要的测试模式包括

  1. 单元测试 - 位于单个模块内部
  2. 集成测试 - 位于 tests/tests/ 目录中
  3. 基准测试 - 位于 benches/ 目录中
  4. Schema 测试 - GraphQL schema 验证测试

集成测试架构

来源:tests/tests/tx.rs1-100 tests/tests/messages.rs1-100 tests/tests/contract.rs1-100

常见开发模式

事务测试模式

事务的标准测试模式包括:

  1. 设置:使用初始状态创建一个 TestContext
  2. 组装:使用 AssembleAndRunTx 构建事务
  3. 执行:通过 FuelClient 提交事务
  4. 验证:断言事务状态和结果

来源:tests/tests/tx.rs342-370

消息测试模式

消息测试遵循相似的模式,但侧重于跨链消息功能

来源:tests/tests/messages.rs64-106

基准测试基础设施

基准测试系统围绕 criterion 框架构建,并使用自定义的 VmBench 工具来测量 VM 性能和 gas 成本。

基准测试架构

来源:benches/benches/vm.rs1-110 benches/src/lib.rs1-200 benches/src/bin/collect.rs1-100

基准测试开发模式

VmBench 结构体提供了一个构建器模式用于创建基准测试

来源:benches/src/lib.rs150-200

开发工具和实用程序

Gas 成本收集工具

collect.rs 工具处理基准测试输出以生成 gas 成本参数

该工具读取 criterion 基准测试的 JSON 输出,并将其转换为共识参数的 gas 成本配置。

来源:benches/src/bin/collect.rs60-67

测试助手和实用程序

代码库提供了丰富的测试实用程序

  1. TestContext - 管理测试节点的生命周期
  2. TestSetupBuilder - 用于测试配置的构建器模式
  3. AssembleAndRunTx - 事务组装助手
  4. SigningAccount - 用于测试的账户管理

来源:tests/tests/contract.rs1-50 tests/tests/tx.rs55-60

GraphQL Schema 开发

GraphQL API 是 fuel-core 的核心接口。Schema 开发遵循特定模式

Schema 测试模式

该项目使用快照测试来确保 GraphQL schema 的稳定性。

来源:crates/client/src/client/schema/chain.rs554-567

查询复杂度管理

GraphQL 查询包含复杂度注解,以防止昂贵的操作

来源:crates/fuel-core/src/schema/chain.rs815-825

贡献指南

代码质量标准

  1. 测试要求:所有新功能必须包含全面的测试
  2. 基准影响:性能敏感的更改需要基准测试分析
  3. Schema 验证:GraphQL schema 更改必须通过快照测试
  4. 文档:公共 API 需要文档

开发流程

  1. 设置开发环境

  2. 运行集成测试

  3. 性能验证

  4. Schema 测试

测试最佳实践

  • 使用 TestContext 进行需要完整节点的集成测试
  • 利用 VmBench 进行性能敏感的代码测试
  • 遵循测试文件组织中的现有模式
  • 使用快照测试进行 API 契约验证

来源:tests/tests/tx.rs1-1083 benches/benches/vm.rs1-110 crates/client/src/client/schema/chain.rs550-568