60 个版本 (5 个稳定版)

1.1.0-rc.2 2024 年 8 月 22 日
1.0.5 2024 年 7 月 30 日
1.0.0-rc.22022 年 12 月 3 日
0.21.0 2024 年 3 月 12 日
0.10.0 2022 年 6 月 24 日

#106 in 构建工具

Download history 1948/week @ 2024-05-03 2326/week @ 2024-05-10 2526/week @ 2024-05-17 1517/week @ 2024-05-24 1969/week @ 2024-05-31 1967/week @ 2024-06-07 1993/week @ 2024-06-14 2367/week @ 2024-06-21 1935/week @ 2024-06-28 2870/week @ 2024-07-05 3504/week @ 2024-07-12 2672/week @ 2024-07-19 3176/week @ 2024-07-26 2606/week @ 2024-08-02 2499/week @ 2024-08-09 1624/week @ 2024-08-16

10,346 每月下载量
3 crates 中使用

Apache-2.0

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-buildmethods 目录 中使用。

通过在 构建脚本 中调用 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