diff --git a/Cargo.lock b/Cargo.lock index 4bbad663a..0ff56fb68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,7 +35,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -555,7 +555,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -564,7 +564,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -573,7 +573,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1099,7 +1099,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core 0.6.4", "serdect", "subtle", @@ -1112,7 +1112,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core 0.6.4", "typenum", ] @@ -1123,7 +1123,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array", + "generic-array 0.14.7", "subtle", ] @@ -1286,7 +1286,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1410,7 +1410,7 @@ dependencies = [ "crypto-bigint", "digest 0.10.7", "ff", - "generic-array", + "generic-array 0.14.7", "group", "hkdf", "pem-rfc7468", @@ -1810,6 +1810,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "generic-array" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +dependencies = [ + "typenum", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -2028,7 +2037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array", + "generic-array 0.14.7", "hmac 0.8.1", ] @@ -2267,7 +2276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -2696,7 +2705,7 @@ dependencies = [ "blstrs", "byteorder", "ff", - "generic-array", + "generic-array 0.14.7", "log", "pasta_curves", "serde", @@ -2734,8 +2743,9 @@ dependencies = [ [[package]] name = "nova-snark" -version = "0.34.0" -source = "git+https://github.com/RingsNetwork/Rings-Nova?rev=95a65981b009dceb2f6b0bf2fe706110ac4d2a0e#95a65981b009dceb2f6b0bf2fe706110ac4d2a0e" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39bc918340c90ebef9a7433ad60facd29831d1b2d3070e34d0f83cdc6728d193" dependencies = [ "bellpepper", "bellpepper-core", @@ -2744,7 +2754,7 @@ dependencies = [ "byteorder", "digest 0.10.7", "ff", - "generic-array", + "generic-array 1.0.0", "getrandom 0.2.12", "group", "halo2curves", @@ -4205,7 +4215,7 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", diff --git a/crates/node/src/backend/snark/browser.rs b/crates/node/src/backend/snark/browser.rs index 07124d033..dee57e759 100644 --- a/crates/node/src/backend/snark/browser.rs +++ b/crates/node/src/backend/snark/browser.rs @@ -270,7 +270,7 @@ pub fn bigint_to_field(v: js_sys::BigInt, field: SupportedPrimeField) -> Result< } } SupportedPrimeField::Bn256KZG => { - type F = ::Scalar; + type F = ::Scalar; Field { value: FieldEnum::Bn256KZG(bigint2ff::(v)?), } diff --git a/crates/node/src/backend/snark/mod.rs b/crates/node/src/backend/snark/mod.rs index b84bd4a25..09a5e9f10 100644 --- a/crates/node/src/backend/snark/mod.rs +++ b/crates/node/src/backend/snark/mod.rs @@ -142,7 +142,7 @@ pub enum CircuitGenerator { /// Circuit based on pallas curve Pallas(circuit::WasmCircuitGenerator<::Scalar>), /// Circuit based on KZG bn256 - Bn256KZG(circuit::WasmCircuitGenerator<::Scalar>), + Bn256KZG(circuit::WasmCircuitGenerator<::Scalar>), } /// Supported prime field @@ -220,7 +220,7 @@ pub enum CircuitEnum { /// Based on pallas curve Pallas(circuit::Circuit<::Scalar>), /// based on bn256 and KZG - Bn256KZG(circuit::Circuit<::Scalar>), + Bn256KZG(circuit::Circuit<::Scalar>), } #[wasm_export] @@ -251,7 +251,7 @@ pub enum FieldEnum { /// field of pallas curve Pallas(::Scalar), /// bn256 with kzg - Bn256KZG(::Scalar), + Bn256KZG(::Scalar), } #[wasm_export] @@ -266,9 +266,7 @@ impl Field { value: FieldEnum::Pallas(::Scalar::from(v)), }, SupportedPrimeField::Bn256KZG => Self { - value: FieldEnum::Bn256KZG( - ::Scalar::from(v), - ), + value: FieldEnum::Bn256KZG(::Scalar::from(v)), }, } } @@ -316,7 +314,7 @@ impl SNARKTaskBuilder { }) } SupportedPrimeField::Bn256KZG => { - type F = ::Scalar; + type F = ::Scalar; let r1cs = r1cs::load_r1cs::(r1cs::Path::Local(r1cs_path), r1cs::Format::Bin).await?; let witness_calculator = @@ -365,7 +363,7 @@ impl SNARKTaskBuilder { }) } SupportedPrimeField::Bn256KZG => { - type F = ::Scalar; + type F = ::Scalar; let r1cs = r1cs::load_r1cs::(r1cs::Path::Remote(r1cs_path), r1cs::Format::Bin).await?; let witness_calculator = @@ -495,7 +493,7 @@ impl SNARKTaskBuilder { Ok(circuits) } CircuitGenerator::Bn256KZG(g) => { - type F = ::Scalar; + type F = ::Scalar; let input: circuit::Input = public_input .into_iter() @@ -573,7 +571,7 @@ impl SNARKTaskBuilder { }) .collect(); let inputs = circuits[0].get_public_inputs(); - let pp = SNARK::::gen_pp::(circuits[0].clone()); + let pp = SNARK::::gen_pp::(circuits[0].clone())?; let snark = SNARK::::new(&circuits[0], &pp, &inputs, &vec![ ::Scalar::from(0), ])?; @@ -602,7 +600,7 @@ impl SNARKTaskBuilder { }) .collect(); let inputs = circuits[0].get_public_inputs(); - let pp = SNARK::::gen_pp::(circuits[0].clone()); + let pp = SNARK::::gen_pp::(circuits[0].clone())?; let snark = SNARK::::new(&circuits[0], &pp, &inputs, &vec![ ::Scalar::from(0), ])?; @@ -613,7 +611,7 @@ impl SNARKTaskBuilder { }) } CircuitEnum::Bn256KZG(_) => { - type E1 = provider::hyperkzg::Bn256EngineKZG; + type E1 = provider::Bn256EngineKZG; type E2 = provider::GrumpkinEngine; type EE1 = hyperkzg::EvaluationEngine; type EE2 = ipa_pc::EvaluationEngine; @@ -630,7 +628,7 @@ impl SNARKTaskBuilder { }) .collect(); let inputs = circuits[0].get_public_inputs(); - let pp = SNARK::::gen_pp::(circuits[0].clone()); + let pp = SNARK::::gen_pp::(circuits[0].clone())?; let snark = SNARK::::new(&circuits[0], &pp, &inputs, &vec![ ::Scalar::from(0), ])?; @@ -816,7 +814,7 @@ impl SNARKBehaviour { Ok(SNARKVerifyTask::PallasVasta(serde_json::to_string(&proof)?)) } SNARKProofTask::Bn256KZGGrumpkin(s) => { - type E1 = provider::hyperkzg::Bn256EngineKZG; + type E1 = provider::Bn256EngineKZG; type E2 = provider::GrumpkinEngine; type EE1 = hyperkzg::EvaluationEngine; type EE2 = ipa_pc::EvaluationEngine; @@ -878,7 +876,7 @@ impl SNARKBehaviour { } } SNARKVerifyTask::Bn256KZGGrumpkin(p) => { - type E1 = provider::hyperkzg::Bn256EngineKZG; + type E1 = provider::Bn256EngineKZG; type E2 = provider::GrumpkinEngine; type EE1 = hyperkzg::EvaluationEngine; type EE2 = ipa_pc::EvaluationEngine; @@ -910,12 +908,8 @@ impl From> for SNA } } -impl From> - for SNARKProofTask -{ - fn from( - snark: SNARKGenerator, - ) -> Self { +impl From> for SNARKProofTask { + fn from(snark: SNARKGenerator) -> Self { Self::Bn256KZGGrumpkin(snark) } } diff --git a/crates/node/src/backend/types/snark.rs b/crates/node/src/backend/types/snark.rs index bee37b6a0..62bb10906 100644 --- a/crates/node/src/backend/types/snark.rs +++ b/crates/node/src/backend/types/snark.rs @@ -1,6 +1,6 @@ //! Backend message types for SNARK //! ============================== -use rings_snark::prelude::nova::provider::hyperkzg::Bn256EngineKZG; +use rings_snark::prelude::nova::provider::Bn256EngineKZG; use rings_snark::prelude::nova::provider::GrumpkinEngine; use rings_snark::prelude::nova::provider::PallasEngine; use rings_snark::prelude::nova::provider::VestaEngine; diff --git a/crates/snark/Cargo.toml b/crates/snark/Cargo.toml index 3fa60023c..56c86ea3b 100644 --- a/crates/snark/Cargo.toml +++ b/crates/snark/Cargo.toml @@ -13,7 +13,7 @@ llvm = ["wasmer-compiler-llvm"] [dependencies] # https://github.com/microsoft/Nova -nova-snark = { git = "https://github.com/RingsNetwork/Rings-Nova", version = "0.34", rev = "95a65981b009dceb2f6b0bf2fe706110ac4d2a0e" } +# nova-snark = { git = "https://github.com/RingsNetwork/Rings-Nova", version = "0.34", rev = "95a65981b009dceb2f6b0bf2fe706110ac4d2a0e" } ff = { version = "0.13", features = ["derive"] } @@ -40,10 +40,12 @@ thiserror = "1" eyre = "0.6.11" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] +nova-snark = { version = "0.35" } wasmer = "4.2.5" wasmer-compiler-llvm = { version = "4.1.1", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] +nova-snark = { version = "0.35", features = ["portable"], default-features = false } wasmer = { version = "4.2.5", features = ["js-default"], default-features = false } [target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] diff --git a/crates/snark/src/snark/mod.rs b/crates/snark/src/snark/mod.rs index a618c981a..5afc6a68c 100644 --- a/crates/snark/src/snark/mod.rs +++ b/crates/snark/src/snark/mod.rs @@ -140,20 +140,20 @@ where { /// Create public params #[inline] - pub fn gen_pp(circom: Circuit) -> PublicParams + pub fn gen_pp(circom: Circuit) -> Result> where S1: RelaxedR1CSSNARKTrait, S2: RelaxedR1CSSNARKTrait, { let circuit_primary = circom.clone(); let circuit_secondary = TrivialCircuit::::default(); - nova::PublicParams::setup( + let pp = nova::PublicParams::setup( &circuit_primary, &circuit_secondary, S1::ck_floor().deref(), S2::ck_floor().deref(), - ) - .into() + )?; + Ok(pp.into()) } /// Create public params with circom, and public input diff --git a/crates/snark/src/tests/native/test_snark.rs b/crates/snark/src/tests/native/test_snark.rs index 170edae61..2b927d9f4 100644 --- a/crates/snark/src/tests/native/test_snark.rs +++ b/crates/snark/src/tests/native/test_snark.rs @@ -67,7 +67,7 @@ pub async fn test_calcu_sha256_recursive_snark() -> Result<()> { assert_eq!(recursive_circuits.len(), round); - let pp = snark::SNARK::::gen_pp::(public_circuit.clone()); + let pp = snark::SNARK::::gen_pp::(public_circuit.clone()).unwrap(); print_mem_status(Some("after gen pp")); let mut rec_snark = snark::SNARK::::new( &recursive_circuits[0], @@ -160,7 +160,7 @@ pub async fn test_calcu_bn256_recursive_snark_with_private_input() -> Result<()> assert_eq!(recursive_circuits.len(), 3); // init pp with ouptn inputs - let pp = snark::SNARK::::gen_pp::(circuit_0.clone()); + let pp = snark::SNARK::::gen_pp::(circuit_0.clone()).unwrap(); let mut rec_snark_iter = snark::SNARK::::new( &recursive_circuits[0].clone(), &pp, diff --git a/examples/snark/bn256.rs b/examples/snark/bn256.rs index a66153c1e..fc649c559 100644 --- a/examples/snark/bn256.rs +++ b/examples/snark/bn256.rs @@ -54,7 +54,7 @@ async fn main() { assert_eq!(recursive_circuits.len(), 3); // init pp with ouptn inputs - let pp = snark::SNARK::::gen_pp::(circuit_0.clone()); + let pp = snark::SNARK::::gen_pp::(circuit_0.clone()).unwrap(); let mut rec_snark_iter = snark::SNARK::::new( &recursive_circuits[0].clone(), &pp, diff --git a/examples/snark/merkle_tree.rs b/examples/snark/merkle_tree.rs index bb2e74034..f21e9a750 100644 --- a/examples/snark/merkle_tree.rs +++ b/examples/snark/merkle_tree.rs @@ -65,7 +65,7 @@ pub async fn merkle_tree_path_proof() { let start = Instant::now(); // init pp with ouptn inputs - let pp = snark::SNARK::::gen_pp::(circuit_0.clone()); + let pp = snark::SNARK::::gen_pp::(circuit_0.clone()).unwrap(); println!("gen public parasm, took {:?} ", start.elapsed()); let start = Instant::now();