11.1清单参考 (Manifest Reference)

The Forc.toml (the manifest file) is a compulsory file for each package and it is written in [TOML] format. Forc.toml consists of the following fields:

Forc.tomlmanifest 文件)是每个包的强制文件,它以 [TOML] 格式编写。 Forc.toml 由以下字段组成:

  • [project] - Defines a sway project. [项目] - 定义一个 sway 项目。

    • name - The name of the project. 名称 - 项目的名称

    • authors - The authors of the project. 作者-项目的作者

    • organization - The organization of the project. 组织-项目的组织

    • license- The project license. 许可证- 项目许可

    • entry - The entry point for the compiler to start parsing from. 入口 - 编译器开始解析的入口点

      • For the recomended way of selecting an entry point of large libraries please take a look at: Libraries 有关推荐的选择大型库入口点方法,请查看:Libraries

    • implicit-std - Controls whether provided std version (with the current forc version) will get added as a dependency implicitly. Unless you know what you are doing, leave this as default. implicit-std - 控制是否将提供的 std 版本(使用当前的 forc 版本)添加为隐藏依赖。 除非您知道自己在做什么,否则请将其保留为默认值。

    • forc-version - The minimum forc version required for this project to work properly. forc-version - 该项目正常运行所需的最低 forc 版本

  • dependencies- Defines the dependencies. 依赖 - 定义依赖项

  • network - Defines a network for forc to interact with. 网络 - 定义 forc 交互的网络。

  • url -URL of the network. url - 网络的 URL

  • build-profiles - Defines the build profiles. build-profiles - 定义构建配置文件

  • patch - Defines the patches. 补丁 - 定义补丁

  • contract-dependencies- Defines the contract dependencies. 合约依赖- 定义合约依赖。

[项目]部分 (The [project] section)

An example Forc.toml is shown below. Under [project] the following fields are optional:

下面显示了一个示例Forc.toml。在[项目]下,以下字段是可选的:

  • 作者 authors

  • 组织 organization

Also for the following fields, a default value is provided so omitting them is allowed:

