Forc (Fuel Orchestrator) 是 Sway 编程语言的命令行工具和构建系统。它提供了创建、构建、测试和部署 Sway 项目的功能。Forc 之于 Sway,如同 Cargo 之于 Rust——是一个全面的包管理器和构建工具,能够处理整个开发生命周期。
有关 forc build 或 forc test 等特定 Forc 命令的信息,请参阅 CLI 接口。如果您正在寻找关于测试 Sway 代码的信息,请参阅 测试基础设施。
Forc 为开发者提供了以下工具:
来源
Forc 被构建为一个命令行工具,拥有多个子命令,每个子命令负责特定的功能。主二进制文件处理命令行解析,并将请求分派给相应的处理程序。
来源
当您运行 Forc 命令时,会发生以下一系列事件:
来源
Forc 通过类似于 Cargo 的系统管理包及其依赖项。这包括依赖项解析、构建规划和工作区管理。
Forc 包管理的核心是 BuildPlan,它代表了构建项目的完整计划,包括所有依赖项及其编译顺序。
来源
构建过程涉及多个步骤:
来源
Forc 提供管理 Sway 项目的工具,包括创建新项目、更新依赖项和组织工作区。
当使用 forc new 或 forc init 创建新的 Sway 项目时,Forc 会生成必要的文件和目录。
来源
Forc 支持不同的项目类型:
| 项目类型 | 入口点 | 描述 |
|---|---|---|
| 合约 | main.sw | 可部署到 Fuel VM 的智能合约 |
| 脚本 | main.sw | 可在 Fuel VM 上运行的可执行脚本 |
| 谓词 | main.sw | 求值为布尔值的谓词脚本 |
| 库 | lib.sw | 可供其他 Sway 项目使用的库 |
| 工作区 | (无) | 一组相关的 Sway 项目 |
来源
Forc 的构建系统负责将 Sway 代码编译成可在 Fuel VM 上执行的字节码。此过程涉及多个组件协同工作。
构建系统接受广泛的选项来定制构建过程。
来源
构建 Sway 项目时,Forc 会根据项目类型生成多个工件。
| 项目类型 | 生成产物 |
|---|---|
| 合约 | 字节码、ABI JSON、存储槽 JSON |
| 脚本 | 字节码、字节码哈希 |
| 谓词 | 字节码、谓词根 |
| 库 | ABI JSON(如果公开了函数) |
来源
Forc 包含一个 Sway 代码的测试框架,允许开发人员编写和运行单元测试。
Sway 中的测试是用 #[test] 属性注释的函数。Forc 会发现、编译和执行这些测试。
来源
Sway 测试可以通过不同的条件通过:
| 测试条件 | 描述 |
|---|---|
| ShouldNotRevert | 执行无错误完成则测试通过 |
| ShouldRevert | 执行回退(revert)但未指定代码时测试通过 |
| ShouldRevert(code) | 执行回退(revert)且代码与指定代码匹配时测试通过 |
来源
Forc 通过 forc-client 插件提供将 Sway 合约部署到 Fuel 网络的工具。
部署过程包括几个步骤:
来源
Forc 支持使用代理模式部署合约,从而实现合约的可升级性。
来源
以下是 Forc 主要命令的摘要:
| 命令 | 描述 |
|---|---|
forc new | 创建新的 Sway 项目,并进行脚手架搭建。 |
forc init | 在现有目录中初始化 Sway 项目。 |
forc build | 编译项目并生成产物。 |
forc test | 运行项目中的单元测试。 |
forc deploy | 构建合约并将其部署到 Fuel 网络。 |
forc run | 在 Fuel 网络上执行脚本。 |
forc check | 在不构建的情况下检查项目是否存在错误。 |
forc clean | 移除构建产物 |
forc update | 更新依赖 |
forc contract-id | 计算合约的合约 ID。 |
forc plugins | 列出可用的插件。 |
来源
Forc 具有插件系统,允许扩展其功能。插件是名为 forc-<plugin-name> 的独立可执行文件,可以通过 forc <plugin-name> 调用。
来源
Forc 是 Sway 开发的一个综合性工具链,提供了编写、构建、测试和部署 Sway 代码所需的所有基本工具。其模块化架构允许通过插件进行扩展,并且其构建系统可以有效地处理依赖管理和编译。
来源