srtool
Please read Substrate to Polkadot SDK page first.
Substrate 运行时工具箱 (srtool) 的核心组件是一个 Docker 容器,它使您能够以确定性方式构建 Substrate WebAssembly 运行时。
通过使用此工具,您可以确保相同的源代码始终如一地生成相同的 WebAssembly blob。
您还可以使用该工具检查和审计任何基于 Substrate 的链的运行时,并将构建 WebAssembly 运行时集成到您的 CI/CD 管道中。
使用 Docker 容器
因为 srtool 是一个 Docker 容器,所以您必须在构建环境中使用它才能使用它。
但是,您不需要了解有关使用 Docker 的任何知识来使用 srtool 构建链,因为您可以使用 srtool-cli 命令行界面来使用 Docker 镜像。
srtiool-cli 包是一个用 Rust 编写的命令行实用程序,它在您的计算机上安装一个名为 srtool 的可执行程序。
该程序简化了您与 srtool Docker 容器的交互。
随着时间的推移,围绕 srtool Docker 镜像的工具已扩展到包括以下工具和辅助程序:
- srtool-cli 提供了一个命令行界面来拉取
srtoolDocker 镜像,获取有关镜像和用于与其交互的工具的信息,以及使用srtoolDocker 容器构建运行时。 - subwasm 提供了用于处理使用
srtool构建的元数据和 WebAssembly 运行时的命令行选项。subwasm程序也用于在srtool镜像中执行任务。 - srtool-actions 提供了 Github 操作,将使用
srtool镜像生成的构建与您的 GitHub CI/CD 管道集成。 - srtool-app 为使用
srtoolDocker 镜像构建运行时提供了一个简单的图形用户界面。
安装 srtool-cli
srtool 命令行界面使您能够使用 srtool Docker 镜像构建 WebAssembly 运行时。
您可以通过运行以下命令安装 srtool 命令行界面:
cargo install --git https://github.com/chevdor/srtool-cli基本命令用法
运行 srtool 命令的基本语法是:
srtool [选项] [子命令]选项
您可以在 srtool 命令中使用以下命令行选项。
| 选项 | 描述 |
|---|---|
-h, --help | 显示用法信息。 |
i, --image <image> | 指定一个备用镜像。请务必指定与默认 paritytech/srtool 镜像兼容的镜像。您应该注意,指定不同的镜像可能不会产生与 paritytech/srtool 镜像产生的相同确定性结果。 |
-n, --no-cache | 指定您不想使用本地缓存中的标签值。 |
-V, --version | 显示版本信息。 |
子命令
您可以在 srtool 命令中使用以下子命令。
| 命令 | 描述 |
|---|---|
build | 启动一个新的 srtool 容器来构建您的运行时。 |
help | 显示 srtool 或指定子命令的用法信息。 |
info | 显示有关 srtool 容器和您的存储库的信息。 |
pull | 拉取 srtool 镜像,而不运行其他任何操作。 |
version | 显示 srtool 容器的版本信息。如果您想要 srtool-cli 可执行文件的版本信息,请使用 --version。 |
示例
要获取 srtool Docker 镜像的版本信息,请运行以下命令:
srtool version该命令将显示类似以下内容的输出:
{
"name": "srtool",
"version": "0.9.21",
"rustc": "1.62.0",
"subwasm": "0.18.0",
"tera": "0.2.1",
"toml": "0.2.1"
}要获取 srtool-cli 可执行文件的版本信息,请运行以下命令:
srtool --version该命令将显示类似以下内容的输出:
srtool-cli 0.8.0srtool build
使用 srtool build 命令启动一个新的 srtool 容器来构建您指定的包的运行时。
默认情况下,srtool build 命令假设运行时的 Cargo.toml 文件位于名为链的 runtime 子目录中。
例如,srtool build 命令默认使用以下位置:
- runtime/kusama
- runtime/polkadot
- runtime/rococo
- runtime/westend
如果您的运行时的 Cargo.toml 文件位于其他位置,则可以将路径指定为命令行选项。
基本用法
运行 srtool build 命令的基本语法是:
srtool build [选项] --package <package> [--runtime-dir <path>] [项目路径]参数
默认情况下,srtool build 在当前工作目录中运行。如果您的项目未位于当前工作目录中,则可以指定项目位置的路径。
| 参数 | 描述 |
|---|---|
项目路径 | 指定您要为其构建运行时的区块链项目的路径。 |
选项
您可以在 srtool build 命令中使用以下命令行选项。
| 选项 | 描述 |
|---|---|
-a, --app | 在构建过程中启用标准输出和 JSON 输出的混合。此选项推荐用于 CI。JSON 输出作为构建结束时的单行提供。 |
--build-opts <BUILD_OPTS> | 允许您将自定义选项直接传递给 cargo 构建过程。如果您指定此命令行选项,请注意,构建 Kusama 或 Polkadot 的所有自动选项都不会传递给构建过程。使用 --build-opts 命令行选项时,您必须显式设置所需的构建选项。通常,此选项很少需要。此选项等效于设置 BUILD_OPTS 环境变量。 |
--default-features <default-features> | 允许您更改运行时的默认功能列表,而无需禁用自动功能检测。此选项等效于设置 DEFAULT_FEATURES 环境变量。如果您设置了 BUILD_OPTS,则此命令行选项无效。 |
-h, --help | 显示用法信息。 |
i, --image <image> | 指定一个备用镜像。请务必指定与默认 paritytech/srtool 镜像兼容的镜像。您应该注意,指定不同的镜像可能不会产生与 paritytech/srtool 镜像产生的相同确定性结果。 |
-j, --json | 启用 JSON 输出。 |
--no-cache | 禁用所有缓存。如果您指定此选项,则 srtool 镜像将不会访问 Cargo 主缓存以获取构建依赖项。通常,此选项很少使用,因为使用缓存没有已知问题。 |
-p, --package <package> | 指定要构建的运行时包的名称。您指定的名称应与运行时的 Cargo.toml 文件中定义的名称相同,例如 kusama-runtime、polkadot-runtime 等等。此选项等效于设置 PACKAGE 环境变量。 |
--profile <profile> | 指定用于构建运行时的配置文件,构建运行时的默认配置文件始终为 release。您可以使用此命令行选项覆盖默认值。此选项等效于设置 PROFILE 环境变量。 |
-r, --runtime-dir <runtime> | 指定运行时的 Cargo.toml 文件的位置。如果您的运行时不在标准位置,则可以使用此命令行选项指定正确的位置。此选项等效于设置 RUNTIME_DIR 环境变量。 |
-V, --version | 显示版本信息。 |
示例
要从 cumulus 存储库构建 Westend 运行时,其中运行时的 Cargo.toml 的路径为 parachains/runtimes/assets/asset-hub-westend,您将运行以下命令:
srtool build --app --package westmint-runtime --runtime-dir parachains/runtimes/assets/westmint第一次运行 srtool build 命令时,需要一些时间才能完成。
在运行时编译时,有关其进度的消息将显示为标准输出。
因为此示例使用 --app 命令行选项,所以 JSON 输出将在构建结束时以单行显示,类似于以下截断的输出:
...
Compiling cumulus-primitives-parachain-inherent v0.1.0 (/build/primitives/parachain-inherent)
Compiling cumulus-pallet-parachain-system v0.1.0 (/build/pallets/parachain-system)
Finished release [optimized] target(s) in 112m 11s
✨ Your Substrate WASM Runtime is ready! ✨
{"gen":"srtool v0.9.21","src":"git","version":"1.0.0","commit":"bd41e3f11887ea2f55fc37be71ff652923388e03","tag":"v0.9.220-rc2","branch":"master","rustc":"rustc 1.62.0 (a8314ef7d 2022-06-27)","pkg":"westmint-runtime","tmsp":"2022-08-22T21:12:18Z","size":"707937","prop":"0x6b8e93443b6660a16f67a6cd34d415af463e2285eda3fd02b9fe052c1ad2ceb9"
... }}}}srtool help
使用 srtool help 命令显示 srtool 或指定子命令的用法消息。
基本用法
srtool help [子命令]示例
要显示构建子命令的用法信息,请运行以下命令:
subkey help buildsrtool info
使用 srtool info 命令显示有关 srtool 容器和您的存储库的信息。
默认情况下,srtool info 命令假设运行时的 Cargo.toml 文件位于名为链的 runtime 子目录中。
例如,srtool info 命令默认使用以下位置:
- runtime/kusama
- runtime/polkadot
- runtime/rococo
- runtime/westend
如果您的运行时的 Cargo.toml 文件位于其他位置,则可以将路径指定为命令行选项。
基本用法
运行 srtool info 命令的基本语法是:
srtool info [选项] --package <package> [--runtime-dir <path>] [项目路径]参数
默认情况下,srtool info 在当前工作目录中运行。
如果您的项目未位于当前工作目录中,则可以指定项目位置的路径。
| 参数 | 描述 |
|---|---|
项目路径 | 如果项目未位于当前工作目录中,则指定区块链项目的路径。 |
选项
您可以在 srtool info 命令中使用以下命令行选项。
| 选项 | 描述 |
|---|---|
-h, --help | 显示用法信息。 |
i, --image <image> | 指定一个备用镜像。请务必指定与默认 paritytech/srtool 镜像兼容的镜像。您应该注意,指定不同的镜像可能不会产生与 paritytech/srtool 镜像产生的相同确定性结果。 |
-p, --package <package> | 指定要构建的运行时包的名称。您指定的名称应与运行时的 Cargo.toml 文件中定义的名称相同,例如 kusama-runtime、polkadot-runtime 等等。此选项等效于设置 PACKAGE 环境变量。 |
-r, --runtime-dir <runtime> | 指定运行时的 Cargo.toml 文件的位置。如果您的运行时不在标准位置,则可以使用此命令行选项指定正确的位置。此选项等效于设置 RUNTIME_DIR 环境变量。 |
-V, --version | 显示版本信息。 |
示例
要显示有关 srtool 容器和本地 solo-template-node 存储库的信息,您可能需要运行类似以下命令:
srtool info --package solo-template-node-runtime --runtime-dir runtime此命令将显示类似以下内容的输出:
{
"generator": {
"name": "srtool",
"version": "0.9.21"
},
"src": "git",
"version": "4.0.0-dev",
"git": {
"commit": "6a8b2b12371395979099d2c79ccc1860531b0449",
"tag": "",
"branch": "my-release-branch"
},
"rustc": "rustc 1.62.0 (a8314ef7d 2022-06-27)",
"pkg": "polkadot-runtime",
"profile": "release"
}srtool pull
使用 srtool pull 命令检查并下载最新版本的 srtool Docker 镜像。
基本用法
运行 srtool pull 命令的基本语法是:
srtool pull [选项]选项
您可以在 srtool pull 命令中使用以下命令行选项。
| 选项 | 描述 |
|---|---|
-h, --help | 显示用法信息。 |
i, --image <image> | 指定一个备用镜像。请务必指定与默认 paritytech/srtool 镜像兼容的镜像。您应该注意,指定不同的镜像可能不会产生与 paritytech/srtool 镜像产生的相同确定性结果。 |
-V, --version | 显示版本信息。 |
示例
要检查 srtool 容器和 Docker 镜像的新版本,您可能需要运行类似以下命令:
srtool pull此命令将检查 Docker Hub 以获取最新版本的 paritytech/srtool 镜像,并开始下载和提取软件。
例如
Found 1.62.0, we will be using paritytech/srtool:1.62.0 for the build
1.62.0: Pulling from paritytech/srtool
405f018f9d1d: Pull complete
c49473e7f7b3: Pull complete
7edf98d07029: Pull complete
85a50724a6fa: Pull complete
87fb1e3dee5b: Downloading 19.4MB/170.4MB
469075c5d317: Download complete
533bfa44b64a: Download complete
...当所有任务完成后,该命令将显示类似以下内容的输出:
Digest: sha256:d5353a63d8fccbef5666e28a8fa0b302d71d4f53cabeb760fe213f3d7df4b8b6
Status: Downloaded newer image for paritytech/srtool:1.62.0
docker.io/paritytech/srtool:1.62.0如果您已经安装了最新版本,则该命令将显示类似以下内容的输出:
Found 1.62.0, we will be using paritytech/srtool:1.62.0 for the build
1.62.0: Pulling from paritytech/srtool
Digest: sha256:d5353a63d8fccbef5666e28a8fa0b302d71d4f53cabeb760fe213f3d7df4b8b6
Status: Image is up to date for paritytech/srtool:1.62.0
docker.io/paritytech/srtool:1.62.0srtool version
使用 srtool version 命令显示 srtool 容器的版本信息。如果您想要 srtool-cli 可执行文件的版本,请使用 --version。
基本用法
运行 srtool version 命令的基本语法是:
srtool version [选项]选项
您可以在 srtool version 命令中使用以下命令行选项。
| 选项 | 描述 |
|---|---|
-h, --help | 显示用法信息。 |
i, --image <image> | 指定一个备用镜像。请务必指定与默认 paritytech/srtool 镜像兼容的镜像。您应该注意,指定不同的镜像可能不会产生与 paritytech/srtool 镜像产生的相同确定性结果。 |
-V, --version | 显示版本信息。 |
示例
要显示有关 srtool 容器的信息,请运行以下命令:
srtool version 该命令将显示类似以下内容的输出:
{
"name": "srtool",
"version": "0.9.21",
"rustc": "1.62.0",
"subwasm": "0.18.0",
"tera": "0.2.1",
"toml": "0.2.1"
}要显示 srtool 命令行界面的版本信息而不是容器,您可以运行以下命令:
srtool version --version该命令将显示类似以下内容的输出:
srtool-version 0.8.0