60 个版本 (5 个稳定版)
新 1.1.0-rc.2 | 2024 年 8 月 22 日 |
---|---|
1.0.5 | 2024 年 7 月 30 日 |
1.0.0-rc.2 | 2022 年 12 月 3 日 |
0.21.0 | 2024 年 3 月 12 日 |
0.10.0 | 2022 年 6 月 24 日 |
#106 in 构建工具
10,346 每月下载量
在 3 crates 中使用
525KB
11K SLoC
构建 RISC Zero zkVM 客户端代码,并提供对主机端的支持。
为了使主机能够在 RISC Zero zkVM 中执行客户端代码,主机必须提供编译后的 RISC-V ELF 文件和相应的 ImageID。这个 crate 包含了执行 zkVM 客户端代码、构建相应的 ELF 文件和 ImageID,并将 ImageID 和 ELF 文件的路径提供给主机使用的函数。
使用 risc0-build
构建 Guest 方法
使用这个 crate 可能会有点复杂,所以我们鼓励您跟随我们的 RISC Zero Rust Starter 仓库。在该仓库中,risc0-build
在 methods
目录 中使用。
通过在 构建脚本 中调用 embed_methods(或 embed_methods_with_options)将客户端方法嵌入到主机中。一个示例 build.rs
文件可能看起来像这样:
fn main() {
risc0_build::embed_methods();
}
这需要将 risc0-build
作为 构建 依赖项包括在内。你还需要在你的 cargo 文件中添加一个 [package.metadata.risc0]
部分。在这个部分中,放置一个包含包含客户端代码的相对路径列表的 methods
字段。例如,如果你的客户端代码在 guest
目录中,那么 Cargo.toml
可能包括
[build-dependencies]
risc0-build = "0.17"
[package.metadata.risc0]
methods = ["guest"]
这将在你的 cargo 输出目录中构建一个文件 methods.rs
,然后你必须将其包含在主机代码中以供使用。例如,你可能创建一个包含以下内容的文件 src/lib.rs
include!(concat!(env!("OUT_DIR"), "/methods.rs"));
这个过程将生成一个图像 ID (*_ID
) 和 ELF 文件 (*_ELF
) 的内容。名称将从 ELF 二进制文件的名称派生出来,该名称将被转换为全大写以符合 Rust 命名约定。因此,如果方法二进制文件名为 multiply
,则图像 ID 将命名为 methods::MULTIPLY_ID
,而 ELF 文件的内容将命名为 methods::MULTIPLY_ELF
。这些将在主机代码的开头包含
use methods::{MULTIPLY_ELF, MULTIPLY_ID};
依赖项
~6–17MB
~225K SLoC