diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-03-21 13:01:52 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-04-04 11:03:00 +0300 |
| commit | c7a0a23f5c6dfacc933526d02e8da59384898758 (patch) | |
| tree | eb1793a1067a839040b05db23936b5ff42b7a046 /zkvms | |
| parent | 2c82f0faf8371c9da8c9c16f69eb935addd5c76b (diff) | |
| download | zkVMs-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')
| -rw-r--r-- | zkvms/zkm/0001-chore-Increase-DEGREE_BITS_RANGE.patch | 42 | ||||
| -rw-r--r-- | zkvms/zkm/default.nix | 36 | ||||
| -rw-r--r-- | zkvms/zkm/host/Cargo.toml | 2 | ||||
| -rw-r--r-- | zkvms/zkm/host/src/main.rs | 16 |
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. |
