Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
3c910da
feat: use bfv-helpers in zkinputsgenerator
ryardley Nov 13, 2025
cd9fed0
remove redundant test
Nov 13, 2025
60d8e56
see if tests are actually running
Nov 13, 2025
4b84118
tests were not running ensure they are
Nov 13, 2025
77ff118
add solc
Nov 13, 2025
6eac56b
use e3_sdk over bfv_helpers
ryardley Nov 14, 2025
17060dd
use 512 degree in circuit
ryardley Nov 14, 2025
8d89d8c
revert package indirection
Nov 14, 2025
da8021e
use feature flags for sdk
Nov 14, 2025
bfdbc03
use moduli 2
Nov 14, 2025
fba9ef8
update greco params
Nov 14, 2025
ab7b7b0
update CRT bases param for CiphertextAddition
Nov 14, 2025
7f6c0ad
update ct addition generics
Nov 14, 2025
9d09eaa
update features
Nov 14, 2025
ebbbfcb
fix default features
Nov 14, 2025
16ee645
get crisp tests passing
Nov 14, 2025
9549dca
update params in command
Nov 15, 2025
bcd027f
use nonce provider
Nov 15, 2025
1ecfd85
fix types
Nov 15, 2025
7afceee
revert restructure
Nov 15, 2025
44ad5a2
remove typetesting
Nov 15, 2025
5778a77
Merge branch 'main' into ry/crisp-use-params
ryardley Nov 16, 2025
25c2657
revert ciphernode registry
Nov 17, 2025
e651581
revert enclave writer
Nov 17, 2025
41c8a86
Merge branch 'main' into ry/crisp-use-params
ryardley Nov 17, 2025
15ebab5
ensure params fit circuit
Nov 17, 2025
7a04a84
udpate lock and install foundry for CRISP tests
Nov 17, 2025
723b4de
wait longer
Nov 17, 2025
e68025e
add verifier contract
Nov 17, 2025
880cff0
revert timeout
ryardley Nov 18, 2025
0fdfa63
centralize crisp paramset
ryardley Nov 18, 2025
564dff3
BfvParams -> BfvParamSets
ryardley Nov 18, 2025
598197f
add header
ryardley Nov 18, 2025
83d65e0
enable trbfv flag for crisp
ryardley Nov 18, 2025
8297d12
revert timout
ryardley Nov 18, 2025
27d9d4d
add more time
ryardley Nov 18, 2025
a338684
unify configuration
ryardley Nov 18, 2025
fbc9125
remove trbfv
ryardley Nov 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,30 @@ 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

# 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 \
&& sudo apt-get update -y \
&& sudo apt-get install -y solc

- name: Run CRISP Unit Tests
working-directory: ./examples/CRISP
run: "cargo test"

rust_unit:
runs-on: ubuntu-latest
steps:
Expand Down
10 changes: 5 additions & 5 deletions crates/bfv-helpers/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ where

