From 3c910dabda33ff3e63d75e55830d6b3ff6b75fd4 Mon Sep 17 00:00:00 2001 From: ryardley Date: Wed, 12 Nov 2025 23:23:38 -0300 Subject: [PATCH 01/36] feat: use bfv-helpers in zkinputsgenerator --- crates/bfv-helpers/src/lib.rs | 22 +++++++ examples/CRISP/Cargo.lock | 1 + .../CRISP/crates/zk-inputs-wasm/src/lib.rs | 9 ++- examples/CRISP/crates/zk-inputs/Cargo.toml | 1 + examples/CRISP/crates/zk-inputs/src/lib.rs | 65 +++++++++++-------- 5 files changed, 65 insertions(+), 33 deletions(-) diff --git a/crates/bfv-helpers/src/lib.rs b/crates/bfv-helpers/src/lib.rs index d2df9cbc2b..23802f5669 100644 --- a/crates/bfv-helpers/src/lib.rs +++ b/crates/bfv-helpers/src/lib.rs @@ -94,6 +94,16 @@ impl BfvParams { }) .collect() } + + pub fn to_tuple(self) -> (usize, u64, &'static [u64], Option<&'static str>) { + let set: BfvParamSet = self.into(); + ( + set.degree, + set.plaintext_modulus, + set.moduli, + set.error1_variance, + ) + } } impl From for BfvParamSet { @@ -158,6 +168,18 @@ pub struct BfvParamSet { pub error1_variance: Option<&'static str>, } +impl BfvParamSet { + /// Build the BfvParamSet into an fhe.rs BfvParameters struct + pub fn build(self) -> BfvParameters { + build_bfv_params_from_set(self) + } + + /// Build the BfvParamSet into an fhe.rs Arc struct + pub fn build_arc(self) -> Arc { + Arc::new(self.build()) + } +} + /// Builds BFV parameters from a `BfvParamSet`. /// /// This is a convenience function that consumes a `BfvParamSet` struct diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 765a36e38d..2a529e3785 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -6533,6 +6533,7 @@ name = "zk-inputs" version = "0.1.0" dependencies = [ "bigint-poly", + "e3-bfv-helpers", "eyre", "fhe", "fhe-math", diff --git a/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs b/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs index 09d945dd57..7315651629 100644 --- a/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs @@ -34,17 +34,16 @@ impl ZKInputsGenerator { ) -> Result { let plaintext_modulus_u64 = plaintext_modulus as u64; let moduli_vec: Vec = moduli.into_iter().map(|m| m as u64).collect(); - - let generator = CoreZKInputsGenerator::new(degree, plaintext_modulus_u64, &moduli_vec) - .map_err(|e| JsValue::from_str(&e.to_string()))?; + // Should we pass an error1_variance here? + let generator = + CoreZKInputsGenerator::new(degree, plaintext_modulus_u64, &moduli_vec, None); Ok(ZKInputsGenerator { generator }) } /// Create a new JavaScript CRISP ZK inputs generator with default BFV parameters. #[wasm_bindgen(js_name = "withDefaults")] pub fn with_defaults() -> Result { - let generator = CoreZKInputsGenerator::with_defaults() - .map_err(|e| JsValue::from_str(&e.to_string()))?; + let generator = CoreZKInputsGenerator::with_defaults(); Ok(ZKInputsGenerator { generator }) } diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index b8f6af1ce6..c9f42c9f40 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,6 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] +e3-bfv-helpers.workspace = true fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index e73387268c..5fe5d76b37 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -8,23 +8,20 @@ //! //! This crate contains the main logic for generating CRISP inputs for zero-knowledge proofs. +use e3_bfv_helpers::build_bfv_params_arc; +pub use e3_bfv_helpers::BfvParamSet; +use e3_bfv_helpers::BfvParams; use eyre::{Context, Result}; +use fhe::bfv::BfvParameters; use fhe::bfv::Ciphertext; use fhe::bfv::PublicKey; use fhe::bfv::SecretKey; -use fhe::bfv::{BfvParameters, BfvParametersBuilder}; use fhe::bfv::{Encoding, Plaintext}; -use fhe_math::rq::Poly; -use fhe_math::rq::Representation; use fhe_traits::{DeserializeParametrized, FheEncoder, Serialize}; use greco::bounds::GrecoBounds; use greco::vectors::GrecoVectors; -use num_bigint::BigInt; -use num_bigint::BigUint; -use num_bigint::ToBigInt; use rand::thread_rng; use std::sync::Arc; - mod ciphertext_addition; use crate::ciphertext_addition::CiphertextAdditionInputs; @@ -42,14 +39,21 @@ pub struct ZKInputsGenerator { impl ZKInputsGenerator { /// Creates a new generator with the specified BFV parameters. - pub fn new(degree: usize, plaintext_modulus: u64, moduli: &[u64]) -> Result { - let bfv_params = BfvParametersBuilder::new() - .set_degree(degree) - .set_plaintext_modulus(plaintext_modulus) - .set_moduli(moduli) - .build_arc() - .map_err(|e| eyre::eyre!("Invalid BFV parameters: {}", e))?; - Ok(Self { bfv_params }) + pub fn new( + degree: usize, + plaintext_modulus: u64, + moduli: &[u64], + error1_variance: Option<&str>, + ) -> Self { + let bfv_params = build_bfv_params_arc(degree, plaintext_modulus, moduli, error1_variance); + Self { bfv_params } + } + + /// Creates a new generator with the specified BFV parameter set. + pub fn from_set(set: BfvParamSet) -> Self { + let bfv_params = set.build_arc(); + + Self { bfv_params } } /// Creates a generator with default BFV parameters for testing purposes. @@ -59,8 +63,8 @@ impl ZKInputsGenerator { /// - The default parameters are not suitable for production. /// # Returns /// A new ZKInputsGenerator instance with default BFV parameters - pub fn with_defaults() -> Result { - Self::new(DEFAULT_DEGREE, DEFAULT_PLAINTEXT_MODULUS, &DEFAULT_MODULI) + pub fn with_defaults() -> Self { + Self::from_set(BfvParams::InsecureSet512_10_1.into()) } /// Generates CRISP ZK inputs for a vote encryption and addition operation. @@ -175,7 +179,7 @@ mod tests { #[test] fn test_inputs_generation_with_defaults() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let public_key = generator .generate_public_key() .expect("failed to generate public key"); @@ -195,8 +199,13 @@ mod tests { #[test] fn test_inputs_generation_with_custom_params() { - let generator = ZKInputsGenerator::new(2048, 1032193, &[0x3FFFFFFF000001]) - .expect("failed to create generator"); + let generator = ZKInputsGenerator::from_set(BfvParamSet { + degree: 2048, + plaintext_modulus: 1032193, + moduli: &[0x3FFFFFFF000001], + error1_variance: None, + }); + let public_key = generator .generate_public_key() .expect("failed to generate public key"); @@ -216,7 +225,7 @@ mod tests { #[test] fn test_inputs_generation_with_vote_0() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let public_key = generator .generate_public_key() .expect("failed to generate public key"); @@ -236,7 +245,7 @@ mod tests { #[test] fn test_get_bfv_params() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let bfv_params = generator.get_bfv_params(); assert!(bfv_params.degree() == 2048); @@ -246,7 +255,7 @@ mod tests { #[test] fn test_secure_rng_usage() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); // Test that functions use secure randomness (no deterministic seed). let public_key = generator @@ -271,7 +280,7 @@ mod tests { // Error handling tests #[test] fn test_invalid_inputs() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let vote = create_vote_vector(); // Test invalid byte inputs. @@ -290,7 +299,7 @@ mod tests { // Core functionality tests #[test] fn test_vote_values() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let public_key = generator .generate_public_key() .expect("failed to generate public key"); @@ -310,7 +319,7 @@ mod tests { #[test] fn test_bfv_params_consistency() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let bfv_params = generator.get_bfv_params(); // Verify default parameters. @@ -321,7 +330,7 @@ mod tests { #[test] fn test_json_output_structure() { - let generator = ZKInputsGenerator::with_defaults().expect("failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let public_key = generator .generate_public_key() .expect("failed to generate public key"); @@ -354,7 +363,7 @@ mod tests { #[test] fn test_cryptographic_properties() { - let generator = ZKInputsGenerator::with_defaults().expect("Failed to create generator"); + let generator = ZKInputsGenerator::with_defaults(); let public_key = generator .generate_public_key() .expect("Failed to generate public key"); From cd9fed054ca81871f5d1966945b6c9d4bc21371a Mon Sep 17 00:00:00 2001 From: ryardley Date: Thu, 13 Nov 2025 21:13:23 +0000 Subject: [PATCH 02/36] remove redundant test --- .../CRISP/crates/zk-inputs-wasm/src/lib.rs | 2 +- examples/CRISP/crates/zk-inputs/src/lib.rs | 25 ++++++------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs b/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs index 7315651629..cdfff8be8b 100644 --- a/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs-wasm/src/lib.rs @@ -136,7 +136,7 @@ impl ZKInputsGenerator { mod tests { use super::*; use wasm_bindgen_test::*; - use zk_inputs::DEFAULT_DEGREE; + const DEFAULT_DEGREE: usize = 512; wasm_bindgen_test_configure!(run_in_browser); diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 5fe5d76b37..8898b1015d 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -28,11 +28,6 @@ use crate::ciphertext_addition::CiphertextAdditionInputs; mod serialization; use serialization::{construct_inputs, serialize_inputs_to_json}; -// Default BFV parameters constants for testing purposes. -pub const DEFAULT_DEGREE: usize = 2048; -pub const DEFAULT_PLAINTEXT_MODULUS: u64 = 1032193; -pub const DEFAULT_MODULI: [u64; 1] = [0x3FFFFFFF000001]; - pub struct ZKInputsGenerator { bfv_params: Arc, } @@ -172,6 +167,8 @@ impl ZKInputsGenerator { mod tests { use super::*; + const DEFAULT_DEGREE: usize = 512; + /// Helper function to create a vote vector with alternating 0s and 1s (deterministic) fn create_vote_vector() -> Vec { (0..DEFAULT_DEGREE).map(|i| (i % 2) as u64).collect() @@ -245,7 +242,12 @@ mod tests { #[test] fn test_get_bfv_params() { - let generator = ZKInputsGenerator::with_defaults(); + let generator = ZKInputsGenerator::from_set(BfvParamSet { + degree: 2048, + plaintext_modulus: 1032193, + moduli: &[0x3FFFFFFF000001], + error1_variance: None, + }); let bfv_params = generator.get_bfv_params(); assert!(bfv_params.degree() == 2048); @@ -317,17 +319,6 @@ mod tests { assert!(result_1.is_ok()); } - #[test] - fn test_bfv_params_consistency() { - let generator = ZKInputsGenerator::with_defaults(); - let bfv_params = generator.get_bfv_params(); - - // Verify default parameters. - assert_eq!(bfv_params.degree(), 2048); - assert_eq!(bfv_params.plaintext(), 1032193); - assert_eq!(bfv_params.moduli(), &[0x3FFFFFFF000001]); - } - #[test] fn test_json_output_structure() { let generator = ZKInputsGenerator::with_defaults(); From 60d8e56e7f2dec5524687e21fa07edb604c3f9e8 Mon Sep 17 00:00:00 2001 From: ryardley Date: Thu, 13 Nov 2025 21:24:17 +0000 Subject: [PATCH 03/36] see if tests are actually running --- .github/workflows/ci.yml | 14 ++++++++++++++ examples/CRISP/crates/zk-inputs/src/lib.rs | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index edf321bd3b..b1ecd571e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,20 @@ permissions: packages: write jobs: + # crisp_rust_unit: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # + # - name: Install Rust 1.86.0 + # uses: dtolnay/rust-toolchain@stable + # with: + # toolchain: 1.86.0 + # + # - name: Run CRISP Unit Tests + # working-directory: ./examples/CRISP + # run: "cargo test" + rust_unit: runs-on: ubuntu-latest steps: diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 8898b1015d..32cd21c93e 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -202,7 +202,7 @@ mod tests { moduli: &[0x3FFFFFFF000001], error1_variance: None, }); - + panic!("am I running?"); let public_key = generator .generate_public_key() .expect("failed to generate public key"); From 4b84118feaa62145993cd55d1e5a3ebb3164bb19 Mon Sep 17 00:00:00 2001 From: ryardley Date: Thu, 13 Nov 2025 21:34:16 +0000 Subject: [PATCH 04/36] tests were not running ensure they are --- .github/workflows/ci.yml | 26 +++++++++++----------- examples/CRISP/crates/zk-inputs/src/lib.rs | 1 - 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b1ecd571e1..80a873b575 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,19 +27,19 @@ permissions: packages: write jobs: - # crisp_rust_unit: - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v4 - # - # - name: Install Rust 1.86.0 - # uses: dtolnay/rust-toolchain@stable - # with: - # toolchain: 1.86.0 - # - # - name: Run CRISP Unit Tests - # working-directory: ./examples/CRISP - # run: "cargo test" + crisp_rust_unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust 1.86.0 + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.86.0 + + - name: Run CRISP Unit Tests + working-directory: ./examples/CRISP + run: "cargo test" rust_unit: runs-on: ubuntu-latest diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 32cd21c93e..29ab830f5a 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -202,7 +202,6 @@ mod tests { moduli: &[0x3FFFFFFF000001], error1_variance: None, }); - panic!("am I running?"); let public_key = generator .generate_public_key() .expect("failed to generate public key"); From 77ff11801d6672b4f8097a2ce18b1779f64d02fd Mon Sep 17 00:00:00 2001 From: ryardley Date: Thu, 13 Nov 2025 21:45:50 +0000 Subject: [PATCH 05/36] add solc --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80a873b575..3637a3bfe2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,12 @@ jobs: with: toolchain: 1.86.0 + - name: Install solc + run: | + sudo add-apt-repository ppa:ethereum/ethereum \ + && sudo apt-get update -y \ + && sudo apt-get install -y solc + - name: Run CRISP Unit Tests working-directory: ./examples/CRISP run: "cargo test" From 6eac56bb6a5d5a32fd98d5b1d68bbdf613d2b9dd Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 12:31:43 -0300 Subject: [PATCH 06/36] use e3_sdk over bfv_helpers --- examples/CRISP/Cargo.lock | 2 +- examples/CRISP/crates/zk-inputs/Cargo.toml | 2 +- examples/CRISP/crates/zk-inputs/src/lib.rs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 2a529e3785..fb1d35ec38 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -6533,7 +6533,7 @@ name = "zk-inputs" version = "0.1.0" dependencies = [ "bigint-poly", - "e3-bfv-helpers", + "e3-sdk", "eyre", "fhe", "fhe-math", diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index c9f42c9f40..2f084e282b 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] -e3-bfv-helpers.workspace = true +e3-sdk.workspace = true fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 29ab830f5a..3313b0b7e6 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -8,9 +8,9 @@ //! //! This crate contains the main logic for generating CRISP inputs for zero-knowledge proofs. -use e3_bfv_helpers::build_bfv_params_arc; -pub use e3_bfv_helpers::BfvParamSet; -use e3_bfv_helpers::BfvParams; +use e3_sdk::bfv_helpers::build_bfv_params_arc; +use e3_sdk::bfv_helpers::BfvParamSet; +use e3_sdk::bfv_helpers::BfvParams; use eyre::{Context, Result}; use fhe::bfv::BfvParameters; use fhe::bfv::Ciphertext; From 17060dd2cad91c8e62cb2673c9318c0f8a4b50b8 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 12:40:31 -0300 Subject: [PATCH 07/36] use 512 degree in circuit --- examples/CRISP/circuits/src/main.nr | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index bbfde33206..4022592658 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -18,27 +18,27 @@ use utils::{check_coefficient_values_with_balance, check_coefficient_zero}; fn main( // Ciphertext Addition Section. - prev_ct0is: [Polynomial<2048>; 1], - prev_ct1is: [Polynomial<2048>; 1], - sum_ct0is: [Polynomial<2048>; 1], - sum_ct1is: [Polynomial<2048>; 1], - sum_r0is: [Polynomial<2048>; 1], - sum_r1is: [Polynomial<2048>; 1], + prev_ct0is: [Polynomial<512>; 1], + prev_ct1is: [Polynomial<512>; 1], + sum_ct0is: [Polynomial<512>; 1], + sum_ct1is: [Polynomial<512>; 1], + sum_r0is: [Polynomial<512>; 1], + sum_r1is: [Polynomial<512>; 1], // Greco Section. - params: Params<2048, 1>, - pk0is: [Polynomial<2048>; 1], - pk1is: [Polynomial<2048>; 1], - ct0is: [Polynomial<2048>; 1], - ct1is: [Polynomial<2048>; 1], - u: Polynomial<2048>, - e0: Polynomial<2048>, - e1: Polynomial<2048>, - e0is: [Polynomial<2048>; 1], - k1: Polynomial<2048>, - r1is: [Polynomial<4095>; 1], - r2is: [Polynomial<2047>; 1], - p1is: [Polynomial<4095>; 1], - p2is: [Polynomial<2047>; 1], + params: Params<512, 1>, + pk0is: [Polynomial<512>; 1], + pk1is: [Polynomial<512>; 1], + ct0is: [Polynomial<512>; 1], + ct1is: [Polynomial<512>; 1], + u: Polynomial<512>, + e0: Polynomial<512>, + e1: Polynomial<512>, + e0is: [Polynomial<512>; 1], + k1: Polynomial<512>, + r1is: [Polynomial<1023>; 1], + r2is: [Polynomial<511>; 1], + p1is: [Polynomial<1023>; 1], + p2is: [Polynomial<511>; 1], // ECDSA Section. public_key_x: [u8; 32], public_key_y: [u8; 32], @@ -72,7 +72,7 @@ fn main( merkle_proof_siblings, ); - let greco: Greco<2048, 1, 54, 54, 5, 5, 5, 20, 20, 54, 16, 54> = Greco::new( + let greco: Greco<512, 1, 54, 54, 5, 5, 5, 20, 20, 54, 16, 54> = Greco::new( params, pk0is, pk1is, @@ -89,7 +89,7 @@ fn main( p2is, ); - let ct_add: CiphertextAddition<2048, 1, 54, 54, 54> = CiphertextAddition::new( + let ct_add: CiphertextAddition<512, 1, 54, 54, 54> = CiphertextAddition::new( params.crypto_params(), ct0is, ct1is, From 8d89d8c2af0df697ba6d3a70579739aea76aa123 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 17:41:12 +0000 Subject: [PATCH 08/36] revert package indirection --- examples/CRISP/Cargo.lock | 2 +- examples/CRISP/crates/zk-inputs/Cargo.toml | 2 +- examples/CRISP/crates/zk-inputs/src/lib.rs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index fb1d35ec38..2a529e3785 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -6533,7 +6533,7 @@ name = "zk-inputs" version = "0.1.0" dependencies = [ "bigint-poly", - "e3-sdk", + "e3-bfv-helpers", "eyre", "fhe", "fhe-math", diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index 2f084e282b..c9f42c9f40 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] -e3-sdk.workspace = true +e3-bfv-helpers.workspace = true fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 3313b0b7e6..bb11a1ceae 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -8,9 +8,9 @@ //! //! This crate contains the main logic for generating CRISP inputs for zero-knowledge proofs. -use e3_sdk::bfv_helpers::build_bfv_params_arc; -use e3_sdk::bfv_helpers::BfvParamSet; -use e3_sdk::bfv_helpers::BfvParams; +use e3_bfv_helpers::build_bfv_params_arc; +use e3_bfv_helpers::BfvParamSet; +use e3_bfv_helpers::BfvParams; use eyre::{Context, Result}; use fhe::bfv::BfvParameters; use fhe::bfv::Ciphertext; From da8021e0e805816d9fd5431e6a011e4a7e391617 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 17:55:26 +0000 Subject: [PATCH 09/36] use feature flags for sdk --- crates/sdk/Cargo.toml | 13 ++++++++++--- crates/sdk/src/lib.rs | 5 +++++ examples/CRISP/Cargo.lock | 2 +- examples/CRISP/crates/zk-inputs/Cargo.toml | 2 +- examples/CRISP/crates/zk-inputs/src/lib.rs | 6 +++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index e2c356a7fc..aa526f9a7b 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -7,6 +7,13 @@ description = "E3 - Enclave SDK" repository = "https://github.com/gnosisguild/enclave/crates/sdk" [dependencies] -e3-evm-helpers.workspace = true -e3-bfv-helpers.workspace = true -e3-indexer.workspace = true +e3-evm-helpers = { workspace = true, optional = true } +e3-bfv-helpers = { workspace = true, optional = true } +e3-indexer = { workspace = true, optional = true } + +[features] +default = ["full"] +full = ["evm-helpers", "bfv-helpers", "indexer"] +indexer = ["dep:e3-indexer"] +evm-helpers = ["dep:e3-evm-helpers"] +bfv-helpers = ["dep:e3-bfv-helpers"] diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index 9cbab3b6aa..291e77177a 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -4,6 +4,11 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. +#[cfg(feature = "bfv-helpers")] pub use e3_bfv_helpers as bfv_helpers; + +#[cfg(feature = "evm-helpers")] pub use e3_evm_helpers as evm_helpers; + +#[cfg(feature = "indexer")] pub use e3_indexer as indexer; diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 2a529e3785..fb1d35ec38 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -6533,7 +6533,7 @@ name = "zk-inputs" version = "0.1.0" dependencies = [ "bigint-poly", - "e3-bfv-helpers", + "e3-sdk", "eyre", "fhe", "fhe-math", diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index c9f42c9f40..ebbd94a653 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] -e3-bfv-helpers.workspace = true +e3-sdk = { workspace = true, features=["bfv-helpers"] } fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index bb11a1ceae..3313b0b7e6 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -8,9 +8,9 @@ //! //! This crate contains the main logic for generating CRISP inputs for zero-knowledge proofs. -use e3_bfv_helpers::build_bfv_params_arc; -use e3_bfv_helpers::BfvParamSet; -use e3_bfv_helpers::BfvParams; +use e3_sdk::bfv_helpers::build_bfv_params_arc; +use e3_sdk::bfv_helpers::BfvParamSet; +use e3_sdk::bfv_helpers::BfvParams; use eyre::{Context, Result}; use fhe::bfv::BfvParameters; use fhe::bfv::Ciphertext; From bfdbc0332045bd5de2c74d708e75dd443e64612f Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 17:57:32 +0000 Subject: [PATCH 10/36] use moduli 2 --- examples/CRISP/circuits/src/main.nr | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 4022592658..7bb873ebfa 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -18,27 +18,27 @@ use utils::{check_coefficient_values_with_balance, check_coefficient_zero}; fn main( // Ciphertext Addition Section. - prev_ct0is: [Polynomial<512>; 1], - prev_ct1is: [Polynomial<512>; 1], - sum_ct0is: [Polynomial<512>; 1], - sum_ct1is: [Polynomial<512>; 1], - sum_r0is: [Polynomial<512>; 1], - sum_r1is: [Polynomial<512>; 1], + prev_ct0is: [Polynomial<512>; 2], + prev_ct1is: [Polynomial<512>; 2], + sum_ct0is: [Polynomial<512>; 2], + sum_ct1is: [Polynomial<512>; 2], + sum_r0is: [Polynomial<512>; 2], + sum_r1is: [Polynomial<512>; 2], // Greco Section. - params: Params<512, 1>, - pk0is: [Polynomial<512>; 1], - pk1is: [Polynomial<512>; 1], - ct0is: [Polynomial<512>; 1], - ct1is: [Polynomial<512>; 1], + params: Params<512, 2>, + pk0is: [Polynomial<512>; 2], + pk1is: [Polynomial<512>; 2], + ct0is: [Polynomial<512>; 2], + ct1is: [Polynomial<512>; 2], u: Polynomial<512>, e0: Polynomial<512>, e1: Polynomial<512>, - e0is: [Polynomial<512>; 1], + e0is: [Polynomial<512>; 2], k1: Polynomial<512>, - r1is: [Polynomial<1023>; 1], - r2is: [Polynomial<511>; 1], - p1is: [Polynomial<1023>; 1], - p2is: [Polynomial<511>; 1], + r1is: [Polynomial<1023>; 2], + r2is: [Polynomial<511>; 2], + p1is: [Polynomial<1023>; 2], + p2is: [Polynomial<511>; 2], // ECDSA Section. public_key_x: [u8; 32], public_key_y: [u8; 32], From fba9ef87e7d84c73a9ed34a8b204e2cff7e40e19 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 17:59:07 +0000 Subject: [PATCH 11/36] update greco params --- examples/CRISP/circuits/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 7bb873ebfa..5470ef66a3 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -72,7 +72,7 @@ fn main( merkle_proof_siblings, ); - let greco: Greco<512, 1, 54, 54, 5, 5, 5, 20, 20, 54, 16, 54> = Greco::new( + let greco: Greco<512, 2, 36, 36, 2, 6, 6, 4, 10, 36, 10, 36> = Greco::new( params, pk0is, pk1is, From ab7b7b05f5a5f644655dc8c0bf3be166e0284507 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 18:00:19 +0000 Subject: [PATCH 12/36] update CRT bases param for CiphertextAddition --- examples/CRISP/circuits/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 5470ef66a3..1ae879eb80 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -89,7 +89,7 @@ fn main( p2is, ); - let ct_add: CiphertextAddition<512, 1, 54, 54, 54> = CiphertextAddition::new( + let ct_add: CiphertextAddition<512, 2, 54, 54, 54> = CiphertextAddition::new( params.crypto_params(), ct0is, ct1is, From 7f6c0ad0e84b90b44e53498814b44a22e4b56f06 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 18:02:47 +0000 Subject: [PATCH 13/36] update ct addition generics --- examples/CRISP/circuits/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 1ae879eb80..59499a1492 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -89,7 +89,7 @@ fn main( p2is, ); - let ct_add: CiphertextAddition<512, 2, 54, 54, 54> = CiphertextAddition::new( + let ct_add: CiphertextAddition<512, 2, 36, 36, 36> = CiphertextAddition::new( params.crypto_params(), ct0is, ct1is, From 9d09eaa7333819581740b8eea3f6cadc8f8c52e0 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 20:43:43 +0000 Subject: [PATCH 14/36] update features --- crates/sdk/Cargo.toml | 6 +++--- crates/sdk/src/lib.rs | 4 ++-- examples/CRISP/crates/zk-inputs/Cargo.toml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index aa526f9a7b..a021995a58 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -13,7 +13,7 @@ e3-indexer = { workspace = true, optional = true } [features] default = ["full"] -full = ["evm-helpers", "bfv-helpers", "indexer"] +full = ["evm", "bfv", "indexer"] indexer = ["dep:e3-indexer"] -evm-helpers = ["dep:e3-evm-helpers"] -bfv-helpers = ["dep:e3-bfv-helpers"] +evm = ["dep:e3-evm-helpers"] +bfv = ["dep:e3-bfv-helpers"] diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index 291e77177a..6dd328db42 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -4,10 +4,10 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. -#[cfg(feature = "bfv-helpers")] +#[cfg(feature = "bfv")] pub use e3_bfv_helpers as bfv_helpers; -#[cfg(feature = "evm-helpers")] +#[cfg(feature = "evm")] pub use e3_evm_helpers as evm_helpers; #[cfg(feature = "indexer")] diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index ebbd94a653..9b55e83e74 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] -e3-sdk = { workspace = true, features=["bfv-helpers"] } +e3-sdk = { workspace = true, features=["bfv"] } fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true From ebbbfcb8ecfd1551b8a19a0934674e121e74f764 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 20:55:30 +0000 Subject: [PATCH 15/36] fix default features --- examples/CRISP/Cargo.lock | 65 ---------------------- examples/CRISP/Cargo.toml | 2 +- examples/CRISP/crates/zk-inputs/Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 67 deletions(-) diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index fb1d35ec38..3825355f84 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -269,7 +269,6 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-network", - "alloy-node-bindings", "alloy-provider", "alloy-pubsub", "alloy-rpc-client", @@ -460,19 +459,6 @@ dependencies = [ "serde_with", ] -[[package]] -name = "alloy-hardforks" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" -dependencies = [ - "alloy-chains", - "alloy-eip2124", - "alloy-primitives", - "auto_impl", - "dyn-clone", -] - [[package]] name = "alloy-json-abi" version = "1.3.0" @@ -539,27 +525,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-node-bindings" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61321a0dbc084c2c9f2b07aa34f10db7ac80065c01721e567e5426d882c73de6" -dependencies = [ - "alloy-genesis", - "alloy-hardforks", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "alloy-signer-local", - "k256", - "rand 0.8.5", - "serde_json", - "tempfile", - "thiserror 2.0.17", - "tracing", - "url", -] - [[package]] name = "alloy-primitives" version = "1.3.0" @@ -599,7 +564,6 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", - "alloy-node-bindings", "alloy-primitives", "alloy-pubsub", "alloy-rpc-client", @@ -2278,33 +2242,6 @@ dependencies = [ "sha3", ] -[[package]] -name = "e3-evm-helpers" -version = "0.1.5" -dependencies = [ - "alloy", - "async-trait", - "eyre", - "futures 0.3.31", - "futures-util", - "once_cell", - "tokio", -] - -[[package]] -name = "e3-indexer" -version = "0.1.5" -dependencies = [ - "alloy", - "async-trait", - "bincode", - "e3-evm-helpers", - "eyre", - "serde", - "thiserror 1.0.69", - "tokio", -] - [[package]] name = "e3-program-server" version = "0.1.5" @@ -2325,8 +2262,6 @@ name = "e3-sdk" version = "0.1.5" dependencies = [ "e3-bfv-helpers", - "e3-evm-helpers", - "e3-indexer", ] [[package]] diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index 0a18fdc8d1..d5703cf61e 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -32,7 +32,7 @@ derivative = "=2.2.0" e3-compute-provider = { path = "../../crates/compute-provider" } e3-program-server = { path = "../../crates/program-server" } e3-bfv-helpers = { path = "../../crates/bfv-helpers" } -e3-sdk = { path = "../../crates/sdk" } +e3-sdk = { path = "../../crates/sdk", default-features = false } eyre = "=0.6.12" env_logger = "=0.11.8" hex = { version = "=0.4.3" } diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index 9b55e83e74..4f5dcbf906 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] -e3-sdk = { workspace = true, features=["bfv"] } +e3-sdk = { workspace = true, default-features = false, features=["bfv"] } fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true From 16ee645e44f03527f4e7996227272226f4af23c5 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 14 Nov 2025 21:01:34 +0000 Subject: [PATCH 16/36] get crisp tests passing --- examples/CRISP/Cargo.lock | 65 ++++++++++++++++++++++++++++++++ examples/CRISP/server/Cargo.toml | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 3825355f84..fb1d35ec38 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -269,6 +269,7 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-network", + "alloy-node-bindings", "alloy-provider", "alloy-pubsub", "alloy-rpc-client", @@ -459,6 +460,19 @@ dependencies = [ "serde_with", ] +[[package]] +name = "alloy-hardforks" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" +dependencies = [ + "alloy-chains", + "alloy-eip2124", + "alloy-primitives", + "auto_impl", + "dyn-clone", +] + [[package]] name = "alloy-json-abi" version = "1.3.0" @@ -525,6 +539,27 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-node-bindings" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61321a0dbc084c2c9f2b07aa34f10db7ac80065c01721e567e5426d882c73de6" +dependencies = [ + "alloy-genesis", + "alloy-hardforks", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "alloy-signer-local", + "k256", + "rand 0.8.5", + "serde_json", + "tempfile", + "thiserror 2.0.17", + "tracing", + "url", +] + [[package]] name = "alloy-primitives" version = "1.3.0" @@ -564,6 +599,7 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", + "alloy-node-bindings", "alloy-primitives", "alloy-pubsub", "alloy-rpc-client", @@ -2242,6 +2278,33 @@ dependencies = [ "sha3", ] +[[package]] +name = "e3-evm-helpers" +version = "0.1.5" +dependencies = [ + "alloy", + "async-trait", + "eyre", + "futures 0.3.31", + "futures-util", + "once_cell", + "tokio", +] + +[[package]] +name = "e3-indexer" +version = "0.1.5" +dependencies = [ + "alloy", + "async-trait", + "bincode", + "e3-evm-helpers", + "eyre", + "serde", + "thiserror 1.0.69", + "tokio", +] + [[package]] name = "e3-program-server" version = "0.1.5" @@ -2262,6 +2325,8 @@ name = "e3-sdk" version = "0.1.5" dependencies = [ "e3-bfv-helpers", + "e3-evm-helpers", + "e3-indexer", ] [[package]] diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 1d19f3b457..8fcad42634 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -43,7 +43,7 @@ lean-imt = "=0.1.2" # Local dependencies e3-compute-provider.workspace = true -e3-sdk.workspace = true +e3-sdk = { workspace = true, default-features = false, features=["full"] } # CLI and user interaction dialoguer = { version = "=0.11.0", features = ["fuzzy-select"] } From 9549dcae55ab10f3c19d1b670e74570637b8749d Mon Sep 17 00:00:00 2001 From: ryardley Date: Sat, 15 Nov 2025 16:55:45 +0000 Subject: [PATCH 17/36] update params in command --- examples/CRISP/server/src/cli/commands.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/server/src/cli/commands.rs b/examples/CRISP/server/src/cli/commands.rs index 5b509d033f..f3e0d36368 100644 --- a/examples/CRISP/server/src/cli/commands.rs +++ b/examples/CRISP/server/src/cli/commands.rs @@ -328,7 +328,7 @@ pub async fn decrypt_and_publish_result( } fn generate_bfv_parameters() -> Arc { - build_bfv_params_from_set_arc(BfvParams::InsecureSet2048_1032193_1.into()) + build_bfv_params_from_set_arc(BfvParams::InsecureSet512_10_1.into()) } fn generate_keys(params: &Arc) -> (SecretKey, PublicKey) { From bcd027f753d5687088756730ea4ddb7d253d86aa Mon Sep 17 00:00:00 2001 From: ryardley Date: Sat, 15 Nov 2025 17:56:16 +0000 Subject: [PATCH 18/36] use nonce provider --- crates/evm/src/helpers.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/evm/src/helpers.rs b/crates/evm/src/helpers.rs index d4f63eee5d..720599bbf4 100644 --- a/crates/evm/src/helpers.rs +++ b/crates/evm/src/helpers.rs @@ -9,7 +9,7 @@ use alloy::{ providers::{ fillers::{ BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, - WalletFiller, + SimpleNonceManager, WalletFiller, }, Identity, Provider, ProviderBuilder, RootProvider, }, @@ -99,10 +99,13 @@ pub type ConcreteReadProvider = FillProvider< pub type ConcreteWriteProvider = FillProvider< JoinFill< JoinFill< - Identity, - JoinFill>>, + JoinFill< + Identity, + JoinFill>>, + >, + WalletFiller, >, - WalletFiller, + NonceFiller, >, RootProvider, >; @@ -134,12 +137,14 @@ impl ProviderConfig { let provider = if self.rpc.is_websocket() { ProviderBuilder::new() .wallet(wallet) + .with_simple_nonce_management() .connect_ws(self.create_ws_connect()?) .await .context("Failed to connect to WebSocket RPC. Check if the node is running and URL is correct.")? } else { ProviderBuilder::new() .wallet(wallet) + .with_simple_nonce_management() .connect_client(self.create_http_client()?) }; From 1ecfd853a449f6bea09443647d0ec8b51c5e33f2 Mon Sep 17 00:00:00 2001 From: ryardley Date: Sat, 15 Nov 2025 18:04:06 +0000 Subject: [PATCH 19/36] fix types --- crates/evm/src/helpers.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/evm/src/helpers.rs b/crates/evm/src/helpers.rs index 720599bbf4..c655a33924 100644 --- a/crates/evm/src/helpers.rs +++ b/crates/evm/src/helpers.rs @@ -100,12 +100,12 @@ pub type ConcreteWriteProvider = FillProvider< JoinFill< JoinFill< JoinFill< - Identity, + alloy::providers::Identity, JoinFill>>, >, - WalletFiller, + NonceFiller, >, - NonceFiller, + WalletFiller, >, RootProvider, >; @@ -136,15 +136,15 @@ impl ProviderConfig { let provider = if self.rpc.is_websocket() { ProviderBuilder::new() - .wallet(wallet) .with_simple_nonce_management() + .wallet(wallet) .connect_ws(self.create_ws_connect()?) .await .context("Failed to connect to WebSocket RPC. Check if the node is running and URL is correct.")? } else { ProviderBuilder::new() - .wallet(wallet) .with_simple_nonce_management() + .wallet(wallet) .connect_client(self.create_http_client()?) }; From 7afceee2ee494054fcb7a698f564341a68a0a3f9 Mon Sep 17 00:00:00 2001 From: ryardley Date: Sat, 15 Nov 2025 19:03:16 +0000 Subject: [PATCH 20/36] revert restructure --- crates/evm/src/ciphernode_registry_sol.rs | 42 +++++++++-------------- crates/evm/src/enclave_sol_writer.rs | 19 +++++----- 2 files changed, 25 insertions(+), 36 deletions(-) diff --git a/crates/evm/src/ciphernode_registry_sol.rs b/crates/evm/src/ciphernode_registry_sol.rs index 2e12c08c08..06a722642d 100644 --- a/crates/evm/src/ciphernode_registry_sol.rs +++ b/crates/evm/src/ciphernode_registry_sol.rs @@ -448,17 +448,13 @@ pub async fn submit_ticket_to_registry( ) -> Result { let e3_id: U256 = e3_id.try_into()?; let ticket_number = U256::from(ticket_number); - let from_address = provider.provider().default_signer_address(); - let current_nonce = provider - .provider() - .get_transaction_count(from_address) - .pending() - .await?; let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let builder = contract + let receipt = contract .submitTicket(e3_id, ticket_number) - .nonce(current_nonce); - let receipt = builder.send().await?.get_receipt().await?; + .send() + .await? + .get_receipt() + .await?; Ok(receipt) } @@ -468,15 +464,13 @@ pub async fn finalize_committee_on_registry Result { let e3_id: U256 = e3_id.try_into()?; - let from_address = provider.provider().default_signer_address(); - let current_nonce = provider - .provider() - .get_transaction_count(from_address) - .pending() - .await?; let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let builder = contract.finalizeCommittee(e3_id).nonce(current_nonce); - let receipt = builder.send().await?.get_receipt().await?; + let receipt = contract + .finalizeCommittee(e3_id) + .send() + .await? + .get_receipt() + .await?; Ok(receipt) } @@ -493,17 +487,13 @@ pub async fn publish_committee_to_registry .into_iter() .filter_map(|node| node.parse().ok()) .collect(); - let from_address = provider.provider().default_signer_address(); - let current_nonce = provider - .provider() - .get_transaction_count(from_address) - .pending() - .await?; let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let builder = contract + let receipt = contract .publishCommittee(e3_id, nodes_vec, public_key) - .nonce(current_nonce); - let receipt = builder.send().await?.get_receipt().await?; + .send() + .await? + .get_receipt() + .await?; Ok(receipt) } diff --git a/crates/evm/src/enclave_sol_writer.rs b/crates/evm/src/enclave_sol_writer.rs index 66b6b3816c..d7a5ce1573 100644 --- a/crates/evm/src/enclave_sol_writer.rs +++ b/crates/evm/src/enclave_sol_writer.rs @@ -149,21 +149,20 @@ async fn publish_plaintext_output( let decrypted_output = Bytes::from(decrypted_output); let proof = Bytes::from(vec![1]); + // TODO: this is business logic as is specific to this event move this to core // Wait for ciphertext output transaction to propagate tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; - let from_address = provider.provider().default_signer_address(); - let current_nonce = provider - .provider() - .get_transaction_count(from_address) - .pending() - .await?; - let contract = IEnclave::new(contract_address, provider.provider()); info!("publishPlaintextOutput() e3_id={:?}", e3_id); - let builder = contract + + let receipt = contract .publishPlaintextOutput(e3_id, decrypted_output, proof) - .nonce(current_nonce); - let receipt = builder.send().await?.get_receipt().await?; + .send() + .await? + .get_receipt() + .await?; Ok(receipt) } + +fn is_send(_: &P) {} From 44ad5a2fb071876492f6c653ad4e89f16a017f87 Mon Sep 17 00:00:00 2001 From: ryardley Date: Sat, 15 Nov 2025 19:17:48 +0000 Subject: [PATCH 21/36] remove typetesting --- crates/evm/src/enclave_sol_writer.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/evm/src/enclave_sol_writer.rs b/crates/evm/src/enclave_sol_writer.rs index d7a5ce1573..788c4aba13 100644 --- a/crates/evm/src/enclave_sol_writer.rs +++ b/crates/evm/src/enclave_sol_writer.rs @@ -164,5 +164,3 @@ async fn publish_plaintext_output( .await?; Ok(receipt) } - -fn is_send(_: &P) {} From 25c26573e7511ea6d665ea90bcff24fc77d1c0c3 Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 20:18:15 +0000 Subject: [PATCH 22/36] revert ciphernode registry --- crates/evm/src/ciphernode_registry_sol.rs | 42 ++++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/crates/evm/src/ciphernode_registry_sol.rs b/crates/evm/src/ciphernode_registry_sol.rs index 06a722642d..2e12c08c08 100644 --- a/crates/evm/src/ciphernode_registry_sol.rs +++ b/crates/evm/src/ciphernode_registry_sol.rs @@ -448,13 +448,17 @@ pub async fn submit_ticket_to_registry( ) -> Result { let e3_id: U256 = e3_id.try_into()?; let ticket_number = U256::from(ticket_number); + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() + .await?; let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let receipt = contract + let builder = contract .submitTicket(e3_id, ticket_number) - .send() - .await? - .get_receipt() - .await?; + .nonce(current_nonce); + let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } @@ -464,13 +468,15 @@ pub async fn finalize_committee_on_registry Result { let e3_id: U256 = e3_id.try_into()?; - let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let receipt = contract - .finalizeCommittee(e3_id) - .send() - .await? - .get_receipt() + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() .await?; + let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); + let builder = contract.finalizeCommittee(e3_id).nonce(current_nonce); + let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } @@ -487,13 +493,17 @@ pub async fn publish_committee_to_registry .into_iter() .filter_map(|node| node.parse().ok()) .collect(); + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() + .await?; let contract = ICiphernodeRegistry::new(contract_address, provider.provider()); - let receipt = contract + let builder = contract .publishCommittee(e3_id, nodes_vec, public_key) - .send() - .await? - .get_receipt() - .await?; + .nonce(current_nonce); + let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } From e65158129face2a6f94c0a840ef6b993bcbe23a7 Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 20:19:53 +0000 Subject: [PATCH 23/36] revert enclave writer --- crates/evm/src/enclave_sol_writer.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/evm/src/enclave_sol_writer.rs b/crates/evm/src/enclave_sol_writer.rs index 788c4aba13..66b6b3816c 100644 --- a/crates/evm/src/enclave_sol_writer.rs +++ b/crates/evm/src/enclave_sol_writer.rs @@ -149,18 +149,21 @@ async fn publish_plaintext_output( let decrypted_output = Bytes::from(decrypted_output); let proof = Bytes::from(vec![1]); - // TODO: this is business logic as is specific to this event move this to core // Wait for ciphertext output transaction to propagate tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() + .await?; + let contract = IEnclave::new(contract_address, provider.provider()); info!("publishPlaintextOutput() e3_id={:?}", e3_id); - - let receipt = contract + let builder = contract .publishPlaintextOutput(e3_id, decrypted_output, proof) - .send() - .await? - .get_receipt() - .await?; + .nonce(current_nonce); + let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } From 15ebab588f28d8a07ff4845d449d497ceb3853eb Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 20:31:10 +0000 Subject: [PATCH 24/36] ensure params fit circuit --- examples/CRISP/circuits/src/main.nr | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 24fdef23f2..947546bd59 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -18,27 +18,27 @@ use utils::{check_coefficient_values_with_balance, check_coefficient_zero}; fn main( // Ciphertext Addition Section. - prev_ct0is: [Polynomial<2048>; 1], // todo: make this pub - prev_ct1is: [Polynomial<2048>; 1], // todo: make this pub - sum_ct0is: [Polynomial<2048>; 1], - sum_ct1is: [Polynomial<2048>; 1], - sum_r0is: [Polynomial<2048>; 1], - sum_r1is: [Polynomial<2048>; 1], + prev_ct0is: [Polynomial<512>; 2], // todo: make this pub + prev_ct1is: [Polynomial<512>; 2], // todo: make this pub + sum_ct0is: [Polynomial<512>; 2], + sum_ct1is: [Polynomial<512>; 2], + sum_r0is: [Polynomial<512>; 2], + sum_r1is: [Polynomial<512>; 2], // Greco Section. - params: Params<2048, 1>, // todo: make this pub - pk0is: [Polynomial<2048>; 1], - pk1is: [Polynomial<2048>; 1], - ct0is: [Polynomial<2048>; 1], - ct1is: [Polynomial<2048>; 1], - u: Polynomial<2048>, - e0: Polynomial<2048>, - e1: Polynomial<2048>, - e0is: [Polynomial<2048>; 1], - k1: Polynomial<2048>, - r1is: [Polynomial<4095>; 1], - r2is: [Polynomial<2047>; 1], - p1is: [Polynomial<4095>; 1], - p2is: [Polynomial<2047>; 1], + params: Params<512, 2>, // todo: make this pub + pk0is: [Polynomial<512>; 2], + pk1is: [Polynomial<512>; 2], + ct0is: [Polynomial<512>; 2], + ct1is: [Polynomial<512>; 2], + u: Polynomial<512>, + e0: Polynomial<512>, + e1: Polynomial<512>, + e0is: [Polynomial<512>; 2], + k1: Polynomial<512>, + r1is: [Polynomial<1023>; 2], + r2is: [Polynomial<511>; 2], + p1is: [Polynomial<1023>; 2], + p2is: [Polynomial<511>; 2], // ECDSA Section. public_key_x: [u8; 32], public_key_y: [u8; 32], From 7a04a84d6fcedad82e188114e043e6be6a7a1bc3 Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 21:03:48 +0000 Subject: [PATCH 25/36] udpate lock and install foundry for CRISP tests --- .github/workflows/ci.yml | 4 ++++ pnpm-lock.yaml | 45 ++++++++++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3637a3bfe2..3ceaffc87f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,10 @@ jobs: with: toolchain: 1.86.0 + # We must install foundry in order to be able to test anvil + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Install solc run: | sudo add-apt-repository ppa:ethereum/ethereum \ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1578f1f6c1..173b71f546 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,7 +144,7 @@ importers: version: 1.13.2 connectkit: specifier: ^1.9.0 - version: 1.9.1(@babel/core@7.28.5)(@tanstack/react-query@5.90.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)) + version: 1.9.1(@babel/core@7.28.5)(@tanstack/react-query@5.90.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)) ethers: specifier: ^6.12.0 version: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -177,7 +177,7 @@ importers: version: 4.3.2(typescript@5.8.3)(vite@5.4.21(@types/node@22.7.5)) wagmi: specifier: ^2.14.16 - version: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + version: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) devDependencies: '@tailwindcss/typography': specifier: ^0.5.12 @@ -562,7 +562,7 @@ importers: version: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) wagmi: specifier: ^2.14.16 - version: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + version: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) devDependencies: '@enclave-e3/config': specifier: workspace:* @@ -679,7 +679,7 @@ importers: version: 5.3.0 '@risc0/ethereum': specifier: file:lib/risc0-ethereum - version: file:templates/default/lib/risc0-ethereum + version: risc0-ethereum@file:templates/default/lib/risc0-ethereum '@types/chai': specifier: ^4.2.0 version: 4.3.20 @@ -2973,9 +2973,6 @@ packages: '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} - '@risc0/ethereum@file:templates/default/lib/risc0-ethereum': - resolution: {directory: templates/default/lib/risc0-ethereum, type: directory} - '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -8500,6 +8497,9 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} + risc0-ethereum@file:templates/default/lib/risc0-ethereum: + resolution: {directory: templates/default/lib/risc0-ethereum, type: directory} + robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} @@ -12851,8 +12851,6 @@ snapshots: - utf-8-validate - zod - '@risc0/ethereum@file:templates/default/lib/risc0-ethereum': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/plugin-inject@5.0.5(rollup@4.52.5)': @@ -15822,6 +15820,26 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 + connectkit@1.9.1(@babel/core@7.28.5)(@tanstack/react-query@5.90.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)): + dependencies: + '@tanstack/react-query': 5.90.6(react@18.3.1) + buffer: 6.0.3 + detect-browser: 5.3.0 + family: 0.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)) + framer-motion: 6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + qrcode: 1.5.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-state: 1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-use-measure: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + resize-observer-polyfill: 1.5.1 + styled-components: 5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + wagmi: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + transitivePeerDependencies: + - '@babel/core' + - react-is + connectkit@1.9.1(@babel/core@7.28.5)(@tanstack/react-query@5.90.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)): dependencies: '@tanstack/react-query': 5.90.6(react@18.3.1) @@ -16989,6 +17007,13 @@ snapshots: eyes@0.1.8: {} + family@0.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)): + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + wagmi: 2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + family@0.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.90.6)(@tanstack/react-query@5.90.6(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)): optionalDependencies: react: 18.3.1 @@ -20346,6 +20371,8 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 + risc0-ethereum@file:templates/default/lib/risc0-ethereum: {} + robust-predicates@3.0.2: {} rollup@4.52.5: From 723b4debf51a6baa50242494f2ed579f81152560 Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 22:22:42 +0000 Subject: [PATCH 26/36] wait longer --- examples/CRISP/test/crisp.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index 70f3eb3bdd..1250393140 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -127,7 +127,7 @@ test("CRISP smoke test", async ({ await page.locator('button:has-text("Cast Vote")').click(); log(`confirming MetaMask signature request...`); await metamask.confirmSignature(); - const WAIT = 300_000; + const WAIT = 500_000; log(`waiting for ${WAIT}ms...`); await page.waitForTimeout(WAIT); log(`clicking historic polls button...`); From e68025e997953f3659c03bd84a93b621041f1a1b Mon Sep 17 00:00:00 2001 From: ryardley Date: Mon, 17 Nov 2025 22:42:11 +0000 Subject: [PATCH 27/36] add verifier contract --- .../contracts/CRISPVerifier.sol | 92 +++++++++---------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/examples/CRISP/packages/crisp-contracts/contracts/CRISPVerifier.sol b/examples/CRISP/packages/crisp-contracts/contracts/CRISPVerifier.sol index 80d765b88f..03bc320a97 100644 --- a/examples/CRISP/packages/crisp-contracts/contracts/CRISPVerifier.sol +++ b/examples/CRISP/packages/crisp-contracts/contracts/CRISPVerifier.sol @@ -5,82 +5,82 @@ // or FITNESS FOR A PARTICULAR PURPOSE. pragma solidity >=0.8.21; -uint256 constant N = 524288; -uint256 constant LOG_N = 19; +uint256 constant N = 262144; +uint256 constant LOG_N = 18; uint256 constant NUMBER_OF_PUBLIC_INPUTS = 2; library HonkVerificationKey { function loadVerificationKey() internal pure returns (Honk.VerificationKey memory) { Honk.VerificationKey memory vk = Honk.VerificationKey({ - circuitSize: uint256(524288), - logCircuitSize: uint256(19), + circuitSize: uint256(262144), + logCircuitSize: uint256(18), publicInputsSize: uint256(2), ql: Honk.G1Point({ - x: uint256(0x118ad815dcaaf1a56f3e2bb81e72c1c6fec28dda580cfc7dc1c9f18b9ce04f4a), - y: uint256(0x2ea986b3b4656c2a34e3ec507f48fc94bd2ae7cbb54cc09055966b1ddf82c14f) + x: uint256(0x0d4a81fe29e51321f6e188fb872011b41a1a5b88aeebe115815c673a4b84ea73), + y: uint256(0x121babb1f6562b399e7d8f703e77dd12ec22149d625b2d446f7bfd840d9104aa) }), qr: Honk.G1Point({ - x: uint256(0x1eff288b6b832fa0601b2eba847a40f4130d4fc9d7045176331165408411722a), - y: uint256(0x05d740279424eaa5f1ef475c91faa0bddff9c53ce2a1905de8ee1cb1688cccd4) + x: uint256(0x236b322ee093dccf3425e5e5073d54bb9a459239bc4972044448038626be08aa), + y: uint256(0x201a32a3edacb146c84d733539f9f3feb1daa5778a297f6a84463961cbb5312d) }), qo: Honk.G1Point({ - x: uint256(0x288ddf249921808bd5c40c3db2260bf32b4fd873942037e18f9837f19628932d), - y: uint256(0x27bb5e03aed222c564c03dab98883a6e70bed4c51a642b1c13bef788003e0834) + x: uint256(0x192e409775f86ca55d138c9fc13f0fb5ab0556ed50b54c36d8e24756588f03df), + y: uint256(0x1a1b144946b95bacb469ed43fc6695495a1fb598d0b45de236d1d5b530bb0f38) }), q4: Honk.G1Point({ - x: uint256(0x0da8135ea1251a83d9f7baeb4fde65f110e764900c760274cdc606deda727cfd), - y: uint256(0x203f103e4b14fcb24976d2c05210fc3cc6ef1231d059bd3803264a30cd660ce0) + x: uint256(0x0d3b3ba7d12e9007c9fe8404360ca1d9b800841d1f8c0542e5768f7ecfd411c0), + y: uint256(0x012627b76c507f18dab2f1086dcb83df326b3d6355e6333232a610149e04084b) }), qm: Honk.G1Point({ - x: uint256(0x2dc67af66df99710729c064b2bbc5533eef5209b480b83ac22a6b558d7b12774), - y: uint256(0x2d2e5082c8b754eadfe985231d824991b69ee6baadfda0fcadd71e1d979cedd3) + x: uint256(0x1f7d981d0d1a6c07148bbcb3940674424c4decb50ea95df10eb82ba1a51ba70d), + y: uint256(0x1cb8bec5edc12596db6288ca3cc688b889c30af4a5bc5cd71fa5557e30d4252b) }), qc: Honk.G1Point({ - x: uint256(0x190facd1a2a06dbcd1050ca0197b31a62a0e337f50b2fed4d8922dbcf5b59a82), - y: uint256(0x055c88f56cb085878c6be12a6da01e43e63547c5d022416167fbdc394eeadf0d) + x: uint256(0x1ba62c6c1d5e17c1d40929a46b6addafed65ec99ace3660ae4091178c80c5449), + y: uint256(0x0c1702e2479196f0f4f0297e52854df65e731557152845caf540b566e11fe894) }), qArith: Honk.G1Point({ - x: uint256(0x2aa294a1cdd6d4f1742232efba3ce702bcd4e02545af5851209d7c32f1687072), - y: uint256(0x1e9bae0aac2f6a43ca1191f2fa64865ff3db937db207d834f77ce71b475ce24b) + x: uint256(0x2ccacdfb395f850922ffebbef7ec4b222bc194d8750f7774901672b7d75f64ca), + y: uint256(0x2ce12caa0e91988dc3d70643f789140eaeca39928fc33846857ea61168208f56) }), qDeltaRange: Honk.G1Point({ - x: uint256(0x1126fa181863c775f48afe0192d690f4f7d8082da38154659b5cf10ed0718a89), - y: uint256(0x273d50b0100f293f225de7c56c5418a32d3ba2a076ccb44b6c853ed7b0f622e8) + x: uint256(0x2d9209d62f9266d9888238c3034d15cde8ad5cc6fcd87ee9d06c03ec747fd929), + y: uint256(0x01cd76cd8fd89485c7b1deb67540fa43bc93b587467829f76eff469daea75944) }), qElliptic: Honk.G1Point({ - x: uint256(0x2c444b27242e32bb83792bed507771c19093a2789af4c0fda85e13669aaab4b0), - y: uint256(0x16a2386a8d4151e1798606966ee917834f6f67c24938aa367a007e02779b1a60) + x: uint256(0x2e33766731af3ff7768cf33d2c863cfc0efe291f57f1bec53d2c3c9f65f1fb71), + y: uint256(0x101a6f4d62bba878a17456723d08d05d9b58f39f8e0fbb8fd79dc7ef8ad8e111) }), qAux: Honk.G1Point({ - x: uint256(0x21db08ac00c89bb8e502038f99d37f80af55fee3d4e7ae6b2e74b0f7dc2596bc), - y: uint256(0x03f5ea27626a6fa42b9e7c4ebcc045c4af86be444fc09d993955e1f80ed7150e) + x: uint256(0x131a89a189e924538047b5589c7163f149da383c035f9fd09afef7e2ad6de4ae), + y: uint256(0x0d5df2b88d446fa1ddeee79afded1a9d124cd852125317e1ea6fe05e15f9370a) }), qLookup: Honk.G1Point({ x: uint256(0x255e9b4a2d66a47d22f21b21ccc7735af13f37baf30e7cfced18b6ddafc8cde5), y: uint256(0x09b915ecbc06a5805cda9165c383dacee8d6c40617ec9dc2e2aa0b576fb34917) }), qPoseidon2External: Honk.G1Point({ - x: uint256(0x0e447a7114a3174a08edc404850e5d6c3865e0ab2e487d6b1de37998fcdf6441), - y: uint256(0x26f68414b5f396a7973497b516a7732020607554c0009e4147b4da7d8ccd3893) + x: uint256(0x0003a0762bacb1aecfac12122edd7461aead19dad3dbb4b66b51abd5b86f7054), + y: uint256(0x1308e5ceb8304c2246027cd5cf974b3b3a6cf34acabb140855c58cb5c8f16849) }), qPoseidon2Internal: Honk.G1Point({ - x: uint256(0x0b1b4900e506b76af25cb10a130b116b40f92d29adb948d4867706f3c7855434), - y: uint256(0x155b0bb7e31f5126a2d090c1df1f8c235942868f8d520fb3f5dbd91822a7cb3c) + x: uint256(0x05f7b35529af89e788d50e2d62637084c31a6e74bbc67042a90706fc7e35cb48), + y: uint256(0x1d51cf8b6ffa03b318d0ccb4e226b28eac49b5df17925e0c2f32a3fc2caafeae) }), s1: Honk.G1Point({ - x: uint256(0x005f82ab77449f121bfe6dd1a569b7ecacbd30d4ffb073947dce0c281407de94), - y: uint256(0x228ea5044365dbdfc8206b9afca8f92f5f50699d1cf06f201270ac5ce985ffec) + x: uint256(0x214530944de85842b322e51ff2de0efec597c520acfe6d1fe272e5e3452229c0), + y: uint256(0x10081da07ca6ac083f510ccb1c3ac091882a1762a3909bca7a66d4ebcf1a2161) }), s2: Honk.G1Point({ - x: uint256(0x0d9e60b4bb55e464855f887ed938da6cd41939df84d958b8e378c3ccd199a9e4), - y: uint256(0x1195897e02c2db98c2744c5e56c07cdd17a62c92a7096ffe0bee415230b614f9) + x: uint256(0x1c07846224fd71e335dc3cb5c41f17abc639652fb981368302d1726425dff257), + y: uint256(0x0c66098b3772a51d6cc93a2f1b2d4f271cf6e904bc97ab7bd2e02114470bce5a) }), s3: Honk.G1Point({ - x: uint256(0x2e3e80ca9578d5f9a1b2ec033a375744715a35dcf4f1ed8b0d8840e7412a2012), - y: uint256(0x0f83887ef0089e2192177f611c29db6b53243e5144f02a787b60fc771ab34742) + x: uint256(0x019e52269f6c189d5da486b06450e0727172082502d24bef2f310b2e35ca7089), + y: uint256(0x052adaf878afdcc0e5af0ea1f2404d67011a200b198cdc87b82a73d76be4f18a) }), s4: Honk.G1Point({ - x: uint256(0x20481189ae2b294708b74c459ce471d700e7878df5785dbd6067ed6c7c7e2861), - y: uint256(0x1a432c75361053a9ee0a03da028ce71717d8252d6d11d3034ab3848537e6516c) + x: uint256(0x0bd39ef53453140569c95e4bf8dbcbc89da6f4f7f8f7195afba70b941f2e63fc), + y: uint256(0x175e7768c8a938c9df3e8251118669457d0d26a0a802d820373bb33899f8b20d) }), t1: Honk.G1Point({ x: uint256(0x161fe258de60ba620db6e59df1b7fd8b94ca15d3fc494e04b5ac396f222a1b6b), @@ -99,28 +99,28 @@ library HonkVerificationKey { y: uint256(0x2666cdf753a3f674e441aff59ff17dbf22d428bbfa89ee5e7a92b21bc42613fa) }), id1: Honk.G1Point({ - x: uint256(0x283571bfdd0dba0476afc47090fb467dce871cbf01c92d6a73e78b2f5e5b69bc), - y: uint256(0x241cb4d786d0f2b030e666bcba317b554a6eb6903e24a70b0f99692541c9453e) + x: uint256(0x141f652ca82f89d21a9fedf4d06d647cc16f8bbc9dd1ae284a36fa78663ced05), + y: uint256(0x0bf2a5d62e9a29c83f2e21130ba3f6936981d682f75d4f21ccdab70590faa30e) }), id2: Honk.G1Point({ - x: uint256(0x00592b972b5d4a104424616a477e29093601464b79e7f4f894054db2e816a094), - y: uint256(0x2d53a1d83717b68da903a348ba8919ce836bc2e8368fb5c8bab33e755d67eb55) + x: uint256(0x00fed1b10d2b31d4825faa9e63f3ef014355c93ec419a62e0a4fe5b00cdd88d6), + y: uint256(0x1cf62e72ad9b0384f5293f6f5a0ecc992712b4566ac4b0ed0f62a61032066063) }), id3: Honk.G1Point({ - x: uint256(0x2503637bf08354f75c866efd81dbc91923d5364077f5c7585f74782630c5fcd8), - y: uint256(0x074d878b9efa561face1ff22160351abda5f7458a42479ee10dcc175c04a2ae1) + x: uint256(0x16a82971758f188fd90094e1acae19b595b86e5e1f38d450e19e84ff3de92443), + y: uint256(0x1bc3d4546fbbf19900cb2ebaa9019d1fb9560b251094600a51706817b0e56bec) }), id4: Honk.G1Point({ - x: uint256(0x2fc9cb8caa3b282a361c73557381a42018d5e9150e19fe4e89b9212230177515), - y: uint256(0x2f3b69a2cf1e43183093a42a2a1b9ceaa92e2921e3c01ef7d2d2072124fcf57d) + x: uint256(0x1b73bd96d9b34de6f33c1daed6d96639a8f3f2a0390d4992429875b811bf20a0), + y: uint256(0x02e44a0a9186518054ed35d2f1fcd1dc33edbd8d43dab937bbe49fddccb8fd42) }), lagrangeFirst: Honk.G1Point({ x: uint256(0x0000000000000000000000000000000000000000000000000000000000000001), y: uint256(0x0000000000000000000000000000000000000000000000000000000000000002) }), lagrangeLast: Honk.G1Point({ - x: uint256(0x1066442d8b6c8e1b86cdbe7f2726021b3a63451cc6d6865dc63805e15f201032), - y: uint256(0x21a92a004929571d6c55b4ddf6657b09436f649f0c9fa082525d0d00c79a1bb9) + x: uint256(0x132bb33414e0a9997c0b8c1bce8e1acd531ee3d4fb1d0d4dfae36eb6ee7cd7bf), + y: uint256(0x073d022b02cdb9ad4f36da0f146c285a2d3dbca83ba375e2513863603c0b13b6) }) }); return vk; From 880cff0d9607702643e1534c93cd03c7c713b35a Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 10:45:14 -0300 Subject: [PATCH 28/36] revert timeout --- examples/CRISP/test/crisp.spec.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index 1250393140..0dca9fcbd9 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -15,7 +15,7 @@ async function runCliInit(): Promise { // Execute the command and wait for it to complete const output = execSync( "pnpm cli init --token-address 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 --balance-threshold 1000", - { encoding: "utf-8" } + { encoding: "utf-8" }, ); console.log("Command output:", output); const lines = output.trim().split("\n"); @@ -47,7 +47,7 @@ async function checkE3Activated(e3id: number): Promise { async function waitForE3Activation( e3id: number, - maxWaitMs: number = 300000 + maxWaitMs: number = 300000, ): Promise { const startTime = Date.now(); while (Date.now() - startTime < maxWaitMs) { @@ -66,7 +66,7 @@ const { expect } = test; async function ensureHomePageLoaded(page: Page) { return await expect(page.locator("h4")).toHaveText( - "Coercion-Resistant Impartial Selection Protocol" + "Coercion-Resistant Impartial Selection Protocol", ); } @@ -93,7 +93,7 @@ test("CRISP smoke test", async ({ context, metamaskPage, basicSetup.walletPassword, - extensionId + extensionId, ); log("runCliInit()..."); @@ -127,7 +127,7 @@ test("CRISP smoke test", async ({ await page.locator('button:has-text("Cast Vote")').click(); log(`confirming MetaMask signature request...`); await metamask.confirmSignature(); - const WAIT = 500_000; + const WAIT = 250_000; log(`waiting for ${WAIT}ms...`); await page.waitForTimeout(WAIT); log(`clicking historic polls button...`); @@ -136,11 +136,11 @@ test("CRISP smoke test", async ({ await expect(page.locator("h1")).toHaveText("Historic polls"); log(`asserting that result has 100% on the vote we clicked on...`); await expect( - page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-0'] h3") + page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-0'] h3"), ).toHaveText("100%"); log(`asserting that result has 0% on the vote we did not click on...`); await expect( - page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-1'] h3") + page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-1'] h3"), ).toHaveText("0%"); log("============================================"); From 0fdfa63c631a349175711e9e59446d261e16c5f2 Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 11:08:17 -0300 Subject: [PATCH 29/36] centralize crisp paramset --- crates/bfv-helpers/src/lib.rs | 10 ---------- examples/CRISP/Cargo.lock | 9 +++++++++ examples/CRISP/Cargo.toml | 4 +++- examples/CRISP/crates/crisp-constants/Cargo.toml | 10 ++++++++++ examples/CRISP/crates/crisp-constants/src/lib.rs | 7 +++++++ examples/CRISP/crates/zk-inputs/Cargo.toml | 1 + examples/CRISP/crates/zk-inputs/src/lib.rs | 3 ++- examples/CRISP/server/Cargo.toml | 1 + examples/CRISP/server/src/cli/commands.rs | 3 ++- 9 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 examples/CRISP/crates/crisp-constants/Cargo.toml create mode 100644 examples/CRISP/crates/crisp-constants/src/lib.rs diff --git a/crates/bfv-helpers/src/lib.rs b/crates/bfv-helpers/src/lib.rs index 23802f5669..9491887963 100644 --- a/crates/bfv-helpers/src/lib.rs +++ b/crates/bfv-helpers/src/lib.rs @@ -94,16 +94,6 @@ impl BfvParams { }) .collect() } - - pub fn to_tuple(self) -> (usize, u64, &'static [u64], Option<&'static str>) { - let set: BfvParamSet = self.into(); - ( - set.degree, - set.plaintext_modulus, - set.moduli, - set.error1_variance, - ) - } } impl From for BfvParamSet { diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 4f19a9a616..72614a8689 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -1962,6 +1962,7 @@ dependencies = [ "chrono", "clap", "config", + "crisp-constants", "derivative", "dialoguer", "dotenvy", @@ -1987,6 +1988,13 @@ dependencies = [ "tokio", ] +[[package]] +name = "crisp-constants" +version = "0.1.0" +dependencies = [ + "e3-sdk", +] + [[package]] name = "crisp-zk-inputs" version = "0.1.0" @@ -6543,6 +6551,7 @@ name = "zk-inputs" version = "0.1.0" dependencies = [ "bigint-poly", + "crisp-constants", "e3-sdk", "eyre", "fhe", diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index 4193dd327e..82acc35d76 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -5,7 +5,8 @@ members = [ "program", "crates/zk-inputs", "crates/zk-inputs-wasm", - "crates/evm_helpers" + "crates/evm_helpers", + "crates/crisp-constants" ] resolver = "3" @@ -18,6 +19,7 @@ repository = "https://github.com/gnosisguild/enclave" [workspace.dependencies] e3-user-program = { path = "./program" } +crisp-constants = { path = "./crates/crisp-constants" } alloy = { version = "=1.0.41", features = ["full", "rpc-types-eth"] } alloy-primitives = { version = "=1.3.0", default-features = false, features = [ diff --git a/examples/CRISP/crates/crisp-constants/Cargo.toml b/examples/CRISP/crates/crisp-constants/Cargo.toml new file mode 100644 index 0000000000..443b493f99 --- /dev/null +++ b/examples/CRISP/crates/crisp-constants/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "crisp-constants" +version.workspace = true +edition.workspace = true +license.workspace = true +description.workspace = true +repository.workspace = true + +[dependencies] +e3-sdk = { workspace = true, default-features = false, features=["bfv"] } diff --git a/examples/CRISP/crates/crisp-constants/src/lib.rs b/examples/CRISP/crates/crisp-constants/src/lib.rs new file mode 100644 index 0000000000..7904129ca6 --- /dev/null +++ b/examples/CRISP/crates/crisp-constants/src/lib.rs @@ -0,0 +1,7 @@ +use e3_sdk::bfv_helpers::{BfvParamSet, BfvParams}; + +// This could eventually be set here with an environment var once we allow for dynamic circuit selection. +pub fn get_default_paramset() -> BfvParamSet { + // NOTE: parameters are insecure. These parameters are mainly for testing and demonstration + BfvParams::InsecureSet512_10_1.into() +} diff --git a/examples/CRISP/crates/zk-inputs/Cargo.toml b/examples/CRISP/crates/zk-inputs/Cargo.toml index 4f5dcbf906..af6ba0ce03 100644 --- a/examples/CRISP/crates/zk-inputs/Cargo.toml +++ b/examples/CRISP/crates/zk-inputs/Cargo.toml @@ -8,6 +8,7 @@ description = "Core logic to pre-compute CRISP ZK inputs." [dependencies] e3-sdk = { workspace = true, default-features = false, features=["bfv"] } +crisp-constants.workspace = true fhe.workspace = true fhe-math.workspace = true fhe-traits.workspace = true diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index 3313b0b7e6..f436b0cca3 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -8,6 +8,7 @@ //! //! This crate contains the main logic for generating CRISP inputs for zero-knowledge proofs. +use crisp_constants::get_default_paramset; use e3_sdk::bfv_helpers::build_bfv_params_arc; use e3_sdk::bfv_helpers::BfvParamSet; use e3_sdk::bfv_helpers::BfvParams; @@ -59,7 +60,7 @@ impl ZKInputsGenerator { /// # Returns /// A new ZKInputsGenerator instance with default BFV parameters pub fn with_defaults() -> Self { - Self::from_set(BfvParams::InsecureSet512_10_1.into()) + Self::from_set(get_default_paramset()) } /// Generates CRISP ZK inputs for a vote encryption and addition operation. diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 242e366315..88eda16571 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -45,6 +45,7 @@ lean-imt = "=0.1.2" e3-compute-provider.workspace = true e3-sdk = { workspace = true, default-features = false, features=["full"] } evm-helpers = { path = "../crates/evm_helpers" } +crisp-constants.workspace = true # CLI and user interaction dialoguer = { version = "=0.11.0", features = ["fuzzy-select"] } diff --git a/examples/CRISP/server/src/cli/commands.rs b/examples/CRISP/server/src/cli/commands.rs index f3e0d36368..885268935b 100644 --- a/examples/CRISP/server/src/cli/commands.rs +++ b/examples/CRISP/server/src/cli/commands.rs @@ -4,6 +4,7 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. +use crisp_constants::get_default_paramset; use dialoguer::{theme::ColorfulTheme, FuzzySelect, Input}; use e3_sdk::bfv_helpers::BfvParams; use log::info; @@ -328,7 +329,7 @@ pub async fn decrypt_and_publish_result( } fn generate_bfv_parameters() -> Arc { - build_bfv_params_from_set_arc(BfvParams::InsecureSet512_10_1.into()) + build_bfv_params_from_set_arc(get_default_paramset()) } fn generate_keys(params: &Arc) -> (SecretKey, PublicKey) { From 564dff37777667745a310f010bc451d2111ed999 Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 11:21:24 -0300 Subject: [PATCH 30/36] BfvParams -> BfvParamSets --- crates/bfv-helpers/src/client.rs | 10 +++---- crates/bfv-helpers/src/lib.rs | 26 +++++++++---------- crates/test-helpers/src/bin/fake_encrypt.rs | 4 +-- crates/test-helpers/src/lib.rs | 4 +-- crates/wasm/src/lib.rs | 6 ++--- .../CRISP/crates/crisp-constants/src/lib.rs | 4 +-- examples/CRISP/crates/zk-inputs/src/lib.rs | 2 +- examples/CRISP/server/src/cli/commands.rs | 2 +- .../CRISP/server/src/server/routes/rounds.rs | 4 +-- templates/default/program/src/lib.rs | 4 +-- 10 files changed, 33 insertions(+), 33 deletions(-) diff --git a/crates/bfv-helpers/src/client.rs b/crates/bfv-helpers/src/client.rs index fbda448154..0c858bf63c 100644 --- a/crates/bfv-helpers/src/client.rs +++ b/crates/bfv-helpers/src/client.rs @@ -125,7 +125,7 @@ where #[cfg(test)] mod tests { - use crate::BfvParams; + use crate::BfvParamSets; use super::*; @@ -135,7 +135,7 @@ mod tests { use fhe::bfv::{Ciphertext, PublicKey, SecretKey}; use fhe_traits::{DeserializeParametrized, FheDecrypter, Serialize}; - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; @@ -160,7 +160,7 @@ mod tests { use fhe::bfv::{Ciphertext, PublicKey, SecretKey}; use fhe_traits::{DeserializeParametrized, FheDecrypter, Serialize}; - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; @@ -192,7 +192,7 @@ mod tests { use fhe::bfv::{Ciphertext, PublicKey, SecretKey}; use fhe_traits::{DeserializeParametrized, FheDecrypter, Serialize}; - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; @@ -223,7 +223,7 @@ mod tests { use fhe::bfv::{Ciphertext, PublicKey, SecretKey}; use fhe_traits::{DeserializeParametrized, FheDecrypter, Serialize}; - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; diff --git a/crates/bfv-helpers/src/lib.rs b/crates/bfv-helpers/src/lib.rs index 9491887963..40e4e653c9 100644 --- a/crates/bfv-helpers/src/lib.rs +++ b/crates/bfv-helpers/src/lib.rs @@ -34,7 +34,7 @@ type Result = std::result::Result; /// Predefined BFV parameters for common use cases /// Note that 10 is the default value for both error1 and error2 variance /// for both BFV and TRBFV (if not explicitly set). -pub enum BfvParams { +pub enum BfvParamSets { // List parameter strings and variants here // /// Standard BFV development parameters set (DO NOT USE IN PRODUCTION). @@ -77,17 +77,17 @@ pub enum BfvParams { } // Map for getters -impl BfvParams { +impl BfvParamSets { /// Return the given param set based on the input key &str. pub fn get_params_by_str(key: &str) -> Result { - key.parse::() + key.parse::() .map(|k| k.into()) .map_err(|_| Error::UnknownParamSet(key.to_string())) } /// List all the available parameter keys pub fn get_params_list() -> Vec { - BfvParams::iter() + BfvParamSets::iter() .map(|key| { let s: &'static str = key.into(); s.to_string() @@ -96,9 +96,9 @@ impl BfvParams { } } -impl From for BfvParamSet { - fn from(value: BfvParams) -> Self { - use BfvParams as B; +impl From for BfvParamSet { + fn from(value: BfvParamSets) -> Self { + use BfvParamSets as B; match value { // List each new parameter set here B::InsecureSet2048_1032193_1 => BfvParamSet { @@ -630,7 +630,7 @@ mod tests { #[test] fn test_params_constant() { - let param_set: BfvParamSet = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set: BfvParamSet = BfvParamSets::InsecureSet2048_1032193_1.into(); assert_eq!(param_set.degree, 2048); assert_eq!(param_set.plaintext_modulus, 1032193); assert_eq!(param_set.moduli, &[0x3FFFFFFF000001]); @@ -638,7 +638,7 @@ mod tests { #[test] fn test_params_function() { - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set(param_set); assert_eq!(params.degree(), param_set.degree); @@ -648,7 +648,7 @@ mod tests { #[test] fn test_params_arc_function() { - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); assert_eq!(params.degree(), param_set.degree); @@ -658,7 +658,7 @@ mod tests { #[test] fn test_params_encoding_roundtrip() { - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params(&encoded); @@ -672,7 +672,7 @@ mod tests { #[test] fn test_params_arc_encoding_roundtrip() { - let param_set = BfvParams::InsecureSet2048_1032193_1.into(); + let param_set = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params_arc(&encoded); @@ -686,7 +686,7 @@ mod tests { #[test] fn test_params_trbfv_encoding_roundtrip() { - let param_set = BfvParams::Set8192_1000_4.into(); + let param_set = BfvParamSets::Set8192_1000_4.into(); let params = build_bfv_params_from_set(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params(&encoded); diff --git a/crates/test-helpers/src/bin/fake_encrypt.rs b/crates/test-helpers/src/bin/fake_encrypt.rs index ab5d84d044..517d6340b9 100644 --- a/crates/test-helpers/src/bin/fake_encrypt.rs +++ b/crates/test-helpers/src/bin/fake_encrypt.rs @@ -8,7 +8,7 @@ use clap::Parser; use e3_sdk::bfv_helpers::build_bfv_params_from_set_arc; use e3_sdk::bfv_helpers::decode_bfv_params; -use e3_sdk::bfv_helpers::BfvParams; +use e3_sdk::bfv_helpers::BfvParamSets; use fhe::bfv::{Encoding, Plaintext, PublicKey}; use fhe_traits::{DeserializeParametrized, FheEncoder, FheEncrypter, Serialize}; use rand::SeedableRng; @@ -55,7 +55,7 @@ fn main() -> Result<(), Box> { let params = if let Some(params_bytes) = args.params { Arc::new(decode_bfv_params(¶ms_bytes.0)) } else { - build_bfv_params_from_set_arc(BfvParams::InsecureSet2048_1032193_1.into()) + build_bfv_params_from_set_arc(BfvParamSets::InsecureSet2048_1032193_1.into()) }; let pubkey = PublicKey::from_bytes(&bytes, ¶ms)?; let raw_plaintext = args.plaintext; diff --git a/crates/test-helpers/src/lib.rs b/crates/test-helpers/src/lib.rs index 07d8456e81..51a40ac77d 100644 --- a/crates/test-helpers/src/lib.rs +++ b/crates/test-helpers/src/lib.rs @@ -19,7 +19,7 @@ use e3_events::{ }; use e3_fhe::{create_crp, setup_crp_params, ParamsWithCrp}; use e3_net::{DocumentPublisher, NetEventTranslator}; -use e3_sdk::bfv_helpers::{BfvParamSet, BfvParams}; +use e3_sdk::bfv_helpers::{BfvParamSet, BfvParamSets}; use e3_utils::SharedRng; use fhe::bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey}; use fhe::mbfv::CommonRandomPoly; @@ -87,7 +87,7 @@ pub fn get_common_setup( let rng = create_shared_rng_from_u64(42); let seed = create_seed_from_u64(123); - let param_set = param_set.unwrap_or(BfvParams::InsecureSet2048_1032193_1.into()); + let param_set = param_set.unwrap_or(BfvParamSets::InsecureSet2048_1032193_1.into()); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; let moduli = param_set.moduli; diff --git a/crates/wasm/src/lib.rs b/crates/wasm/src/lib.rs index 0fc3e80afd..33dc069ce5 100644 --- a/crates/wasm/src/lib.rs +++ b/crates/wasm/src/lib.rs @@ -6,7 +6,7 @@ use e3_bfv_helpers::{ client::{bfv_encrypt, bfv_verifiable_encrypt}, - BfvParamSet, BfvParams, + BfvParamSet, BfvParamSets, }; use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; @@ -164,7 +164,7 @@ pub fn bfv_verifiable_encrypt_vector( /// Returns error if the parameter set name is invalid or serialization fails. pub fn get_bfv_params(name: &str) -> Result { let params = - BfvParams::get_params_by_str(name).map_err(|e| JsValue::from_str(&e.to_string()))?; + BfvParamSets::get_params_by_str(name).map_err(|e| JsValue::from_str(&e.to_string()))?; let js_params = BfvParamSetJs::from(¶ms); let serializer = serde_wasm_bindgen::Serializer::new().serialize_large_number_types_as_bigints(true); @@ -181,7 +181,7 @@ pub fn get_bfv_params(name: &str) -> Result { /// Includes both production-ready sets (e.g., "SET_8192_1000_4") and /// insecure sets for testing (prefixed with "INSECURE_"). pub fn get_bfv_params_list() -> Vec { - BfvParams::get_params_list() + BfvParamSets::get_params_list() } #[derive(Serialize, Deserialize)] diff --git a/examples/CRISP/crates/crisp-constants/src/lib.rs b/examples/CRISP/crates/crisp-constants/src/lib.rs index 7904129ca6..7df3168285 100644 --- a/examples/CRISP/crates/crisp-constants/src/lib.rs +++ b/examples/CRISP/crates/crisp-constants/src/lib.rs @@ -1,7 +1,7 @@ -use e3_sdk::bfv_helpers::{BfvParamSet, BfvParams}; +use e3_sdk::bfv_helpers::{BfvParamSet, BfvParamSets}; // This could eventually be set here with an environment var once we allow for dynamic circuit selection. pub fn get_default_paramset() -> BfvParamSet { // NOTE: parameters are insecure. These parameters are mainly for testing and demonstration - BfvParams::InsecureSet512_10_1.into() + BfvParamSets::InsecureSet512_10_1.into() } diff --git a/examples/CRISP/crates/zk-inputs/src/lib.rs b/examples/CRISP/crates/zk-inputs/src/lib.rs index f436b0cca3..a1feeae9dc 100644 --- a/examples/CRISP/crates/zk-inputs/src/lib.rs +++ b/examples/CRISP/crates/zk-inputs/src/lib.rs @@ -11,7 +11,7 @@ use crisp_constants::get_default_paramset; use e3_sdk::bfv_helpers::build_bfv_params_arc; use e3_sdk::bfv_helpers::BfvParamSet; -use e3_sdk::bfv_helpers::BfvParams; +use e3_sdk::bfv_helpers::BfvParamSets; use eyre::{Context, Result}; use fhe::bfv::BfvParameters; use fhe::bfv::Ciphertext; diff --git a/examples/CRISP/server/src/cli/commands.rs b/examples/CRISP/server/src/cli/commands.rs index 885268935b..befa0dafc0 100644 --- a/examples/CRISP/server/src/cli/commands.rs +++ b/examples/CRISP/server/src/cli/commands.rs @@ -6,7 +6,7 @@ use crisp_constants::get_default_paramset; use dialoguer::{theme::ColorfulTheme, FuzzySelect, Input}; -use e3_sdk::bfv_helpers::BfvParams; +use e3_sdk::bfv_helpers::BfvParamSets; use log::info; use num_bigint::BigUint; use reqwest::Client; diff --git a/examples/CRISP/server/src/server/routes/rounds.rs b/examples/CRISP/server/src/server/routes/rounds.rs index 9bea7d8d1f..b2b5dff9b6 100644 --- a/examples/CRISP/server/src/server/routes/rounds.rs +++ b/examples/CRISP/server/src/server/routes/rounds.rs @@ -13,7 +13,7 @@ use crate::server::models::{ use actix_web::{web, HttpResponse, Responder}; use alloy::primitives::{Address, Bytes, U256}; use chrono::Utc; -use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params, BfvParams}; +use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params, BfvParamSets}; use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite}; use log::{error, info}; use num_bigint::BigUint; @@ -180,7 +180,7 @@ pub async fn initialize_crisp_round( info!("Generating parameters..."); let params = encode_bfv_params(&build_bfv_params_from_set_arc( - BfvParams::InsecureSet2048_1032193_1.into(), + BfvParamSets::InsecureSet2048_1032193_1.into(), )); let token_address: Address = token_address.parse()?; diff --git a/templates/default/program/src/lib.rs b/templates/default/program/src/lib.rs index 27f1c29595..0bdd444763 100644 --- a/templates/default/program/src/lib.rs +++ b/templates/default/program/src/lib.rs @@ -27,7 +27,7 @@ mod tests { use super::*; use anyhow::Result; use e3_bfv_helpers::BfvParamSet; - use e3_bfv_helpers::{BfvParams, build_bfv_params_arc, encode_bfv_params}; + use e3_bfv_helpers::{BfvParamSets, build_bfv_params_arc, encode_bfv_params}; use fhe::bfv::{Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::FheEncoder; use fhe_traits::FheEncrypter; @@ -38,7 +38,7 @@ mod tests { fn test() -> Result<()> { let mut rng = thread_rng(); - let params_set: BfvParamSet = BfvParams::InsecureSet2048_1032193_1.into(); + let params_set: BfvParamSet = BfvParamSets::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_arc( params_set.degree, params_set.plaintext_modulus, From 598197f52dd3e7b4625c220f0aed8a195eee5a5c Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 11:25:40 -0300 Subject: [PATCH 31/36] add header --- examples/CRISP/crates/crisp-constants/src/lib.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/CRISP/crates/crisp-constants/src/lib.rs b/examples/CRISP/crates/crisp-constants/src/lib.rs index 7df3168285..bf31a6cb0c 100644 --- a/examples/CRISP/crates/crisp-constants/src/lib.rs +++ b/examples/CRISP/crates/crisp-constants/src/lib.rs @@ -1,3 +1,9 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. + use e3_sdk::bfv_helpers::{BfvParamSet, BfvParamSets}; // This could eventually be set here with an environment var once we allow for dynamic circuit selection. From 83d65e0d1c4414e7e13621ceedd6e67c20020467 Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 11:35:34 -0300 Subject: [PATCH 32/36] enable trbfv flag for crisp --- examples/CRISP/scripts/dev_cipher.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/scripts/dev_cipher.sh b/examples/CRISP/scripts/dev_cipher.sh index d9971a1f75..a057417f13 100755 --- a/examples/CRISP/scripts/dev_cipher.sh +++ b/examples/CRISP/scripts/dev_cipher.sh @@ -24,7 +24,7 @@ enclave wallet set --name cn5 --private-key "$PRIVATE_KEY_CN5" # using & instead of -d so that wait works below # TODO: add --experimental-trbfv after testing -enclave nodes up -v & +enclave nodes up -v --experimental-trbfv & sleep 2 From 8297d128e082822a9621e46eb87589371bfb1c9f Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 11:45:41 -0300 Subject: [PATCH 33/36] revert timout --- examples/CRISP/test/crisp.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index 0dca9fcbd9..5c1b306e29 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -127,7 +127,7 @@ test("CRISP smoke test", async ({ await page.locator('button:has-text("Cast Vote")').click(); log(`confirming MetaMask signature request...`); await metamask.confirmSignature(); - const WAIT = 250_000; + const WAIT = 300_000; log(`waiting for ${WAIT}ms...`); await page.waitForTimeout(WAIT); log(`clicking historic polls button...`); From 27d9d4d63c99ce6d6855c39ad080b953fab01643 Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 13:14:22 -0300 Subject: [PATCH 34/36] add more time --- examples/CRISP/test/crisp.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index 5c1b306e29..069a5258aa 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -127,7 +127,7 @@ test("CRISP smoke test", async ({ await page.locator('button:has-text("Cast Vote")').click(); log(`confirming MetaMask signature request...`); await metamask.confirmSignature(); - const WAIT = 300_000; + const WAIT = 310_000; log(`waiting for ${WAIT}ms...`); await page.waitForTimeout(WAIT); log(`clicking historic polls button...`); From a3386841a357e1b330e1a3191b6a4948a135c062 Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 13:18:46 -0300 Subject: [PATCH 35/36] unify configuration --- examples/CRISP/server/src/server/routes/rounds.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/CRISP/server/src/server/routes/rounds.rs b/examples/CRISP/server/src/server/routes/rounds.rs index b2b5dff9b6..e491339e1e 100644 --- a/examples/CRISP/server/src/server/routes/rounds.rs +++ b/examples/CRISP/server/src/server/routes/rounds.rs @@ -13,7 +13,8 @@ use crate::server::models::{ use actix_web::{web, HttpResponse, Responder}; use alloy::primitives::{Address, Bytes, U256}; use chrono::Utc; -use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params, BfvParamSets}; +use crisp_constants::get_default_paramset; +use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params}; use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite}; use log::{error, info}; use num_bigint::BigUint; @@ -179,9 +180,7 @@ pub async fn initialize_crisp_round( } info!("Generating parameters..."); - let params = encode_bfv_params(&build_bfv_params_from_set_arc( - BfvParamSets::InsecureSet2048_1032193_1.into(), - )); + let params = encode_bfv_params(&build_bfv_params_from_set_arc(get_default_paramset())); let token_address: Address = token_address.parse()?; let balance_threshold = BigUint::parse_bytes(balance_threshold.as_bytes(), 10) From fbc91255ad077bec7e31ca6ab1501c847545a51e Mon Sep 17 00:00:00 2001 From: ryardley Date: Tue, 18 Nov 2025 16:17:55 -0300 Subject: [PATCH 36/36] remove trbfv --- examples/CRISP/scripts/dev_cipher.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CRISP/scripts/dev_cipher.sh b/examples/CRISP/scripts/dev_cipher.sh index a057417f13..d9971a1f75 100755 --- a/examples/CRISP/scripts/dev_cipher.sh +++ b/examples/CRISP/scripts/dev_cipher.sh @@ -24,7 +24,7 @@ enclave wallet set --name cn5 --private-key "$PRIVATE_KEY_CN5" # using & instead of -d so that wait works below # TODO: add --experimental-trbfv after testing -enclave nodes up -v --experimental-trbfv & +enclave nodes up -v & sleep 2