diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-03-27 13:25:05 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-04-04 11:03:00 +0300 |
| commit | a30b4022fa85320806b8b4d004ea713b68df6566 (patch) | |
| tree | dae482b317a9fb331c2ddf3a831d55bd754d5649 /zkvms/risc0 | |
| parent | 696e6041a88f2ed5d0d3a699a7af55252ecba1ca (diff) | |
| download | zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar.gz zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.zip | |
feat(zkvms/risc0): Implement elf encoding
Recently, RISC0 have added code to their SDK which adds magic bytes to
the (already compiled) ELF. Since we're taking another route than
intended, we'll need to replicate this step too.
We're doing things in a different fashion, because their SDK normally
compiles the guest, and doesn't allow you to supply a prebuilt ELF.
Diffstat (limited to 'zkvms/risc0')
| -rw-r--r-- | zkvms/risc0/default.nix | 7 | ||||
| -rw-r--r-- | zkvms/risc0/guest/Cargo.toml | 3 | ||||
| -rw-r--r-- | zkvms/risc0/guest_elf_patch/Cargo.toml | 9 | ||||
| -rw-r--r-- | zkvms/risc0/guest_elf_patch/src/main.rs | 11 |
4 files changed, 29 insertions, 1 deletions
diff --git a/zkvms/risc0/default.nix b/zkvms/risc0/default.nix index 6a4b796..132bce2 100644 --- a/zkvms/risc0/default.nix +++ b/zkvms/risc0/default.nix @@ -23,10 +23,15 @@ in zkvmLib.buildPackage craneLib (commonArgs // { guestTarget = "riscv32im-risc0-zkvm-elf"; + postBuildGuest = '' + cd ../guest_elf_patch + cargo run --release + ''; + preBuild = '' # Used for verification # https://github.com/risc0/risc0/blob/881e512732eca72849b2d0e263a1242aba3158af/risc0/build/src/lib.rs#L192-L195 - export GUEST_ID="$(${metacraft-labs.risc0}/bin/r0vm --elf ./host/src/guest --id)" + export GUEST_ID="$(${metacraft-labs.risc0}/bin/r0vm --elf ./src/guest --id)" ''; preRunBinaries = [ metacraft-labs.risc0 ]; diff --git a/zkvms/risc0/guest/Cargo.toml b/zkvms/risc0/guest/Cargo.toml index 8a12a8c..a5a61f2 100644 --- a/zkvms/risc0/guest/Cargo.toml +++ b/zkvms/risc0/guest/Cargo.toml @@ -11,5 +11,8 @@ risc0-zkvm = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstabl wrapper_macro = { version = "0.1.0", path = "../wrapper_macro" } +# Not used, but needed for Nix to handle dependencies +guest-elf-patch-risc0 = { path = "../guest_elf_patch" } + # The zkp dependency references a chosen guest in guests. It is included # (inserted here) by Nix. See zkvmLib.nix diff --git a/zkvms/risc0/guest_elf_patch/Cargo.toml b/zkvms/risc0/guest_elf_patch/Cargo.toml new file mode 100644 index 0000000..2008faf --- /dev/null +++ b/zkvms/risc0/guest_elf_patch/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "guest-elf-patch-risc0" +version = "0.1.0" +edition = "2021" + +[dependencies] +risc0-binfmt = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/binfmt" } +risc0-zkos-v1compat = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/zkos/v1compat" } +bytemuck_derive = "<1.9.0" diff --git a/zkvms/risc0/guest_elf_patch/src/main.rs b/zkvms/risc0/guest_elf_patch/src/main.rs new file mode 100644 index 0000000..6999ab4 --- /dev/null +++ b/zkvms/risc0/guest_elf_patch/src/main.rs @@ -0,0 +1,11 @@ +use risc0_binfmt::ProgramBinary; +use risc0_zkos_v1compat::V1COMPAT_ELF; + +static ELF: &[u8] = include_bytes!("../../host/src/guest"); + +// https://github.com/risc0/risc0/blob/fee2e19a3c49b3da492403de5e2d011c890e52de/risc0/build/src/lib.rs#L179-L187 +fn main() { + let binary = ProgramBinary::new(&ELF, V1COMPAT_ELF); + let elf = binary.encode(); + std::fs::write("../host/src/guest", &elf).expect("couldn't add magic bytes to elf!"); +} |
