aboutsummaryrefslogtreecommitdiff
path: root/zkvms/zkm
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-03-21 13:01:52 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-04-04 11:03:00 +0300
commitc7a0a23f5c6dfacc933526d02e8da59384898758 (patch)
treeeb1793a1067a839040b05db23936b5ff42b7a046 /zkvms/zkm
parent2c82f0faf8371c9da8c9c16f69eb935addd5c76b (diff)
downloadzkVMs-benchmarks-c7a0a23f5c6dfacc933526d02e8da59384898758.tar
zkVMs-benchmarks-c7a0a23f5c6dfacc933526d02e8da59384898758.tar.gz
zkVMs-benchmarks-c7a0a23f5c6dfacc933526d02e8da59384898758.zip
feat(zkvms/zkm): Remove SDK override, Go lib build, update SDK usage
Update SDK usage, according to their new methods. ZKM moved their Go library to the zkVM repo. Their updated SDK also don't require the patch.
Diffstat (limited to 'zkvms/zkm')
-rw-r--r--zkvms/zkm/0001-chore-Increase-DEGREE_BITS_RANGE.patch42
-rw-r--r--zkvms/zkm/default.nix36
-rw-r--r--zkvms/zkm/host/Cargo.toml2
-rw-r--r--zkvms/zkm/host/src/main.rs16
4 files changed, 12 insertions, 84 deletions
diff --git a/zkvms/zkm/0001-chore-Increase-DEGREE_BITS_RANGE.patch b/zkvms/zkm/0001-chore-Increase-DEGREE_BITS_RANGE.patch
deleted file mode 100644
index a8d0a8a..0000000
--- a/zkvms/zkm/0001-chore-Increase-DEGREE_BITS_RANGE.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 1ad671fc0694f28c3c8fe224d33b403bc6be0952 Mon Sep 17 00:00:00 2001
-From: Kamen Mladenov <kamen@syndamia.com>
-Date: Fri, 21 Feb 2025 11:33:26 +0200
-Subject: [PATCH] chore: Increase DEGREE_BITS_RANGE
-
-After SHA256 precompile was introduced, the DEGREE_BITS_RANGE value was
-increased to 12 elements.
-https://github.com/zkMIPS/zkm/pull/222
----
- sdk/src/local/util.rs | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/sdk/src/local/util.rs b/sdk/src/local/util.rs
-index 702ae8b..e389f1e 100644
---- a/sdk/src/local/util.rs
-+++ b/sdk/src/local/util.rs
-@@ -16,8 +16,20 @@ use zkm_prover::cpu::kernel::assembler::segment_kernel;
- use zkm_prover::fixed_recursive_verifier::AllRecursiveCircuits;
- use zkm_prover::generation::state::{AssumptionReceipts, Receipt};
-
--const DEGREE_BITS_RANGE: [Range<usize>; 8] =
-- [10..21, 12..22, 11..21, 8..21, 6..21, 6..21, 6..21, 13..23];
-+const DEGREE_BITS_RANGE: [Range<usize>; 12] = [
-+ 10..21,
-+ 12..22,
-+ 11..21,
-+ 8..21,
-+ 6..10,
-+ 6..10,
-+ 6..16,
-+ 6..16,
-+ 6..16,
-+ 6..16,
-+ 6..21,
-+ 13..23,
-+];
-
- const D: usize = 2;
- type C = PoseidonGoldilocksConfig;
---
-2.47.0
-
diff --git a/zkvms/zkm/default.nix b/zkvms/zkm/default.nix
index 4b4cfe2..c6c2230 100644
--- a/zkvms/zkm/default.nix
+++ b/zkvms/zkm/default.nix
@@ -1,30 +1,6 @@
{ zkvmLib, lib, just, metacraft-labs, metacraft-labs-old, protobuf
, pkg-config, openssl, buildGoModule, fetchFromGitHub, craneLib-default, }:
let
- zkm_libsnark = buildGoModule rec {
- pname = "zkm_libsnark";
- version = "0.1.0";
-
- src = fetchFromGitHub {
- owner = "zkMIPS";
- repo = "zkm-project-template";
- sparseCheckout = [ "sdk/src/local/libsnark" ];
- rev = "155221dfa05daf31d7bfe6b601116ef5a03b82c9";
- hash = "sha256-6hT7cMD3iXN65SFFgMHIPKzzQ212/uhZNIpjJNZ0Dek=";
- };
-
- sourceRoot = "${src.name}/sdk/src/local/libsnark";
-
- vendorHash = "sha256-tGajRfJ8G4M89QSiJnjpTzQ3+VA2RLkavD1ipANeOSI=";
-
- buildPhase = "sh ./compile.sh";
-
- installPhase = ''
- mkdir -p "$out"/lib
- mv libsnark.so "$out"/lib/
- '';
- };
-
commonArgs = {
pname = "zkm";
inherit (metacraft-labs.zkm) version;
@@ -37,14 +13,6 @@ let
};
nativeBuildInputs = [ pkg-config openssl protobuf metacraft-labs.zkm ];
-
- overrideVendorGitCheckout = ps: drv:
- if drv.src.shortRev == "155221d"
- && builtins.any (p: p.name == "zkm-sdk") ps then
- drv.overrideAttrs
- (_: { patches = [ ./0001-chore-Increase-DEGREE_BITS_RANGE.patch ]; })
- else
- drv;
};
craneLib = craneLib-default.overrideToolchain metacraft-labs.zkm;
@@ -60,12 +28,12 @@ in zkvmLib.buildPackage craneLib (commonArgs // {
'';
preBuild = ''
- export RUSTFLAGS="-L ${zkm_libsnark}/lib"
+ export RUSTFLAGS="-L ${metacraft-labs.zkm}/lib"
'';
hostToolchain = metacraft-labs-old.zkm;
- preRunLibraries = [ openssl zkm_libsnark ];
+ preRunLibraries = [ openssl metacraft-labs.zkm ];
preRun = ''
export ELF_PATH="$out/bin/guest"
diff --git a/zkvms/zkm/host/Cargo.toml b/zkvms/zkm/host/Cargo.toml
index 0b45ccb..dce7bd6 100644
--- a/zkvms/zkm/host/Cargo.toml
+++ b/zkvms/zkm/host/Cargo.toml
@@ -5,6 +5,7 @@ edition = "2021"
[dependencies]
zkm-sdk = { git = "https://github.com/zkMIPS/zkm-project-template", features = ["snark"] }
+zkm-recursion = { git = "https://github.com/zkMIPS/zkm", branch = "main", default-features = false }
bincode = "1.3.3"
tokio = { version = "1.21.0", features = ["macros", "rt-multi-thread", "signal"] }
anyhow = "1.0.75"
@@ -14,3 +15,4 @@ zkvms_host_io = { path = "../../../zkvms_host_io" }
[patch."https://github.com/zkMIPS/zkm"]
zkm-emulator = { path = "/nix/store/71c0b7qyjy9zbaa5gkz5qcxpz46i0h0r-zkm-unstable-2025-03-11/emulator" }
zkm-prover = { path = "/nix/store/71c0b7qyjy9zbaa5gkz5qcxpz46i0h0r-zkm-unstable-2025-03-11/prover" }
+zkm-recursion = { path = "/nix/store/71c0b7qyjy9zbaa5gkz5qcxpz46i0h0r-zkm-unstable-2025-03-11/recursion" }
diff --git a/zkvms/zkm/host/src/main.rs b/zkvms/zkm/host/src/main.rs
index db1a5cb..f608746 100644
--- a/zkvms/zkm/host/src/main.rs
+++ b/zkvms/zkm/host/src/main.rs
@@ -12,13 +12,9 @@ use zkvms_host_io::{
};
async fn setup(
- prover_client: &mut ProverClient,
- prover_input: &mut ProverInput,
client_cfg: &mut ClientCfg,
) {
- let generation = prover_client
- .setup_and_generate_sol_verifier(&client_cfg.zkm_prover, &client_cfg.vk_path, &prover_input)
- .await;
+ let generation = zkm_recursion::groth16_setup(&client_cfg.vk_path);
if let Err(e) = generation {
panic!("Failed setup! Error: {e}");
@@ -55,7 +51,7 @@ async fn prove(
let prover_result = get_proof(prover_client, prover_input).await;
prover_client
- .process_proof_results(&prover_result, &prover_input, &proof_results_path, "local")
+ .process_proof_results(&prover_result, &prover_input, &proof_results_path)
.expect("process proof results error");
}
@@ -73,7 +69,11 @@ async fn main() -> Result<()> {
let proof_results_path = run_info.env_or("PROOF_RESULTS_PATH", "/tmp/contracts");
let vk_path = run_info.env_or("VERIFYING_KEY_PATH", "/tmp/input");
- let mut client_config = ClientCfg::new("local".to_string(), vk_path.to_owned());
+ let mut client_config = ClientCfg {
+ zkm_prover_type: "local".to_string(),
+ vk_path: vk_path.to_owned(),
+ ..Default::default()
+ };
let mut prover_client = ProverClient::new(&client_config).await;
@@ -96,7 +96,7 @@ async fn main() -> Result<()> {
};
let start = Instant::now();
- setup(&mut prover_client, &mut prover_input, &mut client_config).await;
+ setup(&mut client_config).await;
match run_info.run_type {
// only excute the guest program without generating the proof.