aboutsummaryrefslogtreecommitdiff
path: root/zkvms
diff options
context:
space:
mode:
Diffstat (limited to 'zkvms')
-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.