#[cfg(test)]
mod tests {
use crate::BfvParams;
use crate::BfvParamSets;

use super::*;

Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
38 changes: 25 additions & 13 deletions crates/bfv-helpers/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type Result<T> = std::result::Result<T, Error>;
/// 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).
Expand Down Expand Up @@ -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<BfvParamSet> {
key.parse::<BfvParams>()
key.parse::<BfvParamSets>()
.map(|k| k.into())
.map_err(|_| Error::UnknownParamSet(key.to_string()))
}

/// List all the available parameter keys
pub fn get_params_list() -> Vec<String> {
BfvParams::iter()
BfvParamSets::iter()
.map(|key| {
let s: &'static str = key.into();
s.to_string()
Expand All @@ -96,9 +96,9 @@ impl BfvParams {
}
}

impl From<BfvParams> for BfvParamSet {
fn from(value: BfvParams) -> Self {
use BfvParams as B;
impl From<BfvParamSets> for BfvParamSet {
fn from(value: BfvParamSets) -> Self {
use BfvParamSets as B;
match value {
// List each new parameter set here
B::InsecureSet2048_1032193_1 => BfvParamSet {
Expand Down Expand Up @@ -158,6 +158,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<BfvParameters> struct
pub fn build_arc(self) -> Arc<BfvParameters> {
Arc::new(self.build())
}
}

/// Builds BFV parameters from a `BfvParamSet`.
///
/// This is a convenience function that consumes a `BfvParamSet` struct
Expand Down Expand Up @@ -618,15 +630,15 @@ 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]);
}

#[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);
Expand All @@ -636,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);
Expand All @@ -646,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(&params);
let decoded = decode_bfv_params(&encoded);
Expand All @@ -660,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(&params);
let decoded = decode_bfv_params_arc(&encoded);
Expand All @@ -674,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(&params);
let decoded = decode_bfv_params(&encoded);
Expand Down
11 changes: 8 additions & 3 deletions crates/evm/src/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use alloy::{
providers::{
fillers::{
BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller,
WalletFiller,
SimpleNonceManager, WalletFiller,
},
Identity, Provider, ProviderBuilder, RootProvider,
},
Expand Down Expand Up @@ -99,8 +99,11 @@ pub type ConcreteReadProvider = FillProvider<
pub type ConcreteWriteProvider = FillProvider<
JoinFill<
JoinFill<
Identity,
JoinFill<GasFiller, JoinFill<BlobGasFiller, JoinFill<NonceFiller, ChainIdFiller>>>,
JoinFill<
alloy::providers::Identity,
JoinFill<GasFiller, JoinFill<BlobGasFiller, JoinFill<NonceFiller, ChainIdFiller>>>,
>,
NonceFiller<SimpleNonceManager>,
>,
WalletFiller<EthereumWallet>,
>,
Expand Down Expand Up @@ -133,12 +136,14 @@ impl ProviderConfig {

let provider = if self.rpc.is_websocket() {
ProviderBuilder::new()
.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()
.with_simple_nonce_management()
.wallet(wallet)
.connect_client(self.create_http_client()?)
};
Expand Down
13 changes: 10 additions & 3 deletions crates/sdk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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", "bfv", "indexer"]
indexer = ["dep:e3-indexer"]
evm = ["dep:e3-evm-helpers"]
bfv = ["dep:e3-bfv-helpers"]
5 changes: 5 additions & 0 deletions crates/sdk/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
// without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE.

#[cfg(feature = "bfv")]
pub use e3_bfv_helpers as bfv_helpers;

#[cfg(feature = "evm")]
pub use e3_evm_helpers as evm_helpers;

#[cfg(feature = "indexer")]
pub use e3_indexer as indexer;
4 changes: 2 additions & 2 deletions crates/test-helpers/src/bin/fake_encrypt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -55,7 +55,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let params = if let Some(params_bytes) = args.params {
Arc::new(decode_bfv_params(&params_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, &params)?;
let raw_plaintext = args.plaintext;
Expand Down
4 changes: 2 additions & 2 deletions crates/test-helpers/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions crates/wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand Down Expand Up @@ -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<JsValue, JsValue> {
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(&params);
let serializer =
serde_wasm_bindgen::Serializer::new().serialize_large_number_types_as_bigints(true);
Expand All @@ -181,7 +181,7 @@ pub fn get_bfv_params(name: &str) -> Result<JsValue, JsValue> {
/// 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<String> {
BfvParams::get_params_list()
BfvParamSets::get_params_list()
}

#[derive(Serialize, Deserialize)]
Expand Down
10 changes: 10 additions & 0 deletions examples/CRISP/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions examples/CRISP/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ members = [
"program",
"crates/zk-inputs",
"crates/zk-inputs-wasm",
"crates/evm_helpers"
"crates/evm_helpers",
"crates/crisp-constants"
]
resolver = "3"

Expand All @@ -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 = [
Expand All @@ -34,7 +36,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" }
Expand Down
Loading
Loading