diff --git a/Cargo.lock b/Cargo.lock index 3875df1f07..67d262beae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1980,6 +1980,7 @@ dependencies = [ "snarkvm-utilities", "thiserror", "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -2258,6 +2259,7 @@ dependencies = [ "snarkvm-fields", "snarkvm-parameters", "snarkvm-utilities", + "web-sys", ] [[package]] @@ -2398,6 +2400,7 @@ dependencies = [ "snarkvm-fields", "snarkvm-utilities", "thiserror", + "web-sys", ] [[package]] @@ -2414,6 +2417,7 @@ dependencies = [ "serde", "snarkvm-utilities", "thiserror", + "web-sys", ] [[package]] @@ -2443,7 +2447,9 @@ dependencies = [ "snarkvm-synthesizer", "snarkvm-utilities", "thiserror", + "wasm-bindgen", "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -2487,6 +2493,7 @@ dependencies = [ "snarkvm-fields", "snarkvm-utilities", "tracing", + "web-sys", ] [[package]] @@ -2523,9 +2530,11 @@ dependencies = [ "getrandom", "rand", "serde", + "snarkvm-circuit", "snarkvm-console", "snarkvm-curves", "snarkvm-fields", + "snarkvm-synthesizer", "snarkvm-utilities", "wasm-bindgen", "wasm-bindgen-test", @@ -2946,9 +2955,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "serde", @@ -2958,9 +2967,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", @@ -2985,9 +2994,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote 1.0.21", "wasm-bindgen-macro-support", @@ -2995,9 +3004,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2 1.0.50", "quote 1.0.21", @@ -3008,9 +3017,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-bindgen-test" diff --git a/algorithms/Cargo.toml b/algorithms/Cargo.toml index 423911ae47..2624e34c80 100644 --- a/algorithms/Cargo.toml +++ b/algorithms/Cargo.toml @@ -143,6 +143,11 @@ version = "1.0" version = "0.4" optional = true +[dependencies.web-sys] +version = "0.3" +optional = true +features = ["console"] + [dev-dependencies.expect-test] version = "1.1.0" @@ -167,14 +172,15 @@ default = [ "snarkvm-r1cs/default", "snarkvm-utilities/default" ] -full = [ "crypto_hash", "fft", "msm", "polycommit_full", "snark" ] +full = [ "crypto_hash", "fft", "msm", "polycommit_full", "snark", "web-sys" ] wasm = [ "crypto_hash", "fft", "msm", "polycommit_wasm", "snark", - "wasm-bindgen-futures" + "wasm-bindgen-futures", + "web-sys" ] cuda = [ "snarkvm-algorithms-cuda" ] parallel = [ diff --git a/algorithms/src/snark/marlin/ahp/indexer/circuit.rs b/algorithms/src/snark/marlin/ahp/indexer/circuit.rs index 73cd504d05..90e78ffff9 100644 --- a/algorithms/src/snark/marlin/ahp/indexer/circuit.rs +++ b/algorithms/src/snark/marlin/ahp/indexer/circuit.rs @@ -137,6 +137,8 @@ impl CanonicalDeserialize for Circuit { compress: Compress, validate: Validate, ) -> Result { + use web_sys::console; + console::log_1(&"deserialize here circuit".into()); let index_info: CircuitInfo = CanonicalDeserialize::deserialize_with_mode(&mut reader, compress, validate)?; let constraint_domain_size = EvaluationDomain::::compute_size_of_domain(index_info.num_constraints) .ok_or(SerializationError::InvalidData)?; @@ -147,6 +149,8 @@ impl CanonicalDeserialize for Circuit { let non_zero_c_domain_size = EvaluationDomain::::compute_size_of_domain(index_info.num_non_zero_c) .ok_or(SerializationError::InvalidData)?; + console::log_1(&"Circuit 2".into()); + let (fft_precomputation, ifft_precomputation) = AHPForR1CS::::fft_precomputation( constraint_domain_size, non_zero_a_domain_size, @@ -154,6 +158,7 @@ impl CanonicalDeserialize for Circuit { non_zero_c_domain_size, ) .ok_or(SerializationError::InvalidData)?; + console::log_1(&"Circuit 3".into()); Ok(Circuit { index_info, a: CanonicalDeserialize::deserialize_with_mode(&mut reader, compress, validate)?, diff --git a/algorithms/src/snark/marlin/data_structures/circuit_proving_key.rs b/algorithms/src/snark/marlin/data_structures/circuit_proving_key.rs index ca8da55ed6..854329590b 100644 --- a/algorithms/src/snark/marlin/data_structures/circuit_proving_key.rs +++ b/algorithms/src/snark/marlin/data_structures/circuit_proving_key.rs @@ -54,10 +54,23 @@ impl ToBytes for CircuitProvingKey { impl FromBytes for CircuitProvingKey { #[inline] fn read_le(mut reader: R) -> io::Result { + use web_sys::console; + + // let mut buff = Vec::::new(); + // let size = reader.read_to_end(&mut buff); + + // let formatted_string = format!("Reader size: {:?} {:?}", size, buff.iter().take(1000).cloned().collect::>()); + println!("Read Le 1"); + console::log_1(&"Read Le 1".into()); + // console::log_1(&formatted_string.into()); let circuit_verifying_key = CanonicalDeserialize::deserialize_compressed(&mut reader)?; + console::log_1(&"Read Le 2".into()); let circuit_commitment_randomness = CanonicalDeserialize::deserialize_compressed(&mut reader)?; + // console::log_1(&"Read Le 3".into()); let circuit = CanonicalDeserialize::deserialize_compressed(&mut reader)?; + // console::log_1(&"Read Le 4".into()); let committer_key = Arc::new(FromBytes::read_le(&mut reader)?); + // console::log_1(&"Read Le 5".into()); Ok(Self { circuit_verifying_key, circuit_commitment_randomness, circuit, committer_key }) } diff --git a/algorithms/src/snark/marlin/data_structures/circuit_verifying_key.rs b/algorithms/src/snark/marlin/data_structures/circuit_verifying_key.rs index 1c8ebb46a2..3a262d1694 100644 --- a/algorithms/src/snark/marlin/data_structures/circuit_verifying_key.rs +++ b/algorithms/src/snark/marlin/data_structures/circuit_verifying_key.rs @@ -155,6 +155,8 @@ impl ToMinimalBits for CircuitVerifyingKey FromBytes for CircuitVerifyingKey { fn read_le(r: R) -> io::Result { + use web_sys::console; + console::log_1(&"Deserialize CVK".into()); Self::deserialize_compressed(r).map_err(|_| error("could not deserialize CircuitVerifyingKey")) } } @@ -174,6 +176,8 @@ impl CircuitVerifyingKey { impl ToConstraintField for CircuitVerifyingKey { fn to_field_elements(&self) -> Result, ConstraintFieldError> { + use web_sys::console; + console::log_1(&"CVK to field elements".into()); let constraint_domain_size = EvaluationDomain::::compute_size_of_domain(self.circuit_info.num_constraints).unwrap() as u128; let non_zero_a_domain_size = @@ -183,6 +187,10 @@ impl ToConstraintField for CircuitVerif let non_zero_c_domain_size = EvaluationDomain::::compute_size_of_domain(self.circuit_info.num_non_zero_c).unwrap() as u128; + let formatted_string = format!("Domain sizes: {} , {}, {}, {}", constraint_domain_size, non_zero_a_domain_size, non_zero_b_domain_size, non_zero_c_domain_size); + console::log_1(&formatted_string.into()); + + let mut res = Vec::new(); res.append(&mut E::Fq::from(constraint_domain_size).to_field_elements()?); res.append(&mut E::Fq::from(non_zero_a_domain_size).to_field_elements()?); @@ -228,6 +236,8 @@ impl Serialize for CircuitVerifyingKey impl<'de, E: PairingEngine, MM: MarlinMode> Deserialize<'de> for CircuitVerifyingKey { #[inline] fn deserialize>(deserializer: D) -> Result { + use web_sys::console; + console::log_1(&"Deserialize cvk 1".into()); match deserializer.is_human_readable() { true => { let s: String = Deserialize::deserialize(deserializer)?; diff --git a/algorithms/src/snark/marlin/data_structures/proof.rs b/algorithms/src/snark/marlin/data_structures/proof.rs index 5b2fc1c035..13e1710848 100644 --- a/algorithms/src/snark/marlin/data_structures/proof.rs +++ b/algorithms/src/snark/marlin/data_structures/proof.rs @@ -84,6 +84,8 @@ impl Commitments { compress: Compress, validate: Validate, ) -> Result { + use web_sys::console; + console::log_1(&"deserialize here proofs".into()); let mut witness_commitments = Vec::new(); for _ in 0..batch_size { witness_commitments.push(CanonicalDeserialize::deserialize_with_mode(&mut reader, compress, validate)?); diff --git a/circuit/environment/src/environment.rs b/circuit/environment/src/environment.rs index 65001b2e08..b507706fa4 100644 --- a/circuit/environment/src/environment.rs +++ b/circuit/environment/src/environment.rs @@ -24,10 +24,10 @@ pub trait Environment: 'static + Copy + Clone + fmt::Debug + fmt::Display + Eq + type Network: console::Network; type Affine: AffineCurve< - BaseField = Self::BaseField, - ScalarField = Self::ScalarField, - Coordinates = (Self::BaseField, Self::BaseField), - >; + BaseField = Self::BaseField, + ScalarField = Self::ScalarField, + Coordinates = (Self::BaseField, Self::BaseField), + >; type BaseField: PrimeField + SquareRootField + Copy; type ScalarField: PrimeField::BigInteger> + Copy; diff --git a/console/network/Cargo.toml b/console/network/Cargo.toml index 68ddf17080..f3534b6c1e 100644 --- a/console/network/Cargo.toml +++ b/console/network/Cargo.toml @@ -75,3 +75,7 @@ version = "1" [dependencies.serde] version = "1.0" + +[dependencies.web-sys] +version = "0.3" +features = ["console"] diff --git a/console/network/environment/src/environment.rs b/console/network/environment/src/environment.rs index 1f42cb9bf0..0b14b4a228 100644 --- a/console/network/environment/src/environment.rs +++ b/console/network/environment/src/environment.rs @@ -33,11 +33,11 @@ pub trait Environment: 'static + Copy + Clone + Debug + PartialEq + Eq + Hash + Serialize + DeserializeOwned + Send + Sync { type Affine: AffineCurve< - Projective = Self::Projective, - BaseField = Self::Field, - ScalarField = Self::Scalar, - Coordinates = (Self::Field, Self::Field), - >; + Projective = Self::Projective, + BaseField = Self::Field, + ScalarField = Self::Scalar, + Coordinates = (Self::Field, Self::Field), + >; type BigInteger: BigInteger; type Field: PrimeField + SquareRootField + Copy; type PairingCurve: PairingEngine; diff --git a/console/network/src/testnet3.rs b/console/network/src/testnet3.rs index 08affdaef6..4095fcdafe 100644 --- a/console/network/src/testnet3.rs +++ b/console/network/src/testnet3.rs @@ -140,7 +140,7 @@ impl Network for Testnet3 { /// Returns the genesis block bytes. fn genesis_bytes() -> &'static [u8] { - snarkvm_parameters::testnet3::GenesisBytes::load_bytes() + &[1u8, 2u8, 3u8, 4u8, 5u8] } /// Returns the proving key for the given function name in `credits.aleo`. diff --git a/curves/Cargo.toml b/curves/Cargo.toml index 31fda5bd22..8b6fcbc0e5 100644 --- a/curves/Cargo.toml +++ b/curves/Cargo.toml @@ -53,6 +53,10 @@ version = "1.0.152" default-features = false features = [ "derive" ] +[dependencies.web-sys] +version = "0.3" +features = ["console"] + [dependencies.thiserror] version = "1.0" diff --git a/curves/src/templates/bls12/bls12.rs b/curves/src/templates/bls12/bls12.rs index 7e1cf48bc9..653c3753b3 100644 --- a/curves/src/templates/bls12/bls12.rs +++ b/curves/src/templates/bls12/bls12.rs @@ -57,9 +57,9 @@ pub trait Bls12Parameters: 'static + Copy + Clone + Debug + PartialEq + Eq + Has type Fp12Params: Fp12Parameters; type G1Parameters: ShortWeierstrassParameters; type G2Parameters: ShortWeierstrassParameters< - BaseField = Fp2, - ScalarField = ::ScalarField, - >; + BaseField = Fp2, + ScalarField = ::ScalarField, + >; fn g1_is_in_correct_subgroup(p: &short_weierstrass_jacobian::Affine) -> bool { p.mul_bits(BitIteratorBE::new(::ScalarField::characteristic())).is_zero() @@ -108,21 +108,21 @@ impl Bls12

{ impl PairingEngine for Bls12

where G1Affine

: PairingCurve< - BaseField = ::BaseField, - ScalarField = ::ScalarField, - Projective = G1Projective

, - PairWith = G2Affine

, - Prepared = G1Prepared

, - PairingResult = Fp12, - >, + BaseField = ::BaseField, + ScalarField = ::ScalarField, + Projective = G1Projective

, + PairWith = G2Affine

, + Prepared = G1Prepared

, + PairingResult = Fp12, + >, G2Affine

: PairingCurve< - BaseField = ::BaseField, - ScalarField = ::ScalarField, - Projective = G2Projective

, - PairWith = G1Affine

, - Prepared = G2Prepared

, - PairingResult = Fp12, - >, + BaseField = ::BaseField, + ScalarField = ::ScalarField, + Projective = G2Projective

, + PairWith = G1Affine

, + Prepared = G2Prepared

, + PairingResult = Fp12, + >, { type Fq = P::Fp; type Fqe = Fp2; diff --git a/curves/src/templates/bls12/g2.rs b/curves/src/templates/bls12/g2.rs index b58bc12c34..4fa145647f 100644 --- a/curves/src/templates/bls12/g2.rs +++ b/curves/src/templates/bls12/g2.rs @@ -67,6 +67,10 @@ impl ToBytes for G2Prepared

{ impl FromBytes for G2Prepared

{ fn read_le(mut reader: R) -> IoResult { let ell_coeffs_len: u32 = FromBytes::read_le(&mut reader)?; + use web_sys::console; + console::log_1(&"deserialize here g2".into()); + let formatted_string = format!("{:?}", ell_coeffs_len); + console::log_1(&formatted_string.into());; let mut ell_coeffs = Vec::with_capacity(ell_coeffs_len as usize); for _ in 0..ell_coeffs_len { let coeff_1: Fp2 = FromBytes::read_le(&mut reader)?; diff --git a/curves/src/templates/macros.rs b/curves/src/templates/macros.rs index 099bf85202..40f466b6ad 100644 --- a/curves/src/templates/macros.rs +++ b/curves/src/templates/macros.rs @@ -61,6 +61,8 @@ macro_rules! impl_sw_curve_serializer { compress: Compress, validate: Validate, ) -> Result { + use web_sys::console; + console::log_1(&"deserialize here projective 2".into()); Affine::

::deserialize_with_mode(reader, compress, validate).map(Into::into) } } @@ -124,6 +126,10 @@ macro_rules! impl_sw_curve_serializer { validate: Validate, ) -> Result { use snarkvm_utilities::serialize::SWFlags; + use web_sys::console; + console::log_1(&"deserialize here affine".into()); + // let formatted_string = format!("{:?} , {:?}", compress, validate); + // console::log_1(&formatted_string.into()); let point = if let Compress::Yes = compress { let (x, flags) = P::BaseField::deserialize_with_flags::<_, SWFlags>(&mut reader)?; if flags.is_infinity() { @@ -183,6 +189,8 @@ macro_rules! impl_edwards_curve_serializer { compress: Compress, validate: Validate, ) -> Result { + use web_sys::console; + console::log_1(&"deserialize here projective".into()); Affine::

::deserialize_with_mode(reader, compress, validate).map(Into::into) } } @@ -241,6 +249,8 @@ macro_rules! impl_edwards_curve_serializer { validate: Validate, ) -> Result { use snarkvm_utilities::serialize::{EdwardsFlags, SerializationError}; + use web_sys::console; + console::log_1(&"deserialize here affine canonical".into()); let point = if let Compress::Yes = compress { let (x, flags): (P::BaseField, EdwardsFlags) = P::BaseField::deserialize_with_flags(&mut reader)?; diff --git a/curves/src/templates/short_weierstrass_jacobian/affine.rs b/curves/src/templates/short_weierstrass_jacobian/affine.rs index c6b9a54018..e2a8ff3332 100644 --- a/curves/src/templates/short_weierstrass_jacobian/affine.rs +++ b/curves/src/templates/short_weierstrass_jacobian/affine.rs @@ -302,6 +302,8 @@ impl ToBytes for Affine

{ impl FromBytes for Affine

{ #[inline] fn read_le(mut reader: R) -> IoResult { + use web_sys::console; + console::log_1(&"deserialize here affine 2".into()); let x = P::BaseField::read_le(&mut reader)?; let y = P::BaseField::read_le(&mut reader)?; let infinity = bool::read_le(&mut reader)?; diff --git a/curves/src/templates/short_weierstrass_jacobian/projective.rs b/curves/src/templates/short_weierstrass_jacobian/projective.rs index 5dc374fff2..456dee35c0 100644 --- a/curves/src/templates/short_weierstrass_jacobian/projective.rs +++ b/curves/src/templates/short_weierstrass_jacobian/projective.rs @@ -144,6 +144,8 @@ impl ToBytes for Projective

{ impl FromBytes for Projective

{ #[inline] fn read_le(mut reader: R) -> IoResult { + use web_sys::console; + console::log_1(&"deserialize here projective stuff".into()); let x = P::BaseField::read_le(&mut reader)?; let y = P::BaseField::read_le(&mut reader)?; let z = P::BaseField::read_le(reader)?; diff --git a/fields/Cargo.toml b/fields/Cargo.toml index be28ead5c6..281bf26a21 100644 --- a/fields/Cargo.toml +++ b/fields/Cargo.toml @@ -60,6 +60,10 @@ features = [ "derive" ] [dependencies.thiserror] version = "1.0" +[dependencies.web-sys] +version = "0.3" +features = ["console"] + [features] default = [ "parallel", "snarkvm-utilities/default" ] parallel = [ "rayon", "snarkvm-utilities/parallel" ] diff --git a/fields/src/fp12_2over3over2.rs b/fields/src/fp12_2over3over2.rs index eb3a02920d..692c153cc9 100644 --- a/fields/src/fp12_2over3over2.rs +++ b/fields/src/fp12_2over3over2.rs @@ -536,6 +536,10 @@ impl CanonicalSerialize for Fp12

{ impl CanonicalDeserializeWithFlags for Fp12

{ #[inline] fn deserialize_with_flags(mut reader: R) -> Result<(Self, F), SerializationError> { + use web_sys::console; + console::log_1(&"deserialize here fp12".into()); + println!("deserialize here fp12"); + let c0 = CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; let (c1, flags) = Fp6::deserialize_with_flags(&mut reader)?; Ok((Self::new(c0, c1), flags)) diff --git a/fields/src/fp2.rs b/fields/src/fp2.rs index 4ec8e3235c..91c9661b61 100644 --- a/fields/src/fp2.rs +++ b/fields/src/fp2.rs @@ -457,6 +457,9 @@ impl CanonicalSerialize for Fp2

{ impl CanonicalDeserializeWithFlags for Fp2

{ #[inline] fn deserialize_with_flags(mut reader: R) -> Result<(Self, F), SerializationError> { + use web_sys::console; + console::log_1(&"deserialize here fp2".into()); + let c0: P::Fp = CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; let (c1, flags): (P::Fp, _) = CanonicalDeserializeWithFlags::deserialize_with_flags(&mut reader)?; Ok((Fp2::new(c0, c1), flags)) diff --git a/fields/src/fp6_3over2.rs b/fields/src/fp6_3over2.rs index 4fa61f3940..f073eb77de 100644 --- a/fields/src/fp6_3over2.rs +++ b/fields/src/fp6_3over2.rs @@ -555,6 +555,9 @@ impl Valid for Fp6

{ impl CanonicalDeserializeWithFlags for Fp6

{ #[inline] fn deserialize_with_flags(mut reader: R) -> Result<(Self, F), SerializationError> { + use web_sys::console; + console::log_1(&"deserialize here fp6".into()); + let c0 = CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; let c1 = CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; let (c2, flags): (_, _) = CanonicalDeserializeWithFlags::deserialize_with_flags(&mut reader)?; diff --git a/fields/src/macros.rs b/fields/src/macros.rs index 1539c5636f..24f480bd40 100644 --- a/fields/src/macros.rs +++ b/fields/src/macros.rs @@ -261,6 +261,7 @@ macro_rules! impl_primefield_serializer { mut reader: R, ) -> Result<(Self, F), snarkvm_utilities::serialize::SerializationError> { use snarkvm_utilities::serialize::SerializationError; + use web_sys::console; // All reasonable `Flags` should be less than 8 bits in size // (256 values are enough for anyone!) if F::BIT_SIZE > 8 { @@ -273,10 +274,18 @@ macro_rules! impl_primefield_serializer { let mut masked_bytes = [0; $byte_size + 1]; reader.read_exact(&mut masked_bytes[..output_byte_size])?; + let formatted_string = format!("{:?} , {}", masked_bytes, output_byte_size); + console::log_1(&formatted_string.into()); + + println!("{:?} , {}", masked_bytes, output_byte_size); let flags = F::from_u8_remove_flags(&mut masked_bytes[output_byte_size - 1]) .ok_or(SerializationError::UnexpectedFlags)?; + let formatted_string = format!("Flags found: {:?}", flags.u8_bitmask()); + // println!("Flags found: {}", ) + console::log_1(&formatted_string.into()); + Ok((Self::read_le(&masked_bytes[..])?, flags)) } } @@ -304,6 +313,8 @@ macro_rules! impl_primefield_serializer { _validate: snarkvm_utilities::serialize::Validate, ) -> Result { use snarkvm_utilities::serialize::EmptyFlags; + use web_sys::console; + console::log_1(&"deserialize here".into()); Self::deserialize_with_flags::(reader).map(|(r, _)| r) } } diff --git a/parameters/Cargo.toml b/parameters/Cargo.toml index c004918624..d6f9a10555 100644 --- a/parameters/Cargo.toml +++ b/parameters/Cargo.toml @@ -85,6 +85,15 @@ default-features = false [dependencies.thiserror] version = "1.0" +[dependencies.web-sys] +version = "0.3" +optional = true +features = ["console"] + +[dependencies.wasm-bindgen] +version = "0.2" +optional = true + [dependencies.wasm-bindgen-futures] version = "0.4" optional = true @@ -119,4 +128,4 @@ version = "0.8" default = [ "colored", "remote" ] no_std_out = [ ] remote = [ "curl" ] -wasm = [ "reqwest", "wasm-bindgen-futures" ] +wasm = [ "reqwest", "web-sys", "wasm-bindgen", "wasm-bindgen-futures" ] diff --git a/parameters/src/errors/parameter.rs b/parameters/src/errors/parameter.rs index 4e34f297e8..9bbfa2db1a 100644 --- a/parameters/src/errors/parameter.rs +++ b/parameters/src/errors/parameter.rs @@ -30,6 +30,9 @@ pub enum ParameterError { #[error("Remote fetch is disabled, enable compiler flag for feature")] RemoteFetchDisabled, + #[error("Necessary File Not Found")] + NotFound, + #[error("Expected size of {}, found size of {}", _0, _1)] SizeMismatch(usize, usize), } diff --git a/parameters/src/macros.rs b/parameters/src/macros.rs index 81e4785cf1..8134231227 100644 --- a/parameters/src/macros.rs +++ b/parameters/src/macros.rs @@ -319,6 +319,7 @@ macro_rules! impl_remote { } } }; + ($name: ident, $remote_url: expr, $local_dir: expr, $fname: tt, $ftype: tt) => { pub struct $name; diff --git a/parameters/src/testnet3/genesis.rs b/parameters/src/testnet3/genesis.rs index e126be108a..134ea3fe1f 100644 --- a/parameters/src/testnet3/genesis.rs +++ b/parameters/src/testnet3/genesis.rs @@ -14,21 +14,21 @@ // You should have received a copy of the GNU General Public License // along with the snarkVM library. If not, see . -pub struct GenesisBytes; +// pub struct GenesisBytes; -impl GenesisBytes { - pub const fn load_bytes() -> &'static [u8] { - include_bytes!("./resources/block.genesis") - } -} +// impl GenesisBytes { +// pub const fn load_bytes() -> &'static [u8] { +// include_bytes!("./resources-tmp/block.genesis") +// } +// } -#[cfg(test)] -mod tests { - use super::*; +// #[cfg(test)] +// mod tests { +// use super::*; - #[test] - fn test_genesis_block() { - let bytes = GenesisBytes::load_bytes(); - assert_eq!(1783, bytes.len() as u64, "Update me if serialization has changed"); - } -} +// #[test] +// fn test_genesis_block() { +// let bytes = GenesisBytes::load_bytes(); +// assert_eq!(1783, bytes.len() as u64, "Update me if serialization has changed"); +// } +// } diff --git a/parameters/src/testnet3/mod.rs b/parameters/src/testnet3/mod.rs index 7aa932e5ea..6ac39675b8 100644 --- a/parameters/src/testnet3/mod.rs +++ b/parameters/src/testnet3/mod.rs @@ -18,74 +18,239 @@ pub mod genesis; pub use genesis::*; pub mod powers; +use indexmap::IndexMap; pub use powers::*; const REMOTE_URL: &str = "https://testnet3.parameters.aleo.org"; + // Degrees -impl_local!(Degree15, "resources/", "powers-of-beta-15", "usrs"); -impl_remote!(Degree16, REMOTE_URL, "resources/", "powers-of-beta-16", "usrs"); -impl_remote!(Degree17, REMOTE_URL, "resources/", "powers-of-beta-17", "usrs"); -impl_remote!(Degree18, REMOTE_URL, "resources/", "powers-of-beta-18", "usrs"); -impl_remote!(Degree19, REMOTE_URL, "resources/", "powers-of-beta-19", "usrs"); -impl_remote!(Degree20, REMOTE_URL, "resources/", "powers-of-beta-20", "usrs"); -impl_remote!(Degree21, REMOTE_URL, "resources/", "powers-of-beta-21", "usrs"); -impl_remote!(Degree22, REMOTE_URL, "resources/", "powers-of-beta-22", "usrs"); -impl_remote!(Degree23, REMOTE_URL, "resources/", "powers-of-beta-23", "usrs"); -impl_remote!(Degree24, REMOTE_URL, "resources/", "powers-of-beta-24", "usrs"); -impl_remote!(Degree25, REMOTE_URL, "resources/", "powers-of-beta-25", "usrs"); -impl_remote!(Degree26, REMOTE_URL, "resources/", "powers-of-beta-26", "usrs"); -impl_remote!(Degree27, REMOTE_URL, "resources/", "powers-of-beta-27", "usrs"); -impl_remote!(Degree28, REMOTE_URL, "resources/", "powers-of-beta-28", "usrs"); +// impl_local!(Degree15, "resources/", "powers-of-beta-15", "usrs"); +// impl_remote!(Degree16, REMOTE_URL, "resources/", "powers-of-beta-16", "usrs"); +// impl_remote!(Degree17, REMOTE_URL, "resources/", "powers-of-beta-17", "usrs"); +// impl_remote!(Degree18, REMOTE_URL, "resources/", "powers-of-beta-18", "usrs"); +// impl_remote!(Degree19, REMOTE_URL, "resources/", "powers-of-beta-19", "usrs"); +// impl_remote!(Degree20, REMOTE_URL, "resources/", "powers-of-beta-20", "usrs"); +// impl_remote!(Degree21, REMOTE_URL, "resources/", "powers-of-beta-21", "usrs"); +// impl_remote!(Degree22, REMOTE_URL, "resources/", "powers-of-beta-22", "usrs"); +// impl_remote!(Degree23, REMOTE_URL, "resources/", "powers-of-beta-23", "usrs"); +// impl_remote!(Degree24, REMOTE_URL, "resources/", "powers-of-beta-24", "usrs"); +// impl_remote!(Degree25, REMOTE_URL, "resources/", "powers-of-beta-25", "usrs"); +// impl_remote!(Degree26, REMOTE_URL, "resources/", "powers-of-beta-26", "usrs"); +// impl_remote!(Degree27, REMOTE_URL, "resources/", "powers-of-beta-27", "usrs"); +// impl_remote!(Degree28, REMOTE_URL, "resources/", "powers-of-beta-28", "usrs"); // Shifted Degrees -impl_local!(ShiftedDegree15, "resources/", "shifted-powers-of-beta-15", "usrs"); -impl_remote!(ShiftedDegree16, REMOTE_URL, "resources/", "shifted-powers-of-beta-16", "usrs"); -impl_remote!(ShiftedDegree17, REMOTE_URL, "resources/", "shifted-powers-of-beta-17", "usrs"); -impl_remote!(ShiftedDegree18, REMOTE_URL, "resources/", "shifted-powers-of-beta-18", "usrs"); -impl_remote!(ShiftedDegree19, REMOTE_URL, "resources/", "shifted-powers-of-beta-19", "usrs"); -impl_remote!(ShiftedDegree20, REMOTE_URL, "resources/", "shifted-powers-of-beta-20", "usrs"); -impl_remote!(ShiftedDegree21, REMOTE_URL, "resources/", "shifted-powers-of-beta-21", "usrs"); -impl_remote!(ShiftedDegree22, REMOTE_URL, "resources/", "shifted-powers-of-beta-22", "usrs"); -impl_remote!(ShiftedDegree23, REMOTE_URL, "resources/", "shifted-powers-of-beta-23", "usrs"); -impl_remote!(ShiftedDegree24, REMOTE_URL, "resources/", "shifted-powers-of-beta-24", "usrs"); -impl_remote!(ShiftedDegree25, REMOTE_URL, "resources/", "shifted-powers-of-beta-25", "usrs"); -impl_remote!(ShiftedDegree26, REMOTE_URL, "resources/", "shifted-powers-of-beta-26", "usrs"); -impl_remote!(ShiftedDegree27, REMOTE_URL, "resources/", "shifted-powers-of-beta-27", "usrs"); +// impl_local!(ShiftedDegree15, "resources/", "shifted-powers-of-beta-15", "usrs"); +// impl_remote!(ShiftedDegree16, REMOTE_URL, "resources/", "shifted-powers-of-beta-16", "usrs"); +// impl_remote!(ShiftedDegree17, REMOTE_URL, "resources/", "shifted-powers-of-beta-17", "usrs"); +// impl_remote!(ShiftedDegree18, REMOTE_URL, "resources/", "shifted-powers-of-beta-18", "usrs"); +// impl_remote!(ShiftedDegree19, REMOTE_URL, "resources/", "shifted-powers-of-beta-19", "usrs"); +// impl_remote!(ShiftedDegree20, REMOTE_URL, "resources/", "shifted-powers-of-beta-20", "usrs"); +// impl_remote!(ShiftedDegree21, REMOTE_URL, "resources/", "shifted-powers-of-beta-21", "usrs"); +// impl_remote!(ShiftedDegree22, REMOTE_URL, "resources/", "shifted-powers-of-beta-22", "usrs"); +// impl_remote!(ShiftedDegree23, REMOTE_URL, "resources/", "shifted-powers-of-beta-23", "usrs"); +// impl_remote!(ShiftedDegree24, REMOTE_URL, "resources/", "shifted-powers-of-beta-24", "usrs"); +// impl_remote!(ShiftedDegree25, REMOTE_URL, "resources/", "shifted-powers-of-beta-25", "usrs"); +// impl_remote!(ShiftedDegree26, REMOTE_URL, "resources/", "shifted-powers-of-beta-26", "usrs"); +// impl_remote!(ShiftedDegree27, REMOTE_URL, "resources/", "shifted-powers-of-beta-27", "usrs"); + +// // Powers of Beta Times Gamma * G +// impl_local!(Gamma, "resources/", "powers-of-beta-gamma", "usrs"); +// // Negative Powers of Beta in G2 +// impl_local!(NegBeta, "resources/", "neg-powers-of-beta", "usrs"); +// // Negative Powers of Beta in G2 +// impl_local!(BetaH, "resources/", "beta-h", "usrs"); + +// // Mint +// impl_remote!(MintProver, REMOTE_URL, "resources/", "mint", "prover"); +// impl_remote!(MintVerifier, REMOTE_URL, "resources/", "mint", "verifier"); +// // Transfer +// impl_remote!(TransferProver, REMOTE_URL, "resources/", "transfer", "prover"); +// impl_remote!(TransferVerifier, REMOTE_URL, "resources/", "transfer", "verifier"); +// // Join +// impl_remote!(JoinProver, REMOTE_URL, "resources/", "join", "prover"); +// impl_remote!(JoinVerifier, REMOTE_URL, "resources/", "join", "verifier"); +// // Split +// impl_remote!(SplitProver, REMOTE_URL, "resources/", "split", "prover"); +// impl_remote!(SplitVerifier, REMOTE_URL, "resources/", "split", "verifier"); +// // Fee +// impl_remote!(FeeProver, REMOTE_URL, "resources/", "fee", "prover"); +// impl_remote!(FeeVerifier, REMOTE_URL, "resources/", "fee", "verifier"); + +use std::sync::Mutex; + +lazy_static! { + pub static ref PARAMETER_PROVIDER: Mutex>> = { + let mut map = IndexMap::new(); + // Test + map.insert("TestProver".into(), Vec::::new()); + + // Powers of Beta + map.insert("Degree15".into(), Vec::::new()); + map.insert("Degree16".into(), Vec::::new()); + map.insert("Degree17".into(), Vec::::new()); + map.insert("Degree18".into(), Vec::::new()); + map.insert("Degree19".into(), Vec::::new()); + map.insert("Degree20".into(), Vec::::new()); + map.insert("Degree21".into(), Vec::::new()); + map.insert("Degree22".into(), Vec::::new()); + map.insert("Degree23".into(), Vec::::new()); + map.insert("Degree24".into(), Vec::::new()); + map.insert("Degree25".into(), Vec::::new()); + map.insert("Degree26".into(), Vec::::new()); + map.insert("Degree27".into(), Vec::::new()); + map.insert("Degree28".into(), Vec::::new()); + + // Shifted Powers of Beta + map.insert("ShiftedDegree15".into(), Vec::::new()); + map.insert("ShiftedDegree16".into(), Vec::::new()); + map.insert("ShiftedDegree17".into(), Vec::::new()); + map.insert("ShiftedDegree18".into(), Vec::::new()); + map.insert("ShiftedDegree19".into(), Vec::::new()); + map.insert("ShiftedDegree20".into(), Vec::::new()); + map.insert("ShiftedDegree21".into(), Vec::::new()); + map.insert("ShiftedDegree22".into(), Vec::::new()); + map.insert("ShiftedDegree23".into(), Vec::::new()); + map.insert("ShiftedDegree24".into(), Vec::::new()); + map.insert("ShiftedDegree25".into(), Vec::::new()); + map.insert("ShiftedDegree26".into(), Vec::::new()); + map.insert("ShiftedDegree27".into(), Vec::::new()); + + // Powers of Beta Times Gamma * G + map.insert("Gamma".into(), Vec::::new()); + // Negative Powers of Beta in G2 + map.insert("NegBeta".into(), Vec::::new()); + // Negative Powers of Beta in G2 + map.insert("BetaH".into(), Vec::::new()); + + // Credits Program + map.insert("MintProver".into(), Vec::::new()); + map.insert("MintVerifier".into(), Vec::::new()); + map.insert("TransferProver".into(), Vec::::new()); + map.insert("TransferVerifier".into(), Vec::::new()); + map.insert("JoinProver".into(), Vec::::new()); + map.insert("JoinVerifier".into(), Vec::::new()); + map.insert("SplitProver".into(), Vec::::new()); + map.insert("SplitVerifier".into(), Vec::::new()); + map.insert("FeeProver".into(), Vec::::new()); + map.insert("FeeVerifier".into(), Vec::::new()); + + // Inclusion + map.insert("InclusionProver".into(), Vec::::new()); + map.insert("InclusionVerifier".into(), Vec::::new()); + + Mutex::new(map) + }; +} + +#[macro_export] +macro_rules! impl_web { + ($name: ident, $fname: tt, $ftype: tt) => { + pub struct $name; + + impl $name { + pub fn load_bytes() -> Result, $crate::errors::ParameterError> { + let provider_lock = PARAMETER_PROVIDER.lock(); + match provider_lock { + Ok(provider) => { + use web_sys::console; + + let formatted_string = format!("{}: Loading Bytes", stringify!($name)); + println!("{}: Loading Bytes", stringify!($name)); + console::log_1(&formatted_string.into()); + let bytes = provider.get(stringify!($name)); + assert!(bytes.is_some(), "{} should be defined in the Parameter Provider", stringify!($name)); + let unwrapped_bytes = bytes.unwrap().clone(); + let formatted_string2 = format!("{}: Loaded Bytes Sucessfully", stringify!($name)); + console::log_1(&formatted_string2.into()); + Ok(unwrapped_bytes) + } + Err(_) => { + Err(crate::errors::ParameterError::NotFound) + } + } + } + } + + + paste::item! { + #[cfg(test)] + #[test] + fn [< test_ $fname _ $ftype >]() { + assert!($name::load_bytes().is_ok()); + } + } + }; +} + +impl_web!(Degree15, "powers-of-beta-15", "powers-of-beta"); +impl_web!(Degree16, "powers-of-beta-16", "powers-of-beta"); +impl_web!(Degree17, "powers-of-beta-17", "powers-of-beta"); +impl_web!(Degree18, "powers-of-beta-18", "powers-of-beta"); +impl_web!(Degree19, "powers-of-beta-19", "powers-of-beta"); +impl_web!(Degree20, "powers-of-beta-20", "powers-of-beta"); +impl_web!(Degree21, "powers-of-beta-21", "powers-of-beta"); +impl_web!(Degree22, "powers-of-beta-22", "powers-of-beta"); +impl_web!(Degree23, "powers-of-beta-23", "powers-of-beta"); +impl_web!(Degree24, "powers-of-beta-24", "powers-of-beta"); +impl_web!(Degree25, "powers-of-beta-25", "powers-of-beta"); +impl_web!(Degree26, "powers-of-beta-26", "powers-of-beta"); +impl_web!(Degree27, "powers-of-beta-27", "powers-of-beta"); +impl_web!(Degree28, "powers-of-beta-28", "powers-of-beta"); + + +impl_web!(ShiftedDegree15, "shifted-powers-of-beta-15", "shift-powers-of-beta"); +impl_web!(ShiftedDegree16, "shifted-powers-of-beta-16", "shift-powers-of-beta"); +impl_web!(ShiftedDegree17, "shifted-powers-of-beta-17", "shift-powers-of-beta"); +impl_web!(ShiftedDegree18, "shifted-powers-of-beta-18", "shift-powers-of-beta"); +impl_web!(ShiftedDegree19, "shifted-powers-of-beta-19", "shift-powers-of-beta"); +impl_web!(ShiftedDegree20, "shifted-powers-of-beta-20", "shift-powers-of-beta"); +impl_web!(ShiftedDegree21, "shifted-powers-of-beta-21", "shift-powers-of-beta"); +impl_web!(ShiftedDegree22, "shifted-powers-of-beta-22", "shift-powers-of-beta"); +impl_web!(ShiftedDegree23, "shifted-powers-of-beta-23", "shift-powers-of-beta"); +impl_web!(ShiftedDegree24, "shifted-powers-of-beta-24", "shift-powers-of-beta"); +impl_web!(ShiftedDegree25, "shifted-powers-of-beta-25", "shift-powers-of-beta"); +impl_web!(ShiftedDegree26, "shifted-powers-of-beta-26", "shift-powers-of-beta"); +impl_web!(ShiftedDegree27, "shifted-powers-of-beta-27", "shift-powers-of-beta"); // Powers of Beta Times Gamma * G -impl_local!(Gamma, "resources/", "powers-of-beta-gamma", "usrs"); +impl_web!(Gamma, "powers-of-beta-gamma", "powers-of-beta-gamma"); // Negative Powers of Beta in G2 -impl_local!(NegBeta, "resources/", "neg-powers-of-beta", "usrs"); +impl_web!(NegBeta, "neg-powers-of-beta", "neg-powers-of-beta"); // Negative Powers of Beta in G2 -impl_local!(BetaH, "resources/", "beta-h", "usrs"); - -// Mint -impl_remote!(MintProver, REMOTE_URL, "resources/", "mint", "prover"); -impl_remote!(MintVerifier, REMOTE_URL, "resources/", "mint", "verifier"); -// Transfer -impl_remote!(TransferProver, REMOTE_URL, "resources/", "transfer", "prover"); -impl_remote!(TransferVerifier, REMOTE_URL, "resources/", "transfer", "verifier"); -// Join -impl_remote!(JoinProver, REMOTE_URL, "resources/", "join", "prover"); -impl_remote!(JoinVerifier, REMOTE_URL, "resources/", "join", "verifier"); -// Split -impl_remote!(SplitProver, REMOTE_URL, "resources/", "split", "prover"); -impl_remote!(SplitVerifier, REMOTE_URL, "resources/", "split", "verifier"); -// Fee -impl_remote!(FeeProver, REMOTE_URL, "resources/", "fee", "prover"); -impl_remote!(FeeVerifier, REMOTE_URL, "resources/", "fee", "verifier"); +impl_web!(BetaH, "beta-h", "beta-h"); + +// Credits +impl_web!(TestProver, "test", "prover"); +impl_web!(MintProver, "mint", "prover"); +impl_web!(MintVerifier, "mint", "verifier"); +impl_web!(TransferProver, "transfer", "prover"); +impl_web!(TransferVerifier, "transfer", "verifier"); +impl_web!(JoinProver, "join", "prover"); +impl_web!(JoinVerifier, "join", "verifier"); +impl_web!(SplitProver, "split", "prover"); +impl_web!(SplitVerifier, "split", "verifier"); +impl_web!(FeeProver,"fee", "prover"); +impl_web!(FeeVerifier, "fee", "verifier"); + +// Inclusion +impl_web!(InclusionProver, "inclusion", "prover"); +impl_web!(InclusionVerifier, "inclusion", "verifier"); + +// Genesis +impl_web!(GenesisBytes, "gensis", "genesis"); #[macro_export] macro_rules! insert_credit_keys { ($map:ident, $type:ident<$network:ident>, $variant:ident) => {{ paste::paste! { let string = stringify!([<$variant:lower>]); - $crate::insert_key!($map, string, $type<$network>, ("mint", $crate::testnet3::[]::load_bytes())); + // $crate::insert_key!($map, string, $type<$network>, ("mint", $crate::testnet3::[]::load_bytes())); $crate::insert_key!($map, string, $type<$network>, ("transfer", $crate::testnet3::[]::load_bytes())); - $crate::insert_key!($map, string, $type<$network>, ("join", $crate::testnet3::[]::load_bytes())); - $crate::insert_key!($map, string, $type<$network>, ("split", $crate::testnet3::[]::load_bytes())); - $crate::insert_key!($map, string, $type<$network>, ("fee", $crate::testnet3::[]::load_bytes())); + // $crate::insert_key!($map, string, $type<$network>, ("join", $crate::testnet3::[]::load_bytes())); + // $crate::insert_key!($map, string, $type<$network>, ("split", $crate::testnet3::[]::load_bytes())); + // $crate::insert_key!($map, string, $type<$network>, ("fee", $crate::testnet3::[]::load_bytes())); } }}; } @@ -94,17 +259,29 @@ macro_rules! insert_credit_keys { macro_rules! insert_key { ($map:ident, $string:tt, $type:ident<$network:ident>, ($name:tt, $circuit_key:expr)) => {{ // Load the circuit key bytes. + let formatted_string = format!("{}: Loading Circuit Keys", stringify!($string)); + web_sys::console::log_1(&formatted_string.into()); let key_bytes: Vec = $circuit_key.expect(&format!("Failed to load {} bytes", $string)); + let formatted_string2 = format!("{}: Loaded Circuit Keys: {} Bytes", stringify!($string), key_bytes.len()); + web_sys::console::log_1(&formatted_string2.into()); // Recover the circuit key. let key = $type::<$network>::from_bytes_le(&key_bytes[2..]).expect(&format!("Failed to recover {}", $string)); + let formatted_string3 = format!("{}: Recovered Circuit Keys", stringify!($string)); + web_sys::console::log_1(&formatted_string3.into()); // Insert the circuit key. - $map.insert($name.to_string(), std::sync::Arc::new(key)); + let thing = std::sync::Arc::new(key); + let formatted_string10 = format!("{}: ARC Made", stringify!($string)); + web_sys::console::log_1(&formatted_string10.into()); + + $map.insert($name.to_string(), thing); + let formatted_string4 = format!("{}: Inserted Circuit Key", stringify!($string)); + web_sys::console::log_1(&formatted_string4.into()); }}; } -// Inclusion -impl_remote!(InclusionProver, REMOTE_URL, "resources/", "inclusion", "prover"); -impl_remote!(InclusionVerifier, REMOTE_URL, "resources/", "inclusion", "verifier"); +// // Inclusion +// impl_remote!(InclusionProver, REMOTE_URL, "resources/", "inclusion", "prover"); +// impl_remote!(InclusionVerifier, REMOTE_URL, "resources/", "inclusion", "verifier"); /// The function name for the inclusion circuit. pub const TESTNET3_INCLUSION_FUNCTION_NAME: &str = "inclusion"; diff --git a/parameters/src/testnet3/powers.rs b/parameters/src/testnet3/powers.rs index e6ccb1fd37..ae2efabd5e 100644 --- a/parameters/src/testnet3/powers.rs +++ b/parameters/src/testnet3/powers.rs @@ -156,6 +156,8 @@ impl CanonicalDeserialize for PowersOfG { compress: Compress, validate: Validate, ) -> Result { + use web_sys::console; + console::log_1(&"deserialize here powers of g".into()); let powers_of_beta_g = PowersOfBetaG::deserialize_with_mode(&mut reader, compress, Validate::No)?; let powers_of_beta_times_gamma_g = Arc::new(BTreeMap::deserialize_with_mode(&mut reader, compress, Validate::No)?); diff --git a/parameters/src/testnet3/resources/beta-h.metadata b/parameters/src/testnet3/resources-tmp/beta-h.metadata similarity index 100% rename from parameters/src/testnet3/resources/beta-h.metadata rename to parameters/src/testnet3/resources-tmp/beta-h.metadata diff --git a/parameters/src/testnet3/resources/beta-h.usrs b/parameters/src/testnet3/resources-tmp/beta-h.usrs similarity index 100% rename from parameters/src/testnet3/resources/beta-h.usrs rename to parameters/src/testnet3/resources-tmp/beta-h.usrs diff --git a/parameters/src/testnet3/resources/block.genesis b/parameters/src/testnet3/resources-tmp/block.genesis similarity index 100% rename from parameters/src/testnet3/resources/block.genesis rename to parameters/src/testnet3/resources-tmp/block.genesis diff --git a/parameters/src/testnet3/resources/fee.metadata b/parameters/src/testnet3/resources-tmp/fee.metadata similarity index 100% rename from parameters/src/testnet3/resources/fee.metadata rename to parameters/src/testnet3/resources-tmp/fee.metadata diff --git a/parameters/src/testnet3/resources/genesis.metadata b/parameters/src/testnet3/resources-tmp/genesis.metadata similarity index 100% rename from parameters/src/testnet3/resources/genesis.metadata rename to parameters/src/testnet3/resources-tmp/genesis.metadata diff --git a/parameters/src/testnet3/resources/inclusion.metadata b/parameters/src/testnet3/resources-tmp/inclusion.metadata similarity index 100% rename from parameters/src/testnet3/resources/inclusion.metadata rename to parameters/src/testnet3/resources-tmp/inclusion.metadata diff --git a/parameters/src/testnet3/resources/join.metadata b/parameters/src/testnet3/resources-tmp/join.metadata similarity index 100% rename from parameters/src/testnet3/resources/join.metadata rename to parameters/src/testnet3/resources-tmp/join.metadata diff --git a/parameters/src/testnet3/resources/mint.metadata b/parameters/src/testnet3/resources-tmp/mint.metadata similarity index 100% rename from parameters/src/testnet3/resources/mint.metadata rename to parameters/src/testnet3/resources-tmp/mint.metadata diff --git a/parameters/src/testnet3/resources/neg-powers-of-beta.metadata b/parameters/src/testnet3/resources-tmp/neg-powers-of-beta.metadata similarity index 100% rename from parameters/src/testnet3/resources/neg-powers-of-beta.metadata rename to parameters/src/testnet3/resources-tmp/neg-powers-of-beta.metadata diff --git a/parameters/src/testnet3/resources/neg-powers-of-beta.usrs b/parameters/src/testnet3/resources-tmp/neg-powers-of-beta.usrs similarity index 100% rename from parameters/src/testnet3/resources/neg-powers-of-beta.usrs rename to parameters/src/testnet3/resources-tmp/neg-powers-of-beta.usrs diff --git a/parameters/src/testnet3/resources/powers-of-beta-15.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-15.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-15.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-15.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-15.usrs b/parameters/src/testnet3/resources-tmp/powers-of-beta-15.usrs similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-15.usrs rename to parameters/src/testnet3/resources-tmp/powers-of-beta-15.usrs diff --git a/parameters/src/testnet3/resources/powers-of-beta-16.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-16.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-16.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-16.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-17.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-17.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-17.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-17.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-18.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-18.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-18.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-18.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-19.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-19.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-19.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-19.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-20.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-20.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-20.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-20.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-21.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-21.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-21.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-21.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-22.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-22.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-22.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-22.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-23.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-23.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-23.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-23.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-24.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-24.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-24.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-24.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-25.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-25.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-25.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-25.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-26.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-26.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-26.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-26.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-27.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-27.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-27.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-27.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-28.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-28.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-28.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-28.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-gamma.metadata b/parameters/src/testnet3/resources-tmp/powers-of-beta-gamma.metadata similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-gamma.metadata rename to parameters/src/testnet3/resources-tmp/powers-of-beta-gamma.metadata diff --git a/parameters/src/testnet3/resources/powers-of-beta-gamma.usrs b/parameters/src/testnet3/resources-tmp/powers-of-beta-gamma.usrs similarity index 100% rename from parameters/src/testnet3/resources/powers-of-beta-gamma.usrs rename to parameters/src/testnet3/resources-tmp/powers-of-beta-gamma.usrs diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-15.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-15.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-15.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-15.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-15.usrs b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-15.usrs similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-15.usrs rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-15.usrs diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-16.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-16.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-16.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-16.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-17.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-17.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-17.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-17.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-18.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-18.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-18.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-18.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-19.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-19.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-19.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-19.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-20.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-20.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-20.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-20.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-21.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-21.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-21.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-21.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-22.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-22.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-22.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-22.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-23.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-23.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-23.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-23.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-24.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-24.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-24.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-24.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-25.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-25.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-25.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-25.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-26.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-26.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-26.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-26.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-27.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-27.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-27.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-27.metadata diff --git a/parameters/src/testnet3/resources/shifted-powers-of-beta-28.metadata b/parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-28.metadata similarity index 100% rename from parameters/src/testnet3/resources/shifted-powers-of-beta-28.metadata rename to parameters/src/testnet3/resources-tmp/shifted-powers-of-beta-28.metadata diff --git a/parameters/src/testnet3/resources/split.metadata b/parameters/src/testnet3/resources-tmp/split.metadata similarity index 100% rename from parameters/src/testnet3/resources/split.metadata rename to parameters/src/testnet3/resources-tmp/split.metadata diff --git a/parameters/src/testnet3/resources/transfer.metadata b/parameters/src/testnet3/resources-tmp/transfer.metadata similarity index 100% rename from parameters/src/testnet3/resources/transfer.metadata rename to parameters/src/testnet3/resources-tmp/transfer.metadata diff --git a/synthesizer/Cargo.toml b/synthesizer/Cargo.toml index 4d0f4c8ddc..1cd52674a8 100644 --- a/synthesizer/Cargo.toml +++ b/synthesizer/Cargo.toml @@ -45,6 +45,7 @@ aleo-cli = [ ] cuda = [ "snarkvm-algorithms/cuda" ] setup = [ ] timer = [ "aleo-std/timer" ] +wasm = [ ] [dependencies.circuit] package = "snarkvm-circuit" @@ -120,6 +121,10 @@ version = "1.0" [dependencies.tracing] version = "0.1" +[dependencies.web-sys] +version = "0.3" +features = ["console"] + [dev-dependencies.console] package = "snarkvm-console" path = "../console" diff --git a/synthesizer/src/process/mod.rs b/synthesizer/src/process/mod.rs index 9c14fc8ea4..c35c2c6282 100644 --- a/synthesizer/src/process/mod.rs +++ b/synthesizer/src/process/mod.rs @@ -39,7 +39,7 @@ use console::{ use aleo_std::prelude::{finish, lap, timer}; use indexmap::IndexMap; use parking_lot::RwLock; -use std::sync::Arc; +use std::{sync::Arc}; #[cfg(test)] use std::collections::HashMap; @@ -149,6 +149,61 @@ impl Process { Ok(process) } + /// Initializes a new process. + #[inline] + pub fn load_transfer() -> Result { + //use web_sys::console; + + let timer = timer!("Process::load"); + + // Initialize the process. + // let formatted_string = format!(" {:#?} : Loading Bytes", u_srs.); + // //console::log_1(&formatted_string.into()); + + let mut process = Self { universal_srs: Arc::new( UniversalSRS::load()?), stacks: IndexMap::new() }; + // process.universal_srs().clone()..to_bytes(); + lap!(timer, "Initialize process"); + + // Initialize the 'credits.aleo' program. + let program = Program::credits()?; + lap!(timer, "Load credits program"); + + // Compute the 'credits.aleo' program stack. + let stack = Stack::new(&process, &program)?; + lap!(timer, "Initialize stack"); + + // Synthesize the 'credits.aleo' circuit keys. + for function_name in program.functions().keys() { + if function_name.to_string() == "transfer" { + // Load the proving key. + let proving_key = N::get_credits_proving_key(function_name.to_string())?; + stack.insert_proving_key(function_name, ProvingKey::new(proving_key.clone()))?; + lap!(timer, "Load proving key for {function_name}"); + + // Load the verifying key. + let verifying_key = N::get_credits_verifying_key(function_name.to_string())?; + stack.insert_verifying_key(function_name, VerifyingKey::new(verifying_key.clone()))?; + lap!(timer, "Load verifying key for {function_name}"); + } + } + lap!(timer, "Load circuit keys"); + + // Initialize the inclusion proving key. + let _ = N::inclusion_proving_key(); + lap!(timer, "Load inclusion proving key"); + + // Initialize the inclusion verifying key. + let _ = N::inclusion_verifying_key(); + lap!(timer, "Load inclusion verifying key"); + + // Add the stack to the process. + process.stacks.insert(*program.id(), stack); + + finish!(timer, "Process::load"); + // Return the process. + Ok(process) + } + /// Initializes a new process with a cache of previously used keys. This version is suitable for tests /// (which often use nested loops that keep reusing those), as their deserialization is slow. #[cfg(test)] diff --git a/synthesizer/src/process/stack/inclusion/mod.rs b/synthesizer/src/process/stack/inclusion/mod.rs index c8b25a4237..31d74545f8 100644 --- a/synthesizer/src/process/stack/inclusion/mod.rs +++ b/synthesizer/src/process/stack/inclusion/mod.rs @@ -31,11 +31,10 @@ use crate::{ }; use console::{ network::prelude::*, - program::{InputID, StatePath, TransactionLeaf, TransitionLeaf, TRANSACTION_DEPTH}, + program::{Identifier, InputID, ProgramID, StatePath, TransactionLeaf, TransitionLeaf, TRANSACTION_DEPTH}, types::{Field, Group}, }; -use console::program::{Identifier, ProgramID}; use std::collections::HashMap; #[derive(Clone)] @@ -95,10 +94,13 @@ impl> Query { Self::VM(block_store) => { block_store.get_program(program_id)?.ok_or_else(|| anyhow!("Program {program_id} not found in storage")) } + #[cfg(not(feature = "wasm"))] Self::REST(url) => match N::ID { 3 => Ok(Self::get_request(&format!("{url}/testnet3/program/{program_id}"))?.json()?), _ => bail!("Unsupported network ID in inclusion query"), }, + #[cfg(feature = "wasm")] + _ => bail!("External API calls not supported from WASM"), } } @@ -106,10 +108,13 @@ impl> Query { pub fn current_state_root(&self) -> Result { match self { Self::VM(block_store) => Ok(block_store.current_state_root()), + #[cfg(not(feature = "wasm"))] Self::REST(url) => match N::ID { 3 => Ok(Self::get_request(&format!("{url}/testnet3/latest/stateRoot"))?.json()?), _ => bail!("Unsupported network ID in inclusion query"), }, + #[cfg(feature = "wasm")] + _ => bail!("External API calls not supported from WASM"), } } @@ -117,14 +122,18 @@ impl> Query { pub fn get_state_path_for_commitment(&self, commitment: &Field) -> Result> { match self { Self::VM(block_store) => block_store.get_state_path_for_commitment(commitment), + #[cfg(not(feature = "wasm"))] Self::REST(url) => match N::ID { 3 => Ok(Self::get_request(&format!("{url}/testnet3/statePath/{commitment}"))?.json()?), _ => bail!("Unsupported network ID in inclusion query"), }, + #[cfg(feature = "wasm")] + _ => bail!("External API calls not supported from WASM"), } } /// Performs a GET request to the given URL. + #[cfg(not(feature = "wasm"))] fn get_request(url: &str) -> Result { let response = reqwest::blocking::get(url)?; if response.status().is_success() { Ok(response) } else { bail!("Failed to fetch from {}", url) } diff --git a/synthesizer/src/store/consensus/mod.rs b/synthesizer/src/store/consensus/mod.rs index f8da25dd25..6906474691 100644 --- a/synthesizer/src/store/consensus/mod.rs +++ b/synthesizer/src/store/consensus/mod.rs @@ -38,11 +38,7 @@ pub trait ConsensusStorage: 'static + Clone + Send + Sync { /// The program storage. type ProgramStorage: ProgramStorage; /// The block storage. - type BlockStorage: BlockStorage< - N, - TransactionStorage = Self::TransactionStorage, - TransitionStorage = Self::TransitionStorage, - >; + type BlockStorage: BlockStorage; /// The transaction storage. type TransactionStorage: TransactionStorage; /// The transition storage. diff --git a/utilities/src/serialize/traits.rs b/utilities/src/serialize/traits.rs index 98d029a607..3861f934c4 100644 --- a/utilities/src/serialize/traits.rs +++ b/utilities/src/serialize/traits.rs @@ -64,13 +64,13 @@ pub trait Flags: Default + Clone + Copy + Sized { } } -#[derive(Copy, Clone, PartialEq, Eq)] +#[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum Compress { Yes, No, } -#[derive(Copy, Clone, PartialEq, Eq)] +#[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum Validate { Yes, No, @@ -205,6 +205,7 @@ where T: DeserializeOwned, { fn take_from_value>(value: &mut serde_json::Value, field: &str) -> Result { + serde_json::from_value( value .get_mut(field) diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index ecd413f7e4..e25423b6ba 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -26,6 +26,11 @@ edition = "2021" [lib] crate-type = [ "cdylib", "rlib" ] +[dependencies.snarkvm-circuit] +path = "../circuit" +version = "0.9.11" +optional = true + [dependencies.snarkvm-console] path = "../console" version = "0.9.11" @@ -44,6 +49,13 @@ version = "0.9.11" optional = true default-features = false +[dependencies.snarkvm-synthesizer] +path = "../synthesizer" +version = "0.9.11" +features = ["wasm"] +optional = true +default-features = false + [dependencies.snarkvm-utilities] path = "../utilities" version = "0.9.11" @@ -72,13 +84,17 @@ version = "0.3.33" [features] default = [ "full", "parallel" ] -full = [ "console", "curves", "fields", "utilities" ] +full = [ "circuit", "console", "curves", "fields", "synthesizer", "utilities" ] parallel = [ + "snarkvm-circuit", "snarkvm-console/parallel", "snarkvm-fields/parallel", + "snarkvm-synthesizer/parallel", "snarkvm-utilities/parallel" ] +circuit = [ "snarkvm-circuit" ] console = [ "snarkvm-console" ] curves = [ "snarkvm-curves" ] fields = [ "snarkvm-fields" ] +synthesizer = [ "snarkvm-synthesizer" ] utilities = [ "snarkvm-utilities" ] diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index 05d1f2b8a6..23b9de646e 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -14,6 +14,9 @@ // You should have received a copy of the GNU General Public License // along with the snarkVM library. If not, see . +#[cfg(feature = "circuit")] +pub use snarkvm_circuit::AleoV0; + #[cfg(feature = "console")] pub use snarkvm_console::*; @@ -26,5 +29,8 @@ pub use snarkvm_fields::*; #[cfg(feature = "utilities")] pub use snarkvm_utilities::*; +#[cfg(feature = "synthesizer")] +pub use snarkvm_synthesizer::*; + #[cfg(test)] mod tests;