此外,还为以下字段提供了默认值,因此允许省略它们:

  • entry - (default : main.sw) 入口 - (默认:main.sw

  • implicit-std - (default : true) 隐含标准 - (默认值:true

[project]
authors = ["user"]
entry = "main.sw"
organization = "Fuel_Labs"
license = "Apache-2.0"
name = "wallet_contract"

[依赖]部分 (The [dependencies] section)

The following fields can be provided with a dependency:

可以为以下字段提供依赖:

  • version - Desired version of the dependency 版本 - 所需的依赖版本

  • path - The path of the dependency (if it is local) 路径 - 依赖项的路径(如果是本地的)

  • git - The URL of the git repo hosting the dependency git - 托管依赖的 git 存储库的 URL

  • branch - The desired branch to fetch from the git repo 分支 - 从 git 存储库获取所需的分支

  • tag - The desired tag to fetch from the git repo tag - 从 git 存储库获取所需的标签

  • rev - The desired rev (i.e. commit hash) reference rev - 所需的 rev(即提交哈希)参考

Please see dependencies for details

有关详细信息,请参阅依赖

[网络]部分 (The [network] section)

For the following fields, a default value is provided so omitting them is allowed:

对于以下字段,提供了默认值,因此允许省略它们:

[build-profiles-*] 部分 (The [build-profiles-*] section)

The [build-profiles] tables provide a way to customize compiler settings such as debug options.

[build-profiles]表提供了一种自定义编译器设置(例如调试选项)的方法。

The following fields needs to be provided for a build-profile:

构建配置文件需要提供以下字段:

  • print-ast - Whether to print out the generated AST (true) or not (false). print-ast - 是否打印生成的 AST (true) 或不打印 (false)

  • print-dca-graph - Whether to print out the computed DCA graph (in GraphViz DOT format). print-dca-graph - 是否打印计算出的 DCA 图表(以 GraphViz DOT 格式)

  • print-finalized-asm - Whether to compile to bytecode (false) or to print out the generated ASM (true). print-finalized-asm - 是否编译为字节码 (false) 或打印生成的 ASM (true)

  • print-intermediate-asm - Whether to compile to bytecode (false) or to print out the generated ASM (true). print-intermediate-asm - 是否编译为字节码 (false) 或打印生成的 ASM (true)。

  • print-ir - Whether to compile to bytecode (false) or to print out the generated IR (true). print-ir - 是否编译为字节码 (false) 或打印生成的 IR (true)

  • terse-mode - Terse mode. Limited warning and error output. terse-mode - 简洁模式。有限的警告和错误输出。

There are two default [build-profile] available with every manifest file. These are debug and release profiles. If you want to override these profiles, you can provide them explicitly in the manifest file like the following example:

每个清单文件都有两个默认的[build-profile]。这些是调试发布配置文件。如果您想覆盖这些配置文件,您可以在清单文件中明确提供它们,如下例所示:

[project]
authors = ["user"]
entry = "main.sw"
organization = "Fuel_Labs"
license = "Apache-2.0"
name = "wallet_contract"

[build-profiles.debug]
print-finalized-asm = false
print-intermediate-asm = false
print-ir = false
terse = false

[build-profiles.release]
print-finalized-asm = false 
print-intermediate-asm = false
print-ir = false
terse = true

Since release and debug implicitly included in every manifest file, you can use them by just passing --release or by not passing anything (debug is default). For using a user defined build profile there is --build-profile <profile name> option available to the relevant commands. (For an example see forc-build)

由于releasedebug 隐式包含在每个清单文件中,因此您可以通过仅传递--release或不传递任何内容(默认为debug)来使用。要使用用户定义的构建配置文件,相关命令可以使用--build-profile <profile name>选项。 (有关示例,请参阅forc-build)

Note that providing the corresponding cli options (like --print-finalized-asm) will override the selected build profile. For example if you pass both --release and --print-finalized-asm, release build profile is omitted and resulting build profile would have a structure like the following:

请注意,提供相应的 cli 选项(如--print-finalized-asm)将覆盖所选的构建配置文件。例如,如果您同时传递--release--print-finalized-asm,则发布构建配置文件将被省略,生成的构建配置文件将具有如下结构:

  • print-finalized-asm - true 打印最终确定的asm - true

  • print-intermediate-asm - false 打印中间asm - false

  • print-ir - false 打印IR - false

  • terse - false terse - 错误

[补丁]部分 (The [patch] section)

The [patch] section of Forc.toml can be used to override dependencies with other copies. The example provided below patches https://github.com/fuellabs/sway source with master branch of the same repo.

Forc.toml 的 [patch] 部分可用于覆盖与其他副本的依赖。下面提供的示例,使用同一存储库 https://github.com/fuellabs/sway 为源的主分支 。

[project]
authors = ["user"]
entry = "main.sw"
organization = "Fuel_Labs"
license = "Apache-2.0"
name = "wallet_contract"

[dependencies]

[patch.'https://github.com/fuellabs/sway']
std = { git = "https://github.com/fuellabs/sway", branch = "test" }

In the example above, std is patched with the test branch from std repo. You can also patch git dependencies with dependencies defined with a path.

在上面的示例中,std是用std存储库中的test分支修补的。您还可以使用路径定义的依赖项来修补 git 依赖项。

[patch.'https://github.com/fuellabs/sway']
std = { path = "/path/to/local_std_version" }

Just like std or core you can also patch dependencies you declared with a git repo.

就像stdcore 一样,您也可以修补使用 git 存储库声明的依赖项。

[project]
authors = ["user"]
entry = "main.sw"
organization = "Fuel_Labs"
license = "Apache-2.0"
name = "wallet_contract"

[dependencies]
foo = { git = "https://github.com/foo/foo", branch = "master" }

[patch.'https://github.com/foo']
foo = { git = "https://github.com/foo/foo", branch = "test" }

Note that each key after the [patch] is a URL of the source that is being patched.

请注意,[patch]后面的每个键都是正在修补的源的 URL。

[合约依赖] 部分 (The [contract-dependencies] section)

The [contract-dependenices] table can be used to declare contract dependencies for a Sway contract or script. Contract dependencies are the set of contracts that our contract or script may interact with. Declaring [contract-dependencies] makes it easier to refer to contracts in your Sway source code without having to manually update IDs each time a new version is deployed. Instead, we can use forc to pin and update contract dependencies just like we do for regular library dependencies.

[合约依赖 contract-dependenices]表可用于声明 Sway 合约或脚本的合约依赖。合约依赖是合约或脚本可能与之交互的一组合约。声明[合约依赖 contract-dependenices]可以更轻松地引用 Sway 源代码中的合约,而无需在每次部署新版本时手动更新 ID。相反,我们可以使用 forc 来固定和更新合约依赖,就像处理常规库依赖一样。

Contracts declared under [contract-dependencies] are built and pinned just like regular [dependencies] however rather than importing each contract dependency's entire public namespace we instead import their respective contract IDs as CONTRACT_ID constants available via each contract dependency's namespace root. This means you can use a contract dependency's ID as if it were declared as a pub const in the root of the contract dependency package as demonstrated in the example below.

[合约依赖 contract-dependencies]下,声明合约的构建和固定就像常规的[依赖项 dependencies]一样,但是我们并不导入每个合约依赖的整个公共命名空间,而是将其各自合约 ID 导入,为可通过每个合约依赖的命名空间使用的CONTRACT_ID常量根。这意味着您可以使用合约依赖的 ID,就好像它在合约依赖包的根目录中声明为pub const一样,如下例所示。

Entries under [contract-dependencies] can be declared in the same way that [dependencies] can be declared. That is, they can refer to the path or git source of another contract. Note that entries under [contract-dependencies] must refer to contracts and will otherwise produce an error.

[合约依赖 contract-dependencies]下的条目可以以与[dependencies]相同的方式声明。也就是说,他们可以引用另一个合约的pathgit源。请注意,[dependencies]下的条目必须引用合约,否则会产生错误。

Example Forc.toml: 示例 Forc.toml:

[project]
authors = ["user"]
entry = "main.sw"
organization = "Fuel_Labs"
license = "Apache-2.0"
name = "wallet_contract"

[contract-dependencies]
foo = { path = "../foo" }

Example usage: 示例用法:

script;

fn main() {
  let foo_id = foo::CONTRACT_ID;
}

Because the ID of a contract is computed deterministically, rebuilding the same contract would always result in the same contract ID. Since two contracts with same contract ID cannot be deployed on the blockchain, a "salt" factor is needed to modify the contract ID. For each contract dependency declared under [contract-dependencies], salt can be specified. An example is shown below:

由于合约的 ID 是确定性计算的,因此重建相同的合约将始终产生相同的合约 ID。由于两个具有相同合约ID的合约无法部署在区块链上,因此需要一个“盐”因子来修改合约ID。对于在[合约依赖 contract-dependencies]下声明的每个合约依赖,可以指定“盐”。一个例子如下所示:

[contract-dependencies]
foo = { path = "../foo", salt = "0x1000000000000000000000000000000000000000000000000000000000000000" }

For contract dependencies that do not specify any value for salt, a default of all zeros for salt is implicitly applied.

对于未指定盐 salt任何值的合约依赖,将默认把salt的值设置为0。

Last updated