aboutsummaryrefslogtreecommitdiff
path: root/zkvms
diff options
context:
space:
mode:
Diffstat (limited to 'zkvms')
-rw-r--r--zkvms/risc0/default.nix7
-rw-r--r--zkvms/risc0/guest/Cargo.toml3
-rw-r--r--zkvms/risc0/guest_elf_patch/Cargo.toml9
-rw-r--r--zkvms/risc0/guest_elf_patch/src/main.rs11
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!");
